def update_associations(self): """ Parse content and fill relationships: files, images, links. """ soup = self.soup soup = associate_images(soup, self) soup = associate_files(soup, self) soup = associate_pages(soup, self) soup = remove_target_attributes(soup) self.content = unicode(soup)
def update(self): response = copy.deepcopy(self._response) response.pop('dataset') response.pop('dataset_len') response.pop('metaData') response.pop('message') response['errors'] = {} try: setting = json.loads(self.request.params['dataset']) except KeyError as e: log.exception('Unable to load JSON request.') setting = dict(name=self.request.params.get('name'), value=self.request.params.get('value')) except (TypeError, ValueError) as e: self.session.rollback() log.exception('Bad request.') response['success'] = False response['errors']['exception'] = e self.request.response.status = 400 try: value = setting['value'] setting = Setting.get(self.session, setting['name']) if setting.type.raw_type == 'bool' and value == 'on': value = 'True' elif setting.type.raw_type == 'bool': value = 'False' elif setting.type.raw_type == 'html': # add smartquotes to prevent bsoup from translating smart-quotes # and other windows-specific characters soup = BeautifulSoup(value, smartQuotesTo=None) soup = remove_target_attributes(soup) value = unicode(soup) setting.value = value self.session.flush() self.proxy.invalidate(pages=True) except (NoResultFound, TypeError) as e: log.exception('No setting found.') self.session.rollback() response['success'] = False response['errors']['exception'] = str(e) self.request.response.status = 400 except Exception as e: log.exception('Cannot update the setting') self.session.rollback() response['success'] = False response['errors']['exception'] = str(e) self.request.response.status = 500 else: response['success'] = True self.request.response.status = 200 self.session.commit() return response