diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e92a51b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +include requirements.txt +include LICENSE +include README.md +prune tests diff --git a/safrs/db.py b/safrs/db.py index 8054f68..b93ad4e 100644 --- a/safrs/db.py +++ b/safrs/db.py @@ -26,6 +26,7 @@ from sqlalchemy.types import Text, String, Integer, DateTime, TypeDecorator, Integer from sqlalchemy.ext.hybrid import hybrid_property from flask_marshmallow import Marshmallow +from sqlalchemy import inspect as sqla_inspect from werkzeug import secure_filename from flask_sqlalchemy import SQLAlchemy @@ -104,22 +105,6 @@ def _s_query(cls): query = _s_query - @classproperty - def _s_column_names(cls): - return [ c.name for c in cls.__mapper__.columns] - - @classproperty - def _s_columns(cls): - return list(cls.__mapper__.columns) - - @classproperty - def _s_class_name(cls): - return cls.__tablename__ - - @classproperty - def _s_type(cls): - return cls.__tablename__ - def __new__(cls, **kwargs): ''' If an object with given arguments already exists, this object is instantiated @@ -139,10 +124,6 @@ def __new__(cls, **kwargs): return instance - @property - def _s_relationships(self): - return self.__mapper__.relationships - def __init__(self, *args, **kwargs ): ''' Object initialization: @@ -187,6 +168,7 @@ def __init__(self, *args, **kwargs ): for rel_param in rel_params: rel_object = rel.mapper.class_(**rel_param) rel_attr.append(rel_object) + db.session.add(self) try: @@ -195,6 +177,31 @@ def __init__(self, *args, **kwargs ): # Exception may arise when a db constrained has been violated (e.g. duplicate key) raise GenericError(str(exc)) + + def _s_expunge(self): + session = sqla_inspect(self).session + session.expunge(self) + + @classproperty + def _s_column_names(cls): + return [ c.name for c in cls.__mapper__.columns] + + @classproperty + def _s_columns(cls): + return list(cls.__mapper__.columns) + + @classproperty + def _s_class_name(cls): + return cls.__tablename__ + + @classproperty + def _s_type(cls): + return cls.__tablename__ + + @property + def _s_relationships(self): + return self.__mapper__.relationships + def _s_patch(self, **kwargs): for attr in self._s_column_names: value = kwargs.get(attr,None) @@ -459,3 +466,6 @@ def get_db(): db = get_db() ma = Marshmallow() + + + diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..6e20689 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,16 @@ +[build_sphinx] +source-dir = docs/source +build-dir = docs/build +all_files = 1 + +[upload_sphinx] +upload-dir = doc/build/html + +[metadata] +description-file = README.md + +[zest.releaser] +create-wheel = yes + +[aliases] +test=pytest diff --git a/setup.py b/setup.py index dbf0ab2..8c9aef9 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,13 @@ from distutils.core import setup +from pip.req import parse_requirements + + +install_requires=[str(ir.req) for ir in parse_requirements('requirements.txt', session=False)] + setup( name = 'safrs', packages = ['safrs'], - version = '1.0.2', + version = '1.0.3', license = 'MIT', description = 'safrs : SqlAlchemy Flask-Restful Swagger2', author = 'Thomas Pollet', @@ -11,6 +16,7 @@ download_url = 'https://github.com/thomaxxl/safrs/archive/1.0.1.tar.gz', keywords = ['SqlAlchemy', 'Flask', 'REST', 'Swagger', 'JsonAPI', 'OpenAPI'], python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4', + install_requires=install_requires, classifiers = [ 'Development Status :: 3 - Alpha', 'License :: OSI Approved :: MIT License',