def get_fields(self, model=None, edit=False, id=None): session = Session() models = { 'pages': StaticPageModel, 'redirect': UrlMapping, 'catalog_section': CatalogSectionModel, 'catalog_element': CatalogItemModel, 'accounts': User, 'data': NonRelationData } fields = db_inspector.get_columns(models[model].__tablename__) # TODO :: refactoring types_map = { 'BOOLEAN': 'checkbox', 'TEXT': 'html', 'VARCHAR(4096)': 'text', 'VARCHAR(8192)': 'text', 'VARCHAR(1024)': 'text', 'VARCHAR(5000)': 'password', 'JSON': (lambda: 'data_fields' if model == 'data' else 'files')(), 'INTEGER': 'text' } vidgets = [] for field in fields: try: if 'id' in field['name']: continue vidget = { 'name': field['name'], 'type': types_map[str(field['type'])], 'default_val': field['default'] } vidgets.append(vidget) except KeyError: continue values = None if edit and id is not None: try: data = session.query(models[model]).filter_by(id=id).one() except Exception as e: session.close() print('adm/AdminMainHandler.get_fields(): '+\ 'cannot get fields by "%s" model and id #%s:\n' % (model, id),\ e, file=sys.stderr) raise e values = data.item if model == 'catalog_element': values.update({'section_id': data.section_id}) if model == 'catalog_element': try: sections = session.query(CatalogSectionModel).all() except Exception as e: session.close() print('adm/AdminMainHandler.get_fields(): '+\ 'cannot get catalog sections list:\n',\ e, file=sys.stderr) raise e vidgets.append({ 'name': 'section_id', 'type': 'select', 'default_val': None, 'list_values': [{ 'title': x.title, 'value': x.id } for x in sections] }) session.close() try: del values['create_date'] del values['last_change'] del values['_sa_instance_state'] del values['password'] except Exception: pass return self.json_response({ 'status': 'success', 'fields_list': vidgets, 'values_list': values })
def get_fields(self, model=None, edit=False, id=None): session = Session() models = { 'pages': StaticPageModel, 'redirect': UrlMapping, 'catalog_section': CatalogSectionModel, 'catalog_element': CatalogItemModel, 'accounts': User, 'data': NonRelationData } fields = db_inspector.get_columns( models[model].__tablename__ ) # TODO :: refactoring types_map = { 'BOOLEAN': 'checkbox', 'TEXT': 'html', 'VARCHAR(4096)': 'text', 'VARCHAR(8192)': 'text', 'VARCHAR(1024)': 'text', 'VARCHAR(5000)': 'password', 'JSON': ( lambda: 'data_fields' if model == 'data' else 'files' )(), 'INTEGER': 'text' } vidgets = [] for field in fields: try: if 'id' in field['name']: continue vidget = { 'name': field['name'], 'type': types_map[str(field['type'])], 'default_val': field['default'] } vidgets.append(vidget) except KeyError: continue values = None if edit and id is not None: try: data = session.query( models[model]).filter_by(id=id).one() except Exception as e: session.close() print('adm/AdminMainHandler.get_fields(): '+\ 'cannot get fields by "%s" model and id #%s:\n' % (model, id),\ e, file=sys.stderr) raise e values = data.item if model == 'catalog_element': values.update({'section_id': data.section_id}) if model == 'catalog_element': try: sections = session.query(CatalogSectionModel).all() except Exception as e: session.close() print('adm/AdminMainHandler.get_fields(): '+\ 'cannot get catalog sections list:\n',\ e, file=sys.stderr) raise e vidgets.append({ 'name': 'section_id', 'type': 'select', 'default_val': None, 'list_values': [{ 'title': x.title, 'value': x.id} for x in sections] }) session.close() try: del values['create_date'] del values['last_change'] del values['_sa_instance_state'] del values['password'] except Exception: pass return self.json_response({ 'status': 'success', 'fields_list': vidgets, 'values_list': values })
def update_page(self, **kwargs): section = kwargs['section'] del kwargs['section'] id = kwargs['id'] del kwargs['id'] section_map = { 'pages': StaticPageModel, 'redirect': UrlMapping, 'catalog_section': CatalogSectionModel, 'catalog_element': CatalogItemModel, 'data': NonRelationData } fields = db_inspector.get_columns(section_map[section].__tablename__) for item in (x for x in fields if x['name'].startswith('is_') or x['name'].startswith( 'has_') or x['name'].startswith('inherit_seo_')): if item['name'] not in kwargs.keys(): kwargs.update({item['name']: False}) else: kwargs[item['name']] = True session = Session() try: data = session.query(section_map[section]).filter_by(id=id) except Exception as e: session.close() print('adm/AdminMainHandler.update_page(): '+\ 'cannot update page by "%s" section:\n' % str(section),\ e, file=sys.stderr) raise e if section == 'redirect': permanent = (lambda: True if kwargs['status'] == '301' else False)() from app.app import application counter = 0 hndlr = application.handlers[0][1] for item in range(len(hndlr)): try: if (hndlr[item].__dict__['kwargs']['url'] == data.one().new_url): hndlr[item] = URLSpec(kwargs['old_url'] + '$', RedirectHandler, kwargs={ 'url': kwargs['new_url'], 'permanent': permanent }, name=None) except KeyError: continue data.update(kwargs) try: session.commit() except Exception as e: session.close() print('adm/AdminMainHandler.update_page(): '+\ 'cannot commit update page by "%s" section:\n' % str(section),\ e, file=sys.stderr) raise e session.close() return self.json_response({'status': 'success'})
def update_page(self, **kwargs): section = kwargs['section'] del kwargs['section'] id = kwargs['id'] del kwargs['id'] section_map = { 'pages': StaticPageModel, 'redirect': UrlMapping, 'catalog_section': CatalogSectionModel, 'catalog_element': CatalogItemModel, 'data': NonRelationData } fields = db_inspector.get_columns( section_map[section].__tablename__ ) for item in (x for x in fields if x['name'].startswith('is_') or x['name'].startswith('has_') or x['name'].startswith('inherit_seo_')): if item['name'] not in kwargs.keys(): kwargs.update({ item['name']: False }) else: kwargs[item['name']] = True session = Session() try: data = session.query( section_map[section] ).filter_by(id=id) except Exception as e: session.close() print('adm/AdminMainHandler.update_page(): '+\ 'cannot update page by "%s" section:\n' % str(section),\ e, file=sys.stderr) raise e if section == 'redirect': permanent = ( lambda: True if kwargs['status'] == '301' else False )() from app.app import application counter = 0 hndlr = application.handlers[0][1] for item in range(len(hndlr)): try: if(hndlr[item].__dict__['kwargs']['url'] == data.one().new_url): hndlr[item] = URLSpec( kwargs['old_url'] + '$', RedirectHandler, kwargs={ 'url': kwargs['new_url'], 'permanent': permanent }, name=None) except KeyError: continue data.update(kwargs) try: session.commit() except Exception as e: session.close() print('adm/AdminMainHandler.update_page(): '+\ 'cannot commit update page by "%s" section:\n' % str(section),\ e, file=sys.stderr) raise e session.close() return self.json_response({'status': 'success'})