Skip to main content

helper utility for repository pattern of PofEAA

Project description

.. contents::

.. image:: https://travis-ci.org/rebeccaframework/rebecca.repository.png?branch=master
:target: https://travis-ci.org/rebeccaframework/rebecca.repository

rebecca.repository
===========================

An implementation of repository pattern for SQLAlchemy.


Getting Started
-------------------------------

install by pip::

$ pip install rebecca.repository


Implement your model by SQLAlchemy::

from sqlalchemy import Column, Integer, Unicode
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
DBSession = scoped_session(sessionmaker())

class Person(Base):
__tablename__ = "person"
id = Column(Integer, primary_key=True)
name = Column(Unicode(255))
age = Column(Integer, default=0)
job = Column(Unicode(255))

Get repository::

from rebecca.repository.sqla import SQLARepository

person_repository = SQALRepository(Person, Person.id, DBSession())

this repository for Person model.
To get person, use Person.id as key.

repository interface
---------------------------------------

create object for demonstration::

person1 = Person(name=u"person1")
DBSession.add(person1)
DBSession.flush() # to generate person.id


A repository has dict like interface::

person_repository[person.id]
person_repository.get(person.id)

and utility methods::

person_repository.get_many([1, 2, 3])
new_person = person_repository.new_item()

conditional repository
------------------------------------------

repository can configure to set condition::

person_repository = SQALRepository(Person, Person.id, DBSession(), condition=Person.age>30)


pyramid integration
----------------------------------------------

rebecca.repository provides directive for pyramid registry.::

config.include('rebecca.repository')
config.add_repository(person_repository, 'person')

or using repository_config decorator::

@repository_config(name="person", args=(DBSession,))
class PersonRepository(SQLARepository):
def __init__(self, dbsession):
super(PersonRepository, self).__init__(Person, Person.id, dbsession)

To get registered repositories, use get_repository::

get_repository(request, 'person')


repository factory
---------------------------------------------------------

If you pass the parameters during request time, use factory.

::

class JobPersonRepository(SQLARepository):
def __init__(self, db_session, job):
super(JobPersonRepository, self).__init__(Person, Person.id, dbsession,
condition=Person.job==job)


The parameter ``job`` will be passed from request attribute.

To register repository factory, add_repository_factory directive::

config.add_repository_factory(JobPersonRepository, "job-person", args=(DBSession,))

or repository_factory_config decorator::

@repository_factory_config("job-person", args=(DBSession,))
class JobPersonRepository(SQLARepository):
....


To create repository from registered factory, call create_repository API::

job = request.matchdict["job"]
repository = create_repository("person", args=(job,))
Contributors
============

- Atsushi Odagiri, Original Author

Changelog
=========

0.3 (2013-08-29)
--------------------------

- added repository factory API
- added get_many method

0.2 (2013-08-25)
-----------------------

- added pyramid config directive and venusian decorator

0.1.1 (2013-08-24)
-----------------------

- fix packaging bug

0.1 (2013-08-24)
-----------------------

- first release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rebecca.repository-0.3.zip (10.8 kB view details)

Uploaded Source

File details

Details for the file rebecca.repository-0.3.zip.

File metadata

File hashes

Hashes for rebecca.repository-0.3.zip
Algorithm Hash digest
SHA256 169aa5444288ad5c7cf4937c6ec944f9cd3073e258220cd3e50f74c605a45ba9
MD5 1cc127a2aa262b48598695c946d49c19
BLAKE2b-256 b783b5a080fc8e502f3dbb29e39f0353f329808312a239d7d3835a0fed86d86e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page