Changelog¶
v1.5.1 (2015-01-13)¶
- Add support for callable
__table_args__and__local_table_args__. Thanks sethp!
v1.5.0 (2014-12-16)¶
- Add
Model.is_modified(). Thanks sethp! - Add
Model.filter(). - Add
Model.filter_by().
v1.4.2 (2014-11-18)¶
- Add
search.inenumandsearch.notinenumfor performing anin_andnot(in_)comparision usingDeclarativeEnum.
v1.4.1 (2014-11-17)¶
- Allow
Model.__bind_key__to be set at the declarative base level so that model classes can properly inherit it.
v1.4.0 (2014-11-09)¶
v1.3.1 (2014-10-14)¶
- During
Model.update()when setting a non-list relationship automatically instantiatedictvalues using the relationship model class.
v1.3.0 (2014-10-10)¶
- Convert null relationships to
{}when callingModel.to_dict()instead of leaving asNone.
v1.2.0 (2014-10-10)¶
- During
Model.update()when setting a list relationship automatically instantiatedictvalues using the relationship model class.
v1.1.2 (2014-09-25)¶
- Allow
aliaskeyword argument toQuery.join_eager()andQuery.outerjoin_eager()to be adictmapping aliases to join keys. Enables nested aliases.
v1.1.1 (2014-09-01)¶
- Fix handling of nested
Model.update()calls to relationship attributes so that setting relationship to emptydictwill propagateNoneto relationship attribute value correctly.
v1.1.0 (2014-08-30)¶
- Add
query.LoadOptionto support nesting load options when calling thequery.Queryload methods:join_eager,outerjoin_eager,joinedload,immediateload,lazyload,noload, andsubqueryload.
v1.0.0 (2014-08-25)¶
- Replace usage of
@classpropertydecorators inModelBasewith@classmethod. Any previously defined class properties now require method access. Affected attributes are:session,primary_key,primary_keys,primary_attrs,attrs,descriptors,relationships,column_attrs, andcolumns. (breaking change) - Proxy
getitemandsetitemaccess togetattrandsetattrinModelBase. Allows models to be accessed like dictionaries. - Make
alchy.eventsdecorators class based. - Require
alchy.eventsdecorators to be instantiated using a function call (e.g.@events.before_update()instead of@events.before_update). (breaking change) - Add
alchy.searchcomparators,eqenumandnoteqenum, for comparingDeclarativeEnumtypes.
v0.13.3 (2014-07-26)¶
- Fix
utils.iterflatten()by callingiterflatten()instead offlattenin recursive loop.
v0.13.2 (2014-06-12)¶
- Add
ModelBase.primary_attrsclass property that returns a list of class attributes that are primary keys. - Use
ModelBase.primary_attrsinQueryModel.search()so that it handles cases where primary keys have column names that are different than the class attribute name.
v0.13.1 (2014-06-11)¶
- Modify internals of
QueryModel.search()to better handle searching on a query object that already has joins and filters applied.
v0.13.0 (2014-06-03)¶
- Add
search.icontainsandsearch.noticontainsfor case insensitive contains filter. - Remove strict update support from
Model.update(). Require this to be implemented in user-land. (breaking change)
v0.12.0 (2014-05-18)¶
- Merge originating query where clause in
Query.searchso that pagination works properly. - Add
session_classargument toManagerwhich can override the default session class used.
v0.11.3 (2014-05-05)¶
- In
ModelMetawhen checking whether to do tablename autogeneration, tranverse all base classes when trying to determine if a primary key is defined. - In
ModelMetasetbind_keyin__init__method instead of__new__. This also fixes an issue where__table_args__was incorrectly assumed to always be adict.
v0.11.2 (2014-05-05)¶
- Support
order_byas list/tuple inQueryModel.search().
v0.11.1 (2014-05-05)¶
- Fix bug in
QueryModel.search()whereorder_bywasn’t applied in the correct order. Needed to come before limit/offset are applied.
v0.11.0 (2014-05-04)¶
- PEP8 compliance with default settings.
- Remove
query_propertyargument frommake_declarative_base()andextend_declarative_base(). (breaking change) - Add
ModelBase.primary_keysclass property which returns a tuple always (ModelBase.primary_keyreturns a single key if only one present or a tuple if multiple). - Move location of class
QueryPropertyfromalchy.modeltoalchy.query. (breaking change) - Create new
Querysubclass namedQueryModelwhich is to be used within a query property context. ReplaceQuerywithQueryModelas default query class. (breaking change) - Move
__advanced_search__and__simple_search__class attributes fromModelBasetoQueryModel. (breaking change) - Introduce
QueryModel.__search_filters__which can define a canonical set of search filters which can then be referenced in the list version of__advanced_search__and__simple_search__. - Modify the logic of
QueryModel.search()to use a subquery joined onto the originating query in order to support pagination when one-to-many and many-to-many joins are present on the originating query. (breaking change) - Support passing in a callable that returns a column attribute for
alchy.search.<method>(). Allows foralchy.search.contains(lambda: Foo.id)to be used at the class attribute level whenFoo.idwill be defined later. - Add search operators
any_/notany_andhas/nothaswhich can be used for the corresponding relationship operators.
v0.10.0 (2014-04-02)¶
- Issue warning instead of failing when installed version of SQLAlchemy isn’t compatible with
alchy.Query‘s loading API (i.e. missingsqlalchemy.orm.strategy_options.Load). This allowsalchyto be used with earlier versions of SQLAlchemy at user’s own risk. - Add
alchy.searchmodule which provides compatible search functions forModelBase.__advanced_search__andModelBase.__simple_search__.
v0.9.1 (2014-03-30)¶
- Change
ModelBase.sessionto proxyModelBase.query.session. - Add
ModelBase.object_sessionproxy toorm.object_session(ModelBase).
v0.9.0 (2014-03-26)¶
- Remove
engine_config_prefixargument toManager(). (breaking change) - Add explicit
session_optionsargument toManager(). (breaking change) - Change the
Manager.configoptions to follow Flask-SQLAlchemy. (breaking change) - Allow
Manager.configto be either adict,class, ormodule object. - Add multiple database engine support using a single
Managerinstance. - Add
__bind_key__configuration option forModelBasefor binding model to specific database bind (similar to Flask-SQLAlchemy).
v0.8.0 (2014-03-18)¶
- For
ModelBase.update()don’t nestupdate()calls if field attribute is adict. - Deprecated
refresh_on_emptyargument toModelBase.to_dict()and instead implementModelBase.__to_dict__configuration property as place to handle processing of model before casting todict. (breaking change) - Add
ModelBase.__to_dict__configuration property which handles preprocessing for model instance and returns a set of fields as strings to be used as dict keys when callingto_dict().
v0.7.0 (2014-03-13)¶
- Rename
alchy.ManagerBasetoalchy.ManagerMixin. (breaking change) - Add
pylintsupport. - Remove dependency on
six.
v0.6.0 (2014-03-10)¶
- Prefix event decorators which did not start with
before_orafter_withon_. Specifically,on_set,on_append,on_remove,on_append_result,on_create_instance,on_instrument_class,on_mapper_configured,on_populate_instance,on_translate_row,on_expire,on_load, andon_refresh. (breaking change) - Remove lazy engine/session initialization in
Manager. Require thatModelandconfigbe passed in at init time. While this removes some functionality, it’s done to simplify theManagercode so that it’s more straightforward. If lazy initialization is needed, then a proxy class should be used. (breaking change)
v0.5.0 (2014-03-02)¶
- Add
ModelBase.primary_keyclass property for retrieving primary key(s). - Add
Base=Noneargument tomake_declarative_base()to support passing in a subclass ofModelBase. Previously had to create a declarativeModelto pass in a subclassedModelBase. - Let any exception occurring in
ModelBase.queryattribute access bubble up (previously,UnmappedClassErrorwas caught). - Python 2.6 and 3.3 support.
- PEP8 compliance.
- New dependency:
six(for Python 3 support)
v0.4.2 (2014-02-24)¶
- In
ModelBase.to_dict()only include fields which are mapper descriptors. - Support
to_dictmethod hook when iterating over objects inModelBase.to_dict(). - Add
to_dictmethod hook toEnumSymbol(propagates toDeclarativeEnum).
v0.4.1 (2014-02-23)¶
- Support
__iter__method in model so thatdict(model)is equilvalent tomodel.to_dict(). - Add
refresh_on_empty=Trueargument toModelBase.to_dict()which supports callingModelBase.refresh()if__dict__is empty.
v0.4.0 (2014-02-23)¶
- Add
ModelBase.save()method which adds model instance loaded from session to transaction. - Add
ModelBase.get_by()which proxies toModelBase.query.filter_by().first(). - Add model attribute
events. - Add support for multiple event decoration.
- Add named events for all supported events.
- Add composite events for
before_insert_updateandafter_insert_update.
v0.3.0 (2014-02-07)¶
- Rename
ModelBase.advanced_search_configtoModelBase.__advanced_search__. - Rename
ModelBase.simple_search_configtoModelBase.__simple_search__ - Add
ModelMetametaclass. - Implement
__tablename__autogeneration from class name. - Add mapper event support via
ModelBase.__events__and/ormodel.eventdecorator.
v0.2.1 (2014-02-03)¶
- Fix reference to
model.make_declarative_baseinManagerclass.
v0.2.0 (2014-02-02)¶
- Add default
query_classto declarative model if none defined. - Let
model.make_declarative_base()accept predefined base and just extend its functionality.
v0.1.0 (2014-02-01)¶
- First release