Features ======== .. The reason we are using raw html for paragraphs here is because otherwise they will be inserted into the left menu and we don't want that. At the time of writing there is no other way to do what we want other than this ugly one. Architect has a concept of "features". A feature in Architect is something that can somehow enhance the ORM Architect is used with, e.g. table partitioning. Architect provides a single interface to all of its features despite of the ORM being used. .. raw:: html

install

All features in Architect are installed into models using ``install`` decorator. An ``install`` decorator in it's general form can be written as the following: .. code-block:: python import architect @architect.install(feature, **options) class Model(object): pass where ``feature`` is the feature name as a string which should be installed into the model class and ``options`` are the options that this feature takes (if any) in the form of keyword arguments. If a model wants to use several features, this can easily be done with applying several decorators at once, like this: .. code-block:: python import architect @architect.install(feature1, **options1) @architect.install(feature2, **options2) @architect.install(feature3, **options3) class Model(object): pass All installed features can be found inside ``architect`` namespace inside the model, e.g.: .. code-block:: python >>> print(dir(Model.architect)) ['__class__', '__dict__', 'feature1', 'feature2', 'feature3'] This provides 100% non-conflicting behaviour with all ORMs and other 3rd party packages. .. note:: Architect tries its best to automatically determine what ORM it is being used with, however there can be situations when it can fail to properly do that. To help Architect, one can pass an ``orm`` option to the ``install`` decorator and set it to the needed ORM. .. raw:: html

uninstall

Under some circumstances a model might not need one or all of the installed features anymore, one example can be a model inheritance, where the parent model has a feature installed and a child model doesn't want to use it. A feature can be easily uninstalled from a model using ``uninstall`` decorator: .. code-block:: python import architect @architect.uninstall(feature) class ChildModel(object): pass where a ``feature`` is a feature name as a string which was installed before. .. toctree:: :hidden: :maxdepth: 1 operation partition/index custom