Quickstart

Flask-Mixer is easy to use and realy fun for testing applications. For the complete guide, checkout out the API documentation on the Mixer class.

Base example

from flask import Flask
from flask.ext.mixer import Mixer
from flask.ext.sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db = SQLAlchemy()
db.init_app(app)

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    score = db.Column(db.Integer, default=50, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
    username = db.Column(db.String(20), nullable=False)


class Role(db.Model):
    __tablename__ = 'role'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey(User.id), nullable=False)

    user = db.relation(User)

class Profile(db.Model):
    __tablename__ = 'profile'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    user = db.relationship("User", uselist=False, backref="profile")


mixer = Mixer(app, session_commit=True)

with app.test_request_context():
    db.create_all()

    # Simple model generation
    user1 = mixer.blend(User)
    assert user1.id and user1.username and user1.created_at
    assert user1.score == 50
    assert user.profile.user == user

    # Model would be defined as string
    role1 = mixer.blend('app.models.Role')
    assert role1.user
    assert role1.user_id == role1.user.id

Blend models with values

# Generate model with some values
user2 = mixer.blend(User, username='test')
assert user2.username == 'test'

# Generate model with reference
role1 = mixer.blend(Role, user__username='test2')
assert role2.user.username == 'test2'

# Value can be callable
user = mixer.blend(User, username=lambda:'callable_value')
assert user.username == 'callable_value'

Set values from db

# Set related values from db by random
profiles = Profile.query.all()
user = mixer.blend(User, profile=mixer.random)
assert user.profile in profiles

# By default, column with defvalue will be to init as them
# but you can still force set it to random value
user = mixer.blend(User, score=mixer.random)
assert user.score != 50

Table Of Contents

Related Topics

This Page