示例#1
0
def test_create_creator_with_roles(use_test_db, test_creator_dict):
    test_work_id = testing_utils.create_fake_work()['id']
    test_creator_dict['roles'] = {'illustrator': [test_work_id]}
    new_test_creator = logic.create_creator(test_creator_dict)
    with session_scope() as session:
        created_role_id = session.query(Role)\
            .filter_by(work_id=test_work_id, creator_id=new_test_creator['id'])\
            .first().id
    assert new_test_creator['roles'] == [created_role_id]
示例#2
0
文件: app.py 项目: kennydo/medea
def creators_with_id(creator_id):
    if request.method == 'GET':
        creator = None
        with session_scope() as session:
            creator = session.query(models.Creator).filter_by(id=creator_id).scalar()
            if creator:
                return {'creator': creator.to_dict()}

    elif request.method == 'PUT':
        model_data = api_to_model_dict(request.get_json())
        response = logic.update_creator(creator_id, model_data)
        return {'creator': response}

    elif request.method == 'DELETE':
        with session_scope() as session:
            creator = session.query(models.Creator).filter_by(id=creator_id).scalar()
            if creator:
                session.delete(creator)
                return {}

    return {}, 404
示例#3
0
文件: app.py 项目: kennydo/medea
def work(work_id):
    if request.method == 'GET':
        work = None
        with session_scope() as session:
            work = session.query(models.Work).filter_by(id=work_id).scalar()
            if work:
                return {'work': work.to_dict()}

    elif request.method == 'PUT':
        model_data = api_to_model_dict(request.get_json())
        response = logic.update_work(work_id, model_data)
        return {'work': response}

    elif request.method == 'DELETE':
        with session_scope() as session:
            work = session.query(models.Work).filter_by(id=work_id).scalar()
            if work:
                session.delete(work)
                return {}

    return {}, 404
示例#4
0
def test_poop(use_test_db):
    with session_scope() as poop_session:
        poop_work = models.Work(title='poop')
        poop_creator_1 = models.Creator(name='creapoop1')
        poop_work_creator_ass = models.Role(
             poop_work,
             poop_creator_1,
             'rectum',
        )
        poop_work.creators = [poop_work_creator_ass]
        poop_creator_2 = models.Creator(name='creapoop2')
        poop_creator_1.related_creators = [poop_creator_2]
        poop_session.add(poop_creator_1)
        poop_session.add(poop_work)
示例#5
0
文件: logic.py 项目: kennydo/medea
def create_work(work_dict):
    work_dict = dict(work_dict)
    work_dict.pop('id', None)
    with session_scope() as session:
        roles = work_dict.pop('roles', None)
        tags = work_dict.pop('tags', None)
        new_work = Work(**work_dict)
        session.add(new_work)
        if roles:
            _update_roles_for_work(session, roles, new_work)
        if tags:
            #TODO: Add tags
            pass
        session.commit()
        return new_work.to_dict()
示例#6
0
文件: logic.py 项目: kennydo/medea
def update_work(work_id, work_dict):
    work_dict = dict(work_dict)
    work_dict.pop('id', None)
    with session_scope() as session:
        work = session.query(Work).filter_by(id=work_id).first()
        if not work:
            return
        roles = work_dict.pop('roles', None)
        tags = work_dict.pop('tags', None)
        if roles:
            _update_roles_for_work(session, roles, work)
        if tags:
            #TODO: Add tags
            pass
        for field, value in work_dict.items():
            setattr(work, field, value)
        session.commit()
        return work.to_dict()
示例#7
0
def test_update_creator_with_roles(use_test_db, test_creator_dict):
    test_creator_id = testing_utils.create_fake_creator()['id']
    test_work_id = testing_utils.create_fake_work()['id']
    test_creator_dict['roles'] = {'illustrator': [test_work_id], 'author': [test_work_id]}
    test_creator_dict['related_creators'] = [test_creator_id]
    new_test_creator = logic.create_creator(test_creator_dict)

    test_creator_dict['aliases'].pop()
    test_creator_dict['roles'].pop('illustrator')
    updated_test_creator = logic.update_creator(new_test_creator['id'], test_creator_dict)
    with session_scope() as session:
        created_role = session.query(Role)\
            .filter_by(work_id=test_work_id, creator_id=new_test_creator['id'])\
            .first().to_dict()
        test_work = session.query(Work).filter_by(id=test_work_id).first().to_dict()
    assert test_work['roles'] == updated_test_creator['roles']
    assert test_creator_dict['aliases'] == updated_test_creator['aliases']
    assert 'author' == created_role['role']
示例#8
0
def create_fake_creator(
    name=None,
    is_group=False,
    alias_names=None
):
    creator_dict = {
        'name': name or random_word_generator(2),
        'is_group': is_group
    }
    alias_names = alias_names or []
    with session_scope() as session:
        new_fake_creator = Creator(**creator_dict)
        for alias_name in alias_names:
            new_alias = CreatorAlias(name=alias_name, creator=new_fake_creator)
        session.add(new_fake_creator)
        session.commit()
        creator_dict = api_to_model_dict({'creator': new_fake_creator.to_dict()})
        return creator_dict
示例#9
0
文件: logic.py 项目: kennydo/medea
def create_creator(creator_dict):
    creator_dict = dict(creator_dict)
    creator_dict.pop('id', None)
    with session_scope() as session:
        roles = creator_dict.pop('roles', None)
        related_creators = creator_dict.pop('related_creators', [])
        aliases = creator_dict.pop('aliases', [])
        new_creator = Creator(**creator_dict)
        session.add(new_creator)
        if roles:
            _update_roles_for_creator(session, roles, new_creator)
        if related_creators:
            related_creator_rows = session.query(Creator)\
                .filter(Creator.id.in_(related_creators))\
                .all()
            new_creator.related_creators = related_creator_rows
        if aliases:
            _update_creator_aliases(session, aliases, new_creator)
        session.commit()
        return new_creator.to_dict()
示例#10
0
def create_fake_work(
    type=None,
    title=None,
    catalog_number=None,
    release_date=None,
    description=None,
    is_active=True,
):
    work_dict = {
        'type': type or random_word_generator(), # Change this if types become enums
        'title': title or random_word_generator(2),
        'catalog_number': catalog_number or 'CAT-{0}'.format(random.randint(10000,99999)),
        'release_date': release_date or datetime.datetime.today(),
        'description': description or random_word_generator(15),
        'is_active': is_active
    }
    with session_scope() as session:
        new_fake_work = Work(**work_dict)
        session.add(new_fake_work)
        session.commit()
        work_dict = api_to_model_dict({'work': new_fake_work.to_dict()})
        return work_dict
示例#11
0
文件: logic.py 项目: kennydo/medea
def update_creator(creator_id, creator_dict):
    creator_dict = dict(creator_dict)
    creator_dict.pop('id', None)
    with session_scope() as session:
        creator = session.query(Creator).filter_by(id=creator_id).first()
        if not creator:
            return
        roles = creator_dict.pop('roles', None)
        related_creators = creator_dict.pop('related_creators', [])
        aliases = creator_dict.pop('aliases', [])
        if roles:
            _update_roles_for_creator(session, roles, creator)
        if related_creators:
            related_creator_rows = session.query(Creator)\
                .filter(Creator.id.in_(related_creators))\
                .all()
            creator.related_creators = related_creator_rows
        if aliases:
            _update_creator_aliases(session, aliases, creator)
        for field, value in creator_dict.items():
            setattr(creator, field, value)
        session.commit()
        return creator.to_dict()