Metadata-Version: 2.1
Name: pyramid-basemodel
Version: 0.5.2
Summary: pyramid_basemodel - a thin, low level SQLAlchemy bindings to pyramid
Home-page: http://github.com/fizyk/pyramid_basemodel
Author: James Arthur
Maintainer: Grzegorz Śliwiński
Maintainer-email: fizyk+pypi@fizyk.dev
License: UNLICENSE
Project-URL: Bug Tracker, https://github.com/fizyk/pyramid_basemodel/issues
Project-URL: Changelog, https://github.com/fizyk/pyramid_basemodel/blob/v0.5.2/CHANGES.rst
Keywords: pyramid,sqlalchemy
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: The Unlicense (Unlicense)
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Framework :: Pyramid
Classifier: Topic :: Database :: Front-Ends
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
Provides-Extra: tests

pyramid_basemodel
=================

**pyramid_basemodel** is a thin, low level package that provides an SQLAlchemy
declarative `Base` and a thread local scoped `Session` that can be used by
different packages whilst only needing to be bound to a db engine once.

Usage
-----

You can use these as base classes for declarative model definitions, e.g.:

.. code-block:: python

    from pyramid_basemodel import Base, BaseMixin, Session, save

    class MyModel(Base, BaseMixin):
        """Example model class."""

        @classmethod
        def do_foo(cls):
            instance = Session.query(cls).first()
            save(instance)


You can then bind these to the `sqlalchemy.url` in your paster `.ini` config by
importing your model and this package, e.g.:

.. code-block:: python

    # for example in yourapp.__init__.py
    import mymodel
    
    def main(global_config, **settings):
        config = Configurator(settings=settings)
        config.include('pyramid_basemodel')
        config.include('pyramid_tm')
        return config.make_wsgi_app()

Or if this is all too much voodoo, you can just use the `bind_engine` function::

.. code-block:: python

    from pyramid_basemodel import bind_engine
    from mypackage import mymodel

    # assuming `engine` is a bound SQLAlchemy engine.
    bind_engine(engine)

Note that the `Session` is designed to be used in tandem with [pyramid_tm][].
If you don't include `pyramid_tm`, you'll need to take care of committing
transactions yourself.

Tests
-----

To run the tests use:

.. code-block::

    py.test -v --cov pyramid_basemodel tests/

[pyramid_basemodel]: http://github.com/fizyk/pyramid_basemodel
[pyramid_simpleauth]: http://github.com/thruflo/pyramid_simpleauth
[pyramid_tm]: http://pyramid_tm.readthedocs.org

Release
=======

Install pipenv and --dev dependencies first, Then run:

.. code-block::

    pipenv run tbump [NEW_VERSION]

CHANGES
=======

.. towncrier release notes start

0.5.2 (2022-11-25)
==================

Miscellaneus
------------

- Moved development dependency management into pipfile/pipfile.lock (`#283 <https://https://github.com/fizyk/pyramid_basemodel/issues/283>`_)
- Change versionin bumping tool from bumpversion to tbump (`#285 <https://https://github.com/fizyk/pyramid_basemodel/issues/285>`_)
- Updated package description to support python 3.11 (`#286 <https://https://github.com/fizyk/pyramid_basemodel/issues/286>`_)
- Added project urls to setup.cfg for better pypi.org experience. (`#287 <https://https://github.com/fizyk/pyramid_basemodel/issues/287>`_)


0.5.1
-----

* [package] Marked python 3.10 compatible (Trove Classifiers)

0.5.0
-----

* [simplify] Removed `inspect` and `to_slug` from `BaseSlugNameMixin.set_slug` method. These parameters seemd like a way 
  to override some core functionality, which seems like a rare enough case to not maintain it, especially without tests.
* [simplify] Removed `named_tempfile_cls` from `Blob.get_as_named_tempfile` as it wasn't used.
* [simplify] Simplified the `Blob.update_from_url`. Now the method accepts only url parameter and does exactly one thing.
* [code] Use default arguments instead of compose sections.

0.4.0
-----

* [enhancement] Switch slugify to python-slugify as the latter is python3 compatible
* [enhancement] As far as existing tests are concerned, now there's both full
  compatibility and feature parity between python 2 and python 3
* [CI] use CI

0.3.7
-----

* Fix support for zope.sqlalchemy >= 1.2

0.3.4
-----

* Remove stray print statements.

0.3.3
-----

* Bump to remove `src/*.egg-info` directory from PyPI distribution.

0.3.2
-----

* Make engine kwargs configurable.

0.3.1
-----

* Introduce the `basemodel.should_bind_engine` config flag, which can be used,
  e.g.: in ftests, to disable the automatic engine setup, even when application
  code `config.include('pyramid_basemodel')`\s.

  Defaults to `True`!

0.3
---

Default `basemodel.should_create_all` to `False`. This will break apps that rely on tables being created by default. However, it's much saner to only
invoke both `metadata.create_all(engine)` and `metadata.drop_all(engine)` when
explicitly told to, particularly as most applications will use migrations
to manage the database schema.

0.2.4 -> 0.2.6
--------------

Faff about horribly with the slug generation code.

0.2.3
-----

Fix Python3 `KeyError` syntax bug.

0.2.2
-----

Support dotted path `sqlalchemy.pool_class` configuration.

0.2.1
-----

Provide `util.get_object_id` function and stamp
`sqlalchemy.ext.declarative.declarative_base()` subclasses with the
`interfaces.IDeclarativeBase` interface.

0.2
---

Fix Python3 support (requires 3.3 for the unicode literal character).

0.1.8
-----

Allow concrete subclasses of ``BaseModelContainer`` to be provided in the
``tree.BaseContentRoot.mapping`` (as well as interfaces).

0.1.7
-----

Added a `pyramid_basemodel.blob.Blob` model class to store large binary files.

Fixed up `.slug` module doctests. Fix `install_requires` list in `setup.py`.

0.1.6
-----

Base the ``BaseMixin.class_name`` on a singularised version of the plural
class name.  This may seem a bit arse about face, but allows us to use the
tablename to split the word, e.g.:

.. code-block::

    >>> class OperatingScale(Base, BaseMixin):
    ...     __tablename__ 'operating_scales'
    ... 

    >>> OperatingScale.class_name
    'Operating Scale'

Just ignore all this if you don't plan on using the `class_name`, `class_slug` and
`plural_class_name` properties.

0.1.5
-----

Provide `BaseMixin.class_slug` and base it and the `BaseMixin.plural_class_name`
on the `cls.__tablename__` instead of the `cls.__name__`.

All still manually overrideable by providing the corresponding property with a
single underscore, e.g.: `cls._plural_class_name`.

0.1.4
-----

Provide `BaseMixin.class_name` and `BaseMixin.plural_class_name`.

0.1.3
-----

Bugfix to parse config options properly.

0.1.2
-----

Added `basemodel.should_create_all` configuration option.

