Skip to content
/ mixer Public
forked from klen/mixer

Mixer -- Is a fixtures replacement. Supported Django, Flask, SqlAlchemy and custom python objects.

License

Notifications You must be signed in to change notification settings

erm0l0v/mixer

 
 

Repository files navigation

logo Mixer

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:

Build Status Coverals Version Downloads Donate

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

  • 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 values
initialize the Mixer by manual like: Mixer(fake=False)
By default Mixer saves generated objects in database. If you want disable
this, 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.

About

Mixer -- Is a fixtures replacement. Supported Django, Flask, SqlAlchemy and custom python objects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published