Metadata-Version: 2.1
Name: pyramid-basemodel
Version: 0.5.1
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.net.pl
License: UNLICENSE
Keywords: pyramid,sqlalchemy
Platform: UNKNOWN
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: 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/markdown
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.::

    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.:

    # 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::

    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:

    py.test -v --cov pyramid_basemodel tests/

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

# CHANGES

## 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.:

    >>> 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.



