pyramid_basemodel - a thin, low level SQLAlchemy bindings to pyramid
Project description
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/
CHANGES
0.5.0
- [simplify] Removed
inspect
andto_slug
fromBaseSlugNameMixin.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
fromBlob.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_requireslist 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyramid_basemodel-0.5.0.tar.gz
.
File metadata
- Download URL: pyramid_basemodel-0.5.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.1.2 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0123a71845d9fd2a2e7d10e7dcc33ad48d071310b793aa828a0329a83b9d9e75 |
|
MD5 | e69da45fe9acd8dca04632a85095e687 |
|
BLAKE2b-256 | 475349f7db1cbe918495be3fc225b018c91819c387154a828b9996be9d4db1d1 |
File details
Details for the file pyramid_basemodel-0.5.0-py2.py3-none-any.whl
.
File metadata
- Download URL: pyramid_basemodel-0.5.0-py2.py3-none-any.whl
- Upload date:
- Size: 15.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.1.2 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 843fdc10976066b1078f964f0109fb5f65896f4139028697d075196108236edb |
|
MD5 | 859e12c8551f33421edced347700931b |
|
BLAKE2b-256 | 9e6f356c636cf56e720877117d28b0ae26330e390abb4aac1124c2d4c44a42e1 |