Beispiel #1
0
def get_infos(model, cid=None, limit=None):
    model_cls = build_model(model)
    if cid is None:
        return web.ctx.orm.query(model_cls).order_by(model_cls.id.desc()).all()
    else:
        if limit is None:
            return web.ctx.orm.query(model_cls).filter(model_cls.categories.any(id=cid)) \
                    .order_by(model_cls.id.desc()).all()
        else:
            return web.ctx.orm.query(model_cls).filter(model_cls.categories.any(id=cid)) \
                    .order_by(model_cls.id.desc()).limit(limit)
Beispiel #2
0
def get_infos(model, cid=None, limit=None):
    model_cls = build_model(model)
    if cid is None:
        return web.ctx.orm.query(model_cls).order_by(model_cls.id.desc()).all()
    else:
        if limit is None:
            return web.ctx.orm.query(model_cls).filter(model_cls.categories.any(id=cid)) \
                    .order_by(model_cls.id.desc()).all()
        else:
            return web.ctx.orm.query(model_cls).filter(model_cls.categories.any(id=cid)) \
                    .order_by(model_cls.id.desc()).limit(limit)
Beispiel #3
0
def save_info(model, id, base_data, data, sforms_data):
    model_cls = build_model(model)
    submodels = model.children
    submodel_cls_d = {}
    if submodels:
        for submodel in submodels:
            submodel_cls = build_model(submodel)
            submodel_cls_d[submodel.name] = submodel_cls

    subinfo_d = {}
    if id == -1:
        entity = Entity()
        info = model_cls()
        if submodel_cls_d:
            for smodel_name, submodel_cls in submodel_cls_d.items():
                if smodel_name in sforms_data:
                    subinfo_d[smodel_name] = [
                        submodel_cls()
                        for i in range(len(sforms_data[smodel_name]))
                    ]

    else:
        entity = get_entity(id)
        info = getattr(entity, model.name)
        if submodel_cls_d:
            for smodel_name, submodel_cls in submodel_cls_d.items():
                persist_infos = getattr(info, smodel_name + 's')
                if smodel_name in sforms_data:
                    subinfo_d[smodel_name] = persist_infos
                    for i in range(
                            len(sforms_data[smodel_name]) -
                            len(persist_infos)):
                        subinfo_d[smodel_name].append(submodel_cls())

    populate(entity, base_data, Entity)
    populate(info, data, model_cls)
    if subinfo_d:
        for smodel_name, subinfos in subinfo_d.items():
            for i, subinfo in enumerate(subinfos):
                sform_data = sforms_data[smodel_name][
                    i] if smodel_name in sforms_data else None
                if sform_data:
                    populate(subinfo, sform_data, submodel_cls_d[smodel_name],
                             '%s-%s' % (smodel_name, str(i)))
                    if subinfo.id is not None:
                        subinfo.will_delete = sform_data.will_delete

    for i in range(len(entity.categories) - 1, -1, -1):
        del entity.categories[i]
    for cid in base_data.cids:
        if cid:
            entity.categories.append(get_category(int(cid)))

    if id == -1:
        entity.model = model
        info.entity = entity
        if subinfo_d:
            for smodel_name, subinfos in subinfo_d.items():
                for subinfo in subinfos:
                    getattr(info, smodel_name + 's').append(subinfo)
                    web.ctx.orm.add(subinfo)

        web.ctx.orm.add(entity)
        web.ctx.orm.add(info)
    else:
        if subinfo_d:
            for smodel_name, subinfos in subinfo_d.items():
                for subinfo in subinfos:
                    if subinfo.id is None:
                        getattr(info, smodel_name + 's').append(subinfo)
                        web.ctx.orm.add(subinfo)
                    elif subinfo.will_delete:
                        persist_infos = getattr(info, smodel_name + 's')
                        persist_infos.remove(subinfo)
                        web.ctx.orm.delete(subinfo)

        web.ctx.orm.flush()
    web.ctx.orm.commit()
Beispiel #4
0
def count_infos(model):
    model_cls = build_model(model)
    return web.ctx.orm.query(func.count(model_cls.id)).scalar()
