mixer 2.0.1
pip install mixer==2.0.1
Released:
Mixer -- Is a fixtures replacement. Supported Django ORM, SqlAlchemy ORM, Mongoengine ODM and custom python objects.
Navigation
Unverified details
These details have not been verified by PyPIProject links
Meta
- License: BSD License (BSD)
- Author: Kirill Klenov
- Tags django, flask, sqlalchemy, testing, mock, stub, mongoengine, data
Classifiers
- Development Status
- Intended Audience
- License
- Natural Language
- Operating System
- Programming Language
- Topic
Project description
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:
Flask-SqlAlchemy;
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
Requirements
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;
Installation
Mixer should be installed using pip:
pip install mixer
Usage
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)
Django
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))
Flask, Flask-SQLAlchemy
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))
SQLAlchemy
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.
Mongoengine
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')
Common usage
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)
DB commits
By default ‘django’, ‘flask’, ‘mongoengine’ backends tries to save objects to database. For prevent this behaviour init mixer manually:
from mixer.backend.django import Mixer mixer = Mixer(commit=False)
Or you can use mixer with custom params as context:
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')
Custom fields
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'
Also you can make your ow factory for field types:
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)
Bug tracker
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/mixer/issues
Contributing
Development of starter happens at github: https://github.com/klen/mixer
Contributors
License
Licensed under a BSD license.
Project details
Unverified details
These details have not been verified by PyPIProject links
Meta
- License: BSD License (BSD)
- Author: Kirill Klenov
- Tags django, flask, sqlalchemy, testing, mock, stub, mongoengine, data
Classifiers
- Development Status
- Intended Audience
- License
- Natural Language
- Operating System
- Programming Language
- Topic
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file mixer-2.0.1.tar.gz
.
File metadata
- Download URL: mixer-2.0.1.tar.gz
- Upload date:
- Size: 32.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a47d1a543aa587d7a2126341ce1255cf64e39b64f4c2854b790ac7183c30c981 |
|
MD5 | 6b2670689da8b891651c848f30f71253 |
|
BLAKE2b-256 | bed1a2e7377d6f207ad52019b585cd701e7cd85b7d5f7f04a365530b63804634 |