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)
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()
def count_infos(model): model_cls = build_model(model) return web.ctx.orm.query(func.count(model_cls.id)).scalar()
def get_info(model, id): model_cls = build_model(model) return web.ctx.orm.query(model_cls).get(id)
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()
def count_infos(model): model_cls = build_model(model) return web.ctx.orm.query(func.count(model_cls .id)).scalar()
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