예제 #1
0
def import_data(settings):
    mixer = Mixer()

    with yaml_loader(settings) as loader:

        def blend_data(klass, attributes):
            with tokenize(attributes) as (tokens, attrs):
                fixture = mixer.blend(klass, **attrs)
                fixture.save()

                with set_password(fixture, attrs) as fixture:
                    if fixture.is_dirty:
                        fixture.save()

                    for k, f in tokens.items():
                        setattr(fixture, k, f(fixture))
                        fixture.save()

        # tests/data/*.yml
        fixtures = [
            Plan,
            Classification,
            License,
            Project,
            Publication,
            Chapter,
            Article,
            Application,
            Page,
            Site,
            User,
            UserEmail,
            Membership,
            Contribution,
        ]

        for model in fixtures:
            # pylint: disable=no-member,protected-access
            table = model._meta.table_name
            fixtures_dir = os.path.join(os.path.dirname(__file__), 'data')
            files = [
                f for f in os.listdir(fixtures_dir)
                if f.startswith(table) and f.endswith('.yml')
            ]

            # e.g. classification.yml, classification.1.yml...
            for f in sorted(files,
                            key=(lambda v: int(
                                re.sub(r'[a-z\_]', '', v).replace('.', '0')))):
                fixture_yml = os.path.join(fixtures_dir, f)
                if os.path.isfile(fixture_yml):
                    data = loader(fixture_yml)
                    for attributes in data[table]:
                        blend_data(model, attributes)
예제 #2
0
파일: manage.py 프로젝트: klen/muffin-admin
async def devdata():
    """Generate some fake data."""
    mixer = Mixer(commit=True)

    async with DB.connection():

        await User.get_or_create(
            email='*****@*****.**',
            defaults=dict(password='******',
                          role='admin',
                          first_name='Admin',
                          last_name='General',
                          picture="https://picsum.photos/id/10/100"))

        await User.get_or_create(
            email='*****@*****.**',
            defaults=dict(password='******',
                          role='manager',
                          first_name='Manager',
                          last_name='Throw',
                          picture="https://picsum.photos/id/20/100"))

        # Generate 100 users
        num_users = await User.select().count()
        for n in range(100 - num_users):
            await User.create(
                email=mixer.faker.email(),
                role='user',
                picture=f"https://picsum.photos/id/2{n}/100",
                first_name=mixer.faker.first_name(),
                last_name=mixer.faker.last_name(),
            )

        # Generate 100 messages
        statuses = [choice[0] for choice in Message.status.choices]
        for n in range(100):
            await Message.create(
                body=mixer.faker.text(),
                title=mixer.faker.title(),
                user=mixer.faker.random.randint(1, 100),
                status=mixer.faker.random.choice(statuses),
            )
예제 #3
0
def mixer(app):
    if 'peewee' in app.plugins:
        from mixer.backend.peewee import Mixer
        return Mixer(commit=True)
예제 #4
0
def devdata():
    mixer = Mixer(commit=True)
    statuses = [choice[0] for choice in Message.status.choices]
    mixer.cycle(20).blend(Message, status=mixer.RANDOM(*statuses))
예제 #5
0
파일: tests.py 프로젝트: lowks/muffin-admin
def test_peewee(app, client):
    import peewee as pw
    from muffin_peewee.fields import JSONField

    @app.ps.peewee.register
    class Model(app.ps.peewee.TModel):

        active = pw.BooleanField()
        number = pw.IntegerField()
        content = pw.CharField()
        config = JSONField(default={})

    @app.ps.peewee.register
    class Model2(app.ps.peewee.TModel):
        pass

    Model.create_table()
    Model2.create_table()

    from muffin_admin.peewee import PWAdminHandler

    @app.register
    class ModelHandler(PWAdminHandler):
        model = Model
        columns_exclude = 'created',
        columns_filters = 'content', 'number'

    @ModelHandler.action
    def test(handler, request):
        return 'PASSED'

    assert ModelHandler.columns
    assert ModelHandler.columns == [
        'id', 'active', 'number', 'content', 'config'
    ]
    assert ModelHandler.name == 'model'
    assert ModelHandler.form
    assert ModelHandler.form.config
    assert ModelHandler.can_create
    assert ModelHandler.can_edit
    assert ModelHandler.can_delete
    assert ModelHandler.columns_formatters is not PWAdminHandler.columns_formatters

    # Make admin handler dynamically
    app.ps.admin.register(Model2, can_delete=False)
    handler = app.ps.admin.handlers['model2']
    assert handler.model == Model2
    assert handler.can_delete is False

    from mixer.backend.peewee import Mixer
    mixer = Mixer(commit=True)
    models = mixer.cycle(3).blend(Model)

    response = client.get('/admin/model?auth=1')
    assert models[0].content in response.text
    assert models[1].content in response.text
    assert models[2].content in response.text

    response = client.get('/admin/model?pk=1&auth=1')
    assert 'created' in response.text

    response = client.post('/admin/model?pk=1&auth=1',
                           {'content': 'new content'})
    assert response.status_code == 302

    response = client.delete('/admin/model?pk=1&auth=1')
    assert not Model.select().where(Model.id == 1).exists()

    response = client.get('/admin/model2?auth=1')
    assert response.status_code == 200

    response = client.get('/admin/model?auth=1&af-content=%s' %
                          models[1].content)
    assert models[1].content in response.text
    assert not models[2].content in response.text

    response = client.get('/admin/model?auth=1&af-number=%s' %
                          models[1].number)
    assert models[1].content in response.text
    assert not models[2].content in response.text

    response = client.get('/admin/model?auth=1&af-number=invalid')
    assert response.status_code == 200
예제 #6
0
def mixer(app):
    from mixer.backend.peewee import Mixer
    return Mixer(commit=True)