Beispiel #5
0
def get_info(model, id):
    model_cls = build_model(model)
    return web.ctx.orm.query(model_cls).get(id)
Beispiel #6
0
def save_info(model, id, base_data, data, sforms_data):
    model_cls = build_model(model)
    submodels = model.children
    submodel_cls_d = {}
    if submodels:
        for submodel in submodels:
            submodel_cls = build_model(submodel)
            submodel_cls_d[submodel.name] = submodel_cls

    subinfo_d = {}
    if id == -1:
        entity = Entity()
        info = model_cls()
        if submodel_cls_d:
            for smodel_name, submodel_cls in submodel_cls_d.items():
                if smodel_name in sforms_data:
                    subinfo_d[smodel_name] = [submodel_cls() for i in range(len(sforms_data[smodel_name]))]

    else:
        entity = get_entity(id)
        info = getattr(entity, model.name)
        if submodel_cls_d:
            for smodel_name, submodel_cls in submodel_cls_d.items():
                persist_infos = getattr(info, smodel_name+'s')
                if smodel_name in sforms_data:
                    subinfo_d[smodel_name] = persist_infos
                    for i in range(len(sforms_data[smodel_name])-len(persist_infos)):
                        subinfo_d[smodel_name].append(submodel_cls())

    populate(entity, base_data, Entity)
    populate(info, data, model_cls)
    if subinfo_d:
        for smodel_name, subinfos in subinfo_d.items():
            for i, subinfo in enumerate(subinfos):
                sform_data = sforms_data[smodel_name][i] if smodel_name in sforms_data else None
                if sform_data:
                    populate(subinfo, sform_data, submodel_cls_d[smodel_name], '%s-%s' % (smodel_name, str(i)))
                    if subinfo.id is not None:
                        subinfo.will_delete = sform_data.will_delete

    for i in range(len(entity.categories)-1,-1,-1):
        del entity.categories[i]
    for cid in base_data.cids:
        if cid:
            entity.categories.append(get_category(int(cid)))

    if id == -1:
        entity.model = model
        info.entity = entity
        if subinfo_d:
            for smodel_name, subinfos in subinfo_d.items():
                for subinfo in subinfos:
                    getattr(info, smodel_name+'s').append(subinfo)
                    web.ctx.orm.add(subinfo)

        web.ctx.orm.add(entity)
        web.ctx.orm.add(info)
    else:
        if subinfo_d:
            for smodel_name, subinfos in subinfo_d.items():
                for subinfo in subinfos:
                    if subinfo.id is None:
                        getattr(info, smodel_name+'s').append(subinfo)
                        web.ctx.orm.add(subinfo)
                    elif subinfo.will_delete:
                        persist_infos = getattr(info, smodel_name+'s')
                        persist_infos.remove(subinfo)
                        web.ctx.orm.delete(subinfo)

        web.ctx.orm.flush()
    web.ctx.orm.commit()
Beispiel #7
0
def count_infos(model):
    model_cls = build_model(model)
    return web.ctx.orm.query(func.count(model_cls .id)).scalar()
Beispiel #8
0
def get_info(model, id):
    model_cls = build_model(model)
    return web.ctx.orm.query(model_cls).get(id)
Beispiel #9
0
setup_environ()

from pycms.db.util import Base, engine, DBSession
from pycms.account.model import *
from pycms.category.model import *
from pycms.template.model import *
from pycms.model.model import *
from pycms.model.util import build_model
from pycms.utils.paging import Pagination


session = DBSession()

models = session.query(Model).filter_by(is_active=True).all()
for model in models:
    build_model(model, True)

def get_entities(cid=None, limit=None):
    if cid is None:
        return session.query(Entity).order_by(Entity.id.desc()).all()
    else:
        if limit is None:
            return session.query(Entity).filter(Entity.categories.any(id=cid)) \
                    .order_by(Entity.id.desc()).all()
        else:
            return session.query(Entity).filter(Entity.categories.any(id=cid)) \
                    .order_by(Entity.id.desc()).limit(limit).all()

def info_record_query(cid):
    search_query = session.query(Entity).filter(Entity.categories.any(id=cid)).order_by(Entity.id.desc())
    return search_query