pofeaa存储库模式的helper实用程序

rebecca.repositor的Python项目详细描述


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

rebecca.repository

sqlalchemy存储库模式的实现。

Getting Started

按PIP安装:

$ pip install rebecca.repository

Repository for SQLAlchemy

basic repository

通过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作为密钥。

conditional repository

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

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

repository factory

如果在请求期间传递参数,请使用factory。

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

参数job将从请求属性传递。

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

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

或repository_factory_config decorator:

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

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

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

Repository for Filesystem

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是事务性的。

注意

FileSystemRepository使用的repoze.filesafe还不支持py3k。

repository interface

创建演示对象:

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

存储库具有类似dict的界面:

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

以及实用方法:

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

pyramid integration

repository为金字塔注册表提供了指令。

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

或者使用repository配置装饰符:

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

若要获取已注册的存储库,请使用“获取存储库:

get_repository(request, 'person')

Contributors

  • Atsushi Odagiri,原作者

Changelog

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)

  • 首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaBridge errno=10054被Remotehost关闭   javafx如何在每次调用方法中的变量时更新它?(爪哇)   java mod_群集在发现后未平衡负载   Java软件编辑器/语法高亮   java为什么不能强制转换数组的结果。asList()到ArrayList?   java HIBERNATE:无法使用HIBERNATE从MySQL中提取数据   java在Google地图片段上添加布局   java在AbstractTableModel中执行setValueAt之前,我如何做一些事情?   java在整个Tomcat运行时保存变量   java如何在Thymeleaf模板中获取环境变量的值?   java Selenium Chrome驱动程序针对属性的标签   java正则表达式捕获未知数量的重复组