Mixer is application to generate instances of Django or SQLAlchemy models. It's useful for testing and fixtures replacement. Fast and convenient test-data generation.
Mixer supports:
- Django;
- SQLAlchemy;
- Flask-SqlAlchemy;
- Mongoengine;
- Custom schemes;
Docs are available at https://mixer.readthedocs.org/. Pull requests with documentation enhancements and/or fixes are awesome and most welcome.
Описание на русском языке: http://klen.github.io/mixer-ru.html
Contents
- python (2.6, 2.7, 3.2, 3.3)
- Django (1.4, 1.5) for django ORM suport;
- SQLAlchemy for SQLAlchemy ORM suport;
- Mongoengine for Mongoengine ODM support;
- Flask-SQLALchemy for SQLAlchemy ORM suport and integration as Flask application;
Mixer should be installed using pip:
pip install mixer
By default Mixer try to generate fake data. If you want randomize valuesinitialize the Mixer by manual like: Mixer(fake=False)By default Mixer saves generated objects in database. If you want disablethis, initialize the Mixer by manual like: Mixer(commit=False)
Quick example:
from mixer.backend.django import mixer from customapp.models import User, UserMessage # Generate random User user = mixer.blend(User) # Generate UserMessage message = mixer.blend(UserMessage, user=user) # Generate UserMessage and User. Set User.username 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 field with default to random some = mixer.blend('someapp.somemodel', money=mixer.random) # Generate 5 SomeModel instances and get a field values from custom generator some_models = mixer.cycle(5).blend('somemodel', company=(company for company in companies))
Quick example:
from mixer.backend.flask import mixer from models import User, UserMessage mixer.init_app(self.app) # Generate random User user = mixer.blend(User) # Generate UserMessage message = mixer.blend(UserMessage, user=user) # Generate UserMessage and User. Set User.username 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 field with default to random some = mixer.blend('project.models.SomeModel', money=mixer.random) # Generate 5 SomeModel instances and get a field values from custom generator some_models = mixer.cycle(5).blend('project.models.SomeModel', company=(company for company in companies))
Example of initialization:
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')
Also see Flask, Flask-SQLALchemy.
Example usage:
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) 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')
Quick example:
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)
Mixer allows you to define generators for fields by manualy.
Quick example:
from mixer.main import mixer class Test: id = int name = str mixer.register(Test, { 'name': lambda: 'John', 'id': lambda: str(mixer.g.get_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'
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/mixer/issues
Development of starter happens at github: https://github.com/klen/mixer
Licensed under a BSD license.