def GET(self, id): form = category_form() category = get_category(id) categories = category_tree() templates = get_templates() form.fill(category) req = web.ctx.req req.update({ 'form': form, 'categories': categories, 'templates': templates, }) return admin_render.category_edit(**req)
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 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()