混合器 -- 是一个固定装置的替代品。支持Django ORM、SqlAlchemy ORM、Mongoengine ODM和自定义Python对象。
项目描述
混合器 是生成Django或SqlAlchemy模型实例的辅助工具。它对测试和固定装置替代品很有用。快速方便的测试数据生成。
混合器支持
Pony;
自定义方案;
文档可在 https://mixer.readthedocs.org/ 找到。包含文档改进和/或修复的拉取请求非常棒,非常受欢迎。
俄语描述: http://klen.github.io/mixer.html
要求
Python 3.7+
Django(3.0,3.1)用于Django ORM支持;
Flask-SQLAlchemy用于SQLAlchemy ORM支持和作为Flask应用程序的集成;
Faker >= 0.7.3
Mongoengine用于Mongoengine ODM支持;
SQLAlchemy用于SQLAlchemy ORM支持;
Peewee ORM支持;
安装
Mixer应使用pip安装
pip install mixer
使用
默认情况下,Mixer尝试生成伪造的(人性化的)数据。如果您想随机化生成的值,请手动初始化Mixer:Mixer(fake=False)默认情况下,Mixer将生成的对象保存到数据库中。如果您想禁用这,请手动初始化Mixer,如Mixer(commit=False)
Django工作流程
快速示例
from mixer.backend.django import mixer
from customapp.models import User, UserMessage
# Generate a random user
user = mixer.blend(User)
# Generate an UserMessage
message = mixer.blend(UserMessage, user=user)
# Generate an UserMessage and an User. Set username for generated user to 'testname'.
message = mixer.blend(UserMessage, user__username='testname')
# Generate SomeModel from SomeApp and select FK or M2M values from db
some = mixer.blend('someapp.somemodel', somerelation=mixer.SELECT)
# Generate SomeModel from SomeApp and force a value of money field from default to random
some = mixer.blend('someapp.somemodel', money=mixer.RANDOM)
# Generate SomeModel from SomeApp and skip the generation of money field
some = mixer.blend('someapp.somemodel', money=mixer.SKIP)
# Generate 5 SomeModel's instances and take company field's values from custom generator
some_models = mixer.cycle(5).blend('somemodel', company=(name for name in company_names))
Flask,Flask-SQLAlchemy
快速示例
from mixer.backend.flask import mixer
from models import User, UserMessage
mixer.init_app(self.app)
# Generate a random user
user = mixer.blend(User)
# Generate an userMessage
message = mixer.blend(UserMessage, user=user)
# Generate an UserMessage and an User. Set username for generated user to 'testname'.
message = mixer.blend(UserMessage, user__username='testname')
# Generate SomeModel and select FK or M2M values from db
some = mixer.blend('project.models.SomeModel', somerelation=mixer.SELECT)
# Generate SomeModel from SomeApp and force a value of money field from default to random
some = mixer.blend('project.models.SomeModel', money=mixer.RANDOM)
# Generate SomeModel from SomeApp and skip the generation of money field
some = mixer.blend('project.models.SomeModel', money=mixer.SKIP)
# Generate 5 SomeModel's instances and take company field's values from custom generator
some_models = mixer.cycle(5).blend('project.models.SomeModel', company=(company for company in companies))
支持具有 __init__ 参数的Flask-SQLAlchemy模型
为了支持此方案,只需创建自己的mixer类,如下所示
from mixer.backend.sqlalchemy import Mixer
class MyOwnMixer(Mixer):
def populate_target(self, values):
target = self.__scheme(**values)
return target
mixer = MyOwnMixer()
SQLAlchemy工作流程
初始化示例
from mixer.backend.sqlalchemy import Mixer
ENGINE = create_engine('sqlite:///:memory:')
BASE = declarative_base()
SESSION = sessionmaker(bind=ENGINE)
mixer = Mixer(session=SESSION(), commit=True)
role = mixer.blend('package.models.Role')
有关更多信息,请参阅Flask、Flask-SQLAlchemy。
Mongoengine工作流程
示例用法
from mixer.backend.mongoengine import mixer
class User(Document):
created_at = DateTimeField(default=datetime.datetime.now)
email = EmailField(required=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
username = StringField(max_length=50)
class Post(Document):
title = StringField(max_length=120, required=True)
author = ReferenceField(User)
tags = ListField(StringField(max_length=30))
post = mixer.blend(Post, author__username='foo')
棉花糖工作流程
示例用法
from mixer.backend.marshmallow import mixer
import marshmallow as ma
class User(ma.Schema):
created_at = ma.fields.DateTime(required=True)
email = ma.fields.Email(required=True)
first_name = ma.fields.String(required=True)
last_name = ma.fields.String(required=True)
username = ma.fields.String(required=True)
class Post(ma.Schema):
title = ma.fields.String(required=True)
author = ma.fields.Nested(User, required=True)
post = mixer.blend(Post, author__username='foo')
常用方法
快速示例
from mixer.main import mixer
class Test:
one = int
two = int
name = str
class Scheme:
name = str
money = int
male = bool
prop = Test
scheme = mixer.blend(Scheme, prop__one=1)
数据库提交
默认情况下,“django”、“flask”、“mongoengine”后端尝试在数据库中保存对象。为防止此行为,请手动初始化
from mixer.backend.django import Mixer
mixer = Mixer(commit=False)
或您可以使用mixer作为上下文管理器临时切换上下文
from mixer.backend.django import mixer
# Will be save to db
user1 = mixer.blend('auth.user')
# Will not be save to db
with mixer.ctx(commit=False):
user2 = mixer.blend('auth.user')
自定义字段
Mixer允许您通过手动定义字段的生成器。快速示例
from mixer.main import mixer
class Test:
id = int
name = str
mixer.register(Test,
name=lambda: 'John',
id=lambda: str(mixer.faker.small_positive_integer())
)
test = mixer.blend(Test)
test.name == 'John'
isinstance(test.id, str)
# You could pinned just a value to field
mixer.register(Test, name='Just John')
test = mixer.blend(Test)
test.name == 'Just John'
您还可以为字段类型创建自己的工厂
from mixer.backend.django import Mixer, GenFactory
def get_func(*args, **kwargs):
return "Always same"
class MyFactory(GenFactory):
generators = {
models.CharField: get_func
}
mixer = Mixer(factory=MyFactory)
中间件
您可以将中间件层添加到处理中
from mixer.backend.django import mixer
# Register middleware to model
@mixer.middleware('auth.user')
def encrypt_password(user):
user.set_password('test')
return user
您可以将多个中间件添加。每个中间件应获取一个参数(生成的值)并返回它们。
也可以注销中间件
mixer.unregister_middleware(encrypt_password)
地区
默认情况下,mixer使用“en”地区。您可以通过创建自己的mixer切换mixer默认地区
from mixer.backend.django import Mixer
mixer = Mixer(locale='it')
mixer.faker.name() ## u'Acchisio Conte'
您可以在任何时候切换mixer当前地区
mixer.faker.locale = 'cz'
mixer.faker.name() ## u'Miloslava Urbanov\xe1 CSc.'
mixer.faker.locale = 'en'
mixer.faker.name() ## u'John Black'
# Use the mixer context manager
mixer.faker.phone() ## u'1-438-238-1116'
with mixer.ctx(locale='fr'):
mixer.faker.phone() ## u'08 64 92 11 79'
mixer.faker.phone() ## u'1-438-238-1116'
错误追踪器
如果您有任何建议、错误报告或烦恼,请向https://github.com/klen/mixer/issues的问题跟踪器报告
贡献
mixer的开发在Github上:https://github.com/klen/mixer
贡献者
Antoine Bertin (https://github.com/Diaoul)
Benjamin Port (https://github.com/bport)
Dmitriy Moseev (https://github.com/DmitriyMoseev)
Eelke Hermens (https://github.com/eelkeh)
Esteban J. G. Gabancho (https://github.com/egabancho)
Felix Dreissig (https://github.com/F30)
Illia Volochii (https://github.com/illia-v)
Jannis (https://github.com/jnns)
Kirill Pavlov (https://github.com/pavlov99)
Kwok-kuen Cheung (https://github.com/cheungpat)
Mahdi Yusuf (https://github.com/myusuf3)
Marek Baczyński (https://github.com/imbaczek)
Marigold (https://github.com/Marigold)
Matt Caldwell (https://github.com/mattcaldwell)
Mikhail Porokhovnichenko (https://github.com/marazmiki)
Skylar Saveland (https://github.com/skyl)
Suriya Subramanian (https://github.com/suriya)
Gram (https://github.com/orsinium)
Joshua (https://github.com/jomasti)
Lucas Rangel Cezimbra (https://github.com/lucasrcezimbra)
avi-pomicell (https://github.com/avi-pomicell)
Jochen Brissier (https://github.com/jbrissier)
许可证
许可协议为BSD许可。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
mixer-7.2.2.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 9b3f1a261b56d8f2394f39955f83adbc7ff3ab4bb1065ebfec19a10d3e8501e0 |
|
MD5 | 0960f5164e58914667a7bde3b98aeaa3 |
|
BLAKE2b-256 | dd7b95e5ee5d6e5d9764b57bb0ec7aa823896740954c5a048568780943052770 |
mixer-7.2.2-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8089b8e2d00288c77e622936198f5dd03c8ac1603a1530a4f870dc213363b2ae |
|
MD5 | c0c7a96df50eab9b511c4406ee88c984 |
|
BLAKE2b-256 | 817360ab9b2a61a98f84f71f567a835dc877a9608fcff617e047ff96687c3796 |