architect 0.6.0
A set of tools which enhances ORMs written in Python with more features
License: Apache 2.0
Requires Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
Keywords: architect,django,pony,peewee,sqlalchemy,sqlobject,partition,partitioning,database,table

Architect
=========

.. image:: https://badge.fury.io/py/architect.svg
   :target: https://badge.fury.io/py/architect

.. image:: https://img.shields.io/travis/maxtepkeev/architect/master.svg
   :target: https://travis-ci.org/maxtepkeev/architect

.. image:: https://img.shields.io/coveralls/maxtepkeev/architect/master.svg
   :target: https://coveralls.io/r/maxtepkeev/architect?branch=master

Architect is a set of tools which enhances ORMs written in Python with more features and simplifies
different database related complex tasks.

Features
--------

* Supported ORMs

  - `Django <https://www.djangoproject.com>`_ >= 1.4
  - `Peewee <https://peewee.readthedocs.io>`_ >= 2.8.0
  - `Pony <https://ponyorm.com>`_ >= 0.5.0
  - `SQLAlchemy <https://www.sqlalchemy.org>`_ >= 1.0.0
  - `SQLObject <https://www.sqlobject.org>`_ >= 3.5.0

* Supported DBs

  - `PostgreSQL <https://www.postgresql.org>`_ >= 8.0
  - `MySQL <https://www.mysql.com>`_ >= 5.5

* Supports Python 2.7, 3.5 - 3.8
* Extensively documented

Dependencies
------------

Architect has no required external dependencies except for the ORM it will be used with.

Installation
------------

To install Architect, simply:

.. code-block:: bash

   $ pip install architect

or:

.. code-block:: bash

   $ easy_install architect

Documentation
-------------

Documentation is available at https://architect.readthedocs.io.

Contacts and Support
--------------------

I will be glad to get your `feedback <https://github.com/maxtepkeev/architect/issues>`_, `pull requests
<https://github.com/maxtepkeev/architect/pulls>`_, `issues <https://github.com/maxtepkeev/architect/issues>`_,
whatever. Feel free to contact me for any questions.

Donations and Sponsorship
-------------------------

If you like this project and want to support it you have several options:

#. Just give this project a star at the `GitHub <https://github.com/maxtepkeev/architect>`_ repository.
#. Become a sponsor. Contact me via ``tepkeev at gmail dot com`` if you are interested in becoming a sponsor
   and we will discuss the terms and conditions.

Thanks
------

PremiumSoft for supporting this project by providing `Open Source License
<https://www.navicat.com/store/open-source>`_ of `Navicat <https://www.navicat.com>`_.

.. image:: https://architect.readthedocs.io/_images/navicat_logo.png
   :width: 300px
   :height: 121px
   :target: https://www.navicat.com

Copyright and License
---------------------

Architect is licensed under Apache 2.0 license. Check the `LICENSE
<https://github.com/maxtepkeev/architect/blob/master/LICENSE>`_ for details.


Changelog
---------

0.6.0 (2020-11-14)
++++++++++++++++++

**Improvements**:

- Peewee: Added support for 3.x branch (`Issue #73 <https://github.com/maxtepkeev/architect/issues/73>`__)
- Django: Added support for 3.x branch (`Issue #76 <https://github.com/maxtepkeev/architect/issues/76>`__)

**Changes**:

- *Backwards Incompatible:* Peewee minimum supported version is 2.8.0
- *Backwards Incompatible:* SQLObject minimum supported version is 3.5.0
- *Backwards Incompatible:* Removed Python 2.6, 3.2, 3.3, 3.4 support

**Bugfixes**:

- PostgreSQL: Tables with uppercase names weren't partitioned correctly (`Issue #58
  <https://github.com/maxtepkeev/architect/issues/58>`__)

0.5.6 (2017-05-01)
++++++++++++++++++

