Warning
This module is depricated. Use https://github.com/klen/mixer instead.
Flask-Mixer is simply application for generate instances of SQLAlchemy models. It's useful for testing. Fast and convenient test-data generation.
Flask-Mixer is in early development.
- python >= 2.6
- Flask >= 0.8
- Flask-SQLAlchemy>=0.16
Flask-Mixer should be installed using pip:
pip install Flask-Mixer
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 # Generate model with some values user2 = mixer.blend(User, username='test') assert user2.username == 'test' # Model would be defined as string role1 = mixer.blend('app.models.Role') assert role1.user assert role1.user_id == role1.user.id # Generate model with reference role1 = mixer.blend(Role, user__username='test2') assert role2.user.username == 'test2' # 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 # Value can be callable user = mixer.blend(User, username=lambda:'callable_value') assert user.username == 'callable_value'
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/Flask-Mixer/issues
Development of flask-mixer happens at github: https://github.com/klen/Flask-Mixer
- klen (Kirill Klenov)
Licensed under a BSD license.