Metadata-Version: 2.1
Name: bixomix
Version: 0.1.1
Summary: Collection of SQLAlchemy mixins
Home-page: https://github.com/Bixoto/bixomix
License: MIT
Author: Baptiste Fontaine
Author-email: baptiste@bixoto.com
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: sqlalchemy (>=2.0,<3.0)
Description-Content-Type: text/markdown

# Bixomix

**bixomix** is a collection of SQLAlchemy mixins.

## Support

* Python 3.9+
* SQLAlchemy 2.0+

## Install

    pip install bixomix

## Usage

Add mixins after the `Base` class in each model’s parent classes. The order of the mixins doesn’t matter.

```python
from sqlalchemy.orm import DeclarativeBase

from bixomix import CreatedAtMixin, EnabledMixin


class Base(DeclarativeBase):
    pass


class MyModel(Base, CreatedAtMixin, EnabledMixin):
    # Add your own fields here
    ...
```

## Mixins

* `CreatedAtMixin`: add a `created_at` datetime field that’s automatically filled with the record’s creation date
* `UpdatedAtMixin`: add an `updated_at` datetime field that’s automatically filled with the record’s last update date.
  Note that on Postgres this is done in Python; for a database-level update you have to [create a trigger](https://stackoverflow.com/a/71072370/735926).
* `CreatedUpdatedAtMixin`: combined version of the previous two mixins
* `EnabledMixin`: add an `enabled` boolean field (default is `true`)
* `EnabledNoMixin`: same as `EnabledMixin`, but the default value is `false`
* `UpdateFromDictMixin`: add an `update_from_dict` method to update a model in-place given a dictionary of attributes