- Added: Support for testing all databases in one go using ``DB=all`` environmental variable
- Fixed: Django: Unable to partition tables in multi database configuration without ``default`` database
- Fixed: PostgreSQL: Failed to partition a table if a reserved keyword was used as a column name (turned
  out this wasn't fixed properly in v0.5.4) (thanks to `ra2er <https://github.com/ra2er>`__)

0.5.5 (2016-10-08)
++++++++++++++++++

- Fixed: Django: Error handling with 1.10.x branch

0.5.4 (2016-07-04)
++++++++++++++++++

- Added: Django: `Issue #30 <https://github.com/maxtepkeev/architect/issues/30>`__ (Support for
  using database routers to determine correct database for a model in a multi database configuration)
- Fixed: Peewee: Table partitioning was broken in Peewee >= 2.7.4 due to Peewee API changes
- Fixed: PostgreSQL: Failed to partition a table if a reserved keyword was used as a column name

0.5.3 (2015-11-08)
++++++++++++++++++

- Added: Tests are now built-in into source package distributed via PyPI
- Fixed: Django: `Issue #21 <https://github.com/maxtepkeev/architect/issues/21>`__ (Unable to partition a
  model with non-lazy translations)

0.5.2 (2015-07-31)
++++++++++++++++++

- Fixed: PostgreSQL: `Issue #14 <https://github.com/maxtepkeev/architect/issues/14>`__ (Error when trying
  to save a record into a table if partitioned column value had special characters inside, using
  ``string_firstchars`` and ``string_lastchars`` partition subtypes)
- Fixed: PostgreSQL: `Issue #11 <https://github.com/maxtepkeev/architect/issues/11>`__ (Error when trying
  to save a record into a table that was partitioned by a column that can be ``NULL``, now if a column, that
  was used for partitioning, has ``NULL`` value it will be inserted into a special partition with ``_null``
  postfix)
- Fixed: SQLObject: Error when trying to partition a model with a field that has a ``default`` attribute
  set to some value

0.5.1 (2015-06-08)
++++++++++++++++++

- Fixed: `Issue #13 <https://github.com/maxtepkeev/architect/issues/13>`__ (MySQL support was broken
  in v0.5.0 released to PyPI)

0.5.0 (2015-05-08)
++++++++++++++++++

- Added: Django: `Issue #9 <https://github.com/maxtepkeev/architect/issues/9>`__ (Support for multiple
  databases)
- Added: Support for custom features, see `docs <https://architect.readthedocs.io/features/custom.html>`__
  for details
- Changed: ``dsn`` partition option renamed to ``db`` to cover more use cases
- Changed: ``DsnParseError`` exception renamed to ``OptionValueError`` to cover more use cases
- Fixed: Django: Error when trying to partition a model with Django <= 1.5 in debug mode
- Fixed: "No module named modulename.py" error when trying to specify model's module with .py extension
  at the end in partition command

0.4.0 (2015-04-18)
++++++++++++++++++

- Added: `wheel <https://wheel.readthedocs.io>`__ support
- Added: `SQLObject <https://www.sqlobject.org>`__ ORM support
- Added: PostgreSQL: New ``integer`` (thanks to `Nikolay Yarovoy <https://github.com/nickspring>`__),
  ``string_firstchars`` (thanks to `Dmitry Brytkov <https://github.com/dimoha>`__) and ``string_lastchars``
  range partition subtypes, see `docs <https://architect.readthedocs.io/features/partition/postgresql.html
  #range>`__ for details
- Changed: ``range`` partition option renamed to ``constraint`` to better suit new partition subtypes
- Changed: PostgreSQL: Triggers refactoring and speedups, don't forget to rerun ``partition`` command to
  apply new refactored triggers to the database
- Fixed: ``architect.uninstall`` decorator wasn't able to restore modified model methods under
  Python 3

0.3.0 (2015-04-05)
++++++++++++++++++

- Added: Documentation rewritten from scratch
- Added: Introduced completely new API (almost 80% of Architect code was rewritten from scratch).
  All functionality is now provided by an ``architect.install`` decorator which dynamically injects
  requested feature, e.g. partition, into a model under the ``architect`` namespace, e.g.
  ``model.architect.partition``. No more mixins, inheritance and nested classes with settings that
  pollute model's namespace. More information is available in the `docs <https://architect.readthedocs.io
  /features/index.html>`__
- Added: New ``operation`` feature which provide an abstraction layer to execute raw SQL statements
  which will work with any supported ORM, see `docs <https://architect.readthedocs.io/features/
  operation.html>`__
- Fixed: `Issue #8 <https://github.com/maxtepkeev/architect/issues/8>`__ (``cannot import name
  string_literal`` error with PonyORM and PyMySQL if ``pymysql.install_as_MySQLdb()`` was used)
- Fixed: `Issue #7 <https://github.com/maxtepkeev/architect/pull/7>`__ (SQLite dummy backend was
  completely broken)
- Fixed: `Issue #4 <https://github.com/maxtepkeev/architect/pull/4>`__ (``autocommit cannot be
  used inside a transaction`` error with Django if a model was used inside ``with
  transaction.atomic()`` block)
- Fixed: `Issue #2 <https://github.com/maxtepkeev/architect/issues/2>`__ (``partition``
  command was unable to find module with models to partition)
- Fixed: `Issue #1 <https://github.com/maxtepkeev/architect/issues/1>`__ (``relation already
  exists`` error when trying to insert data into non-existent partition simultaneously from
  several queries) (thanks to `Daniel Kontsek <https://github.com/dn0>`__)

0.2.0 (2014-07-19)
++++++++++++++++++

- Added: MySQL: Range partitioning support

0.1.0 (2014-07-13)
++++++++++++++++++

- Initial release