Example #1
0
 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)
Example #2
0
 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)
Example #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()
Example #4
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()