跳转到主要内容

用于PofEAA存储库模式的辅助工具

项目描述

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

rebecca.repository

用于SQLAlchemy的存储库模式的实现。

入门指南

使用pip安装

$ pip install rebecca.repository

SQLAlchemy的存储库

基本存储库

通过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))

获取存储库

from rebecca.repository.sqla import SQLARepository

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

此存储库用于Person模型。要获取人员,请使用Person.id作为键。

条件存储库

存储库可以配置以设置条件

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

存储库工厂

如果在请求时间传递参数,请使用工厂。

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

参数job将来自请求属性。

要注册存储库工厂,请添加add_repository_factory指令

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

或使用repository_factory_config装饰器

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

要从注册的工厂创建存储库,请调用create_repository API

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

文件系统的存储库

rebecca.repository.fs.FileSystemRepository是文件系统的存储库

>>> repository = FileSystemRepository(directory="/path/to/data")
>>> item = repository.new_item("new-item")
>>> item.data = b"testing-binary-data"
>>> import transaction
>>> transaction.commit()

FileSystemRepository.new_item是创建新的文件系统条目。 item.data是保存到文件的二进制数据。这与transaction 具有事务性。

存储库接口

创建演示对象

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

存储库具有类似于字典的接口

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

以及实用方法

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

Pyramid集成

rebecca.repository为Pyramid注册提供了指令

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

或使用repository_config装饰器

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

要获取已注册的存储库,请使用get_repository

get_repository(request, 'person')

贡献者

  • Atsushi Odagiri,原作者

变更日志

0.4 (2013-09-22)

  • 文件存储库(尚未)

0.3 (2013-08-29)

  • 添加了存储库工厂API

  • 添加了get_many方法

0.2 (2013-08-25)

  • 添加了金字塔配置指令和金星装饰器

0.1.1 (2013-08-24)

  • 修复了打包错误

0.1 (2013-08-24)

  • 第一个版本

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

rebecca.repository-0.4.zip (12.4 kB 查看哈希值)

上传时间 源代码

构建分发

rebecca.repository-0.4-py2.py3-none-any.whl (9.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者