python orms的fixture实用程序

distiller的Python项目详细描述


https://secure.travis-ci.org/Birdback/distillery.png

distillery是另一个类似于python的factory_girl库 奥姆斯。

安装

pip install distillery

酿酒厂

每个酒厂都有一个__model__和一组属性和 方法。__model__是来自哪个实例的ORM模型类 将制作:

classUserDistillery(MyOrmDistillery):__model__=User

属性

酒厂类属性定义特定模型的默认值。 字段:

classUserDistillery(MyOrmDistillery):__model__=Userusername="defaultusername"

酿酒厂的属性值充当defaults。如果a User 对象是使用这个提取库创建的,它的username属性 将默认为"defaultusername"

惰性属性

使用lazydecorator,可以提供动态属性。

fromdistilleryimportlazyclassUserDistillery(MyOrmDistillery):__model__=Userusername="defaultusername"@lazydefemail_address(cls,instance,sequence):return"%s@%s"%(instance.username,instance.company.domain)

UserDistillery创建的所有新User都将具有 email_address根据他的用户名和公司域计算。

注意:所有lazies都收到一个instance和一个sequence,这是 对象实例和自动递增序列。

挂钩

酒厂可以提供一个_after_create类方法来钩住 进入工厂机器。

classUserDistillery(MyOrmDistillery):__model__=Userusername="defaultusername"@classmethoddef_after_create(cls,instance):# Do stuff after instance creation# ...

酒厂.init()

init()方法创建并填充一个新实例。

user=UserDistillery.init()assertuser.username=="defaultusername"assertuser.idisNoneuser=UserDistillery.create(username="overriddenusername")assertuser.username=="overriddenusername"assertuser.idisNone

酿酒厂.create()

create()方法使用init()和 随后保存它。

user=UserDistillery.create()assertuser.username=="defaultusername"assertuser.idisnotNone

酒厂.bulk()

批量创建实例。

users=UserDistillery.bulk(12,username="user_%(i)%")assertusers[7].username='user_7'

distillery.Set类充当fixture容器。

需要定义使用的__distillery__属性 创建对象

fromdistilleryimportSetclassUserSet(Set):__distillery__=UserDistilleryclassjeanphix:username='jeanphix'

要创建fixture,只需实例化集合。

users=UserSet()assertusers.jeanphix.username=='jeanphix'

重要的是,只要保持对实例化集的引用 (例如本例中的users变量),可以调用集合 再次返回相同的实例:

assertUserSet()isUserSet()

你也可以参考其他的集合。请注意,必须使用 类,或使用lazy属性(稍后介绍):

fromdistilleryimportSetclassCompanySet(Set):__distillery__=CompanyDistilleryclassmy_company:name='My company'classUserSet(Set):__distillery__=UserDistilleryclassjeanphix:username='jeanphix'company=CompanySet.companyusers=UserSet()assertusers.jeanphix.company=='My company'

除了类之外,还可以定义方法;每个方法都将导致 添加到集合中的对象。

classProfileSet(Set)class__distillery__:__model__=Profileadmin=lambdas:UserDistillery.create(username='admin').profile

此功能扩展到基于类的引用。请注意 引用必须在创建时可解析;循环 当前不支持关系。

classUserSet(Set):classpeter:friend=Noneclasspaul:friend=classmethod(lambdac:UserSet.peter)

如果设置了on_demand标志,则仅当第一个 已访问

users=UserSet(on_demand=True)users.jeanphix# jeanphix will be created here.

最后,可以嵌套集合。

classfixtures(Set):users=UserSetassertfixtures().users.jeanphix.username=='jeanphix'

挂钩

集合中的每个fixture都可以提供一个_after_createlistener:

classProfileSet(Set):class__distillery__:__model__=Profileclassadmin:@classmethoddef_after_create(cls,profile):profile.name='Full name'assertProfileSet().admin.name=='Full name'

orms

Django和SQLAlchemy都受支持

django

django模型可以使用DjangoDistillery来提取 需要一个__model__类成员:

fromdistilleryimportDjangoDistilleryfromdjango.auth.modelsimportUserclassUserDistillery(DjangoDistillery):__model__=User#  ...

炼金术

sqlalchemy酒厂需要__model____session__属性

fromdistilleryimportSQLAlchemyDistilleryfromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportsessionmakerengine=create_engine('sqlite://',echo=False)Session=sessionmaker()Session.configure(bind=engine)session=Session()Base=declarative_base()classUser(Base):#  ...classUserDistillery(SQLAlchemyDistillery):__model__=User__session__=session#  ...

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

推荐PyPI第三方库


热门话题
javapojo到org。布森。文件,反之亦然   java突然增加了G1老一代的承诺内存,减少了Eden的大小   java为什么对多个RXJava观察对象不执行并行执行?   java中的枚举是故障安全的吗?如果是,怎么做?   java是等待字符串变为相等的正确方法   java CodeAbbey挑战14个数据输入问题?   在java中的任意位置插入。util。列表   java替换html中的值   java需要帮助破译一个小堆栈跟踪:我使用的是哪种WS?   java Guice依赖项注入器空指针异常   java如何在3D引擎中实现视图剪裁平面?   JavaEclipseRCP:操作与命令需要更新   java如何使用XPAGES DesignerFacesServlet显示泰语字母(以及另一个亚洲/阿拉伯字母)   java装饰器模式问题   java我对空间复杂性的分析正确吗?   不显示java OpenGL ES 2纹理   使用java问题中的wc命令计算行数   java为什么空指针异常取决于条件的顺序?   Java日期在同一天或同一个月   java在使用lambda表达式时在变量中存储一些值