def localized_tags_persist(self, extra_tag, pkg_dict, lang): if extra_tag: for tag in extra_tag: localized_tag = TagMultilang.by_name(tag.get('key'), lang) if localized_tag and localized_tag.text != tag.get('value'): localized_tag.text = tag.get('value') localized_tag.save() elif localized_tag is None: # Find the tag id from the existing tags in dict tag_id = None for dict_tag in pkg_dict.get('tags'): if dict_tag.get('name') == tag.get('key'): tag_id = dict_tag.get('id') if tag_id: TagMultilang.persist( { 'id': tag_id, 'name': tag.get('key'), 'text': tag.get('value') }, lang)
def after_import_stage(self, package_dict): log.info( '::::::::: Performing after_import_stage persist operation for localised dataset content :::::::::' ) if bool(self._package_dict): session = Session package_id = package_dict.get('id') # Persisting localized packages try: # rows = session.query(PackageMultilang).filter(PackageMultilang.package_id == package_id).all() rows = PackageMultilang.get_for_package(package_id) if not rows: log.info( '::::::::: Adding new localised object to the package_multilang table :::::::::' ) log.debug('::::: Persisting default metadata locale :::::') loc_titles = self._package_dict.get('localised_titles') if loc_titles: log.debug('::::: Persisting title locales :::::') for title in loc_titles: PackageMultilang.persist( { 'id': package_id, 'text': title.get('text'), 'field': 'title' }, title.get('locale')) loc_abstracts = self._package_dict.get( 'localised_abstracts') if loc_abstracts: log.debug('::::: Persisting abstract locales :::::') for abstract in loc_abstracts: PackageMultilang.persist( { 'id': package_id, 'text': abstract.get('text'), 'field': 'notes' }, abstract.get('locale')) log.info( '::::::::: OBJECT PERSISTED SUCCESSFULLY :::::::::') else: log.info( '::::::::: Updating localised object in the package_multilang table :::::::::' ) for row in rows: if row.field == 'title': titles = self._package_dict.get('localised_titles') if titles: for title in titles: if title.get('locale') == row.lang: row.text = title.get('text') elif row.field == 'notes': abstracts = self._package_dict.get( 'localised_abstracts') if abstracts: for abstract in abstracts: if abstract.get('locale') == row.lang: row.text = abstract.get('text') row.save() log.info('::::::::: OBJECT UPDATED SUCCESSFULLY :::::::::') pass except Exception, e: # on rollback, the same closure of state # as that of commit proceeds. session.rollback() log.error('Exception occurred while persisting DB objects: %s', e) raise # Persisting localized Tags loc_tags = self._package_dict.get('localized_tags') if loc_tags: log.debug('::::: Persisting tag locales :::::') for tag in loc_tags: tag_name = tag.get('text') tag_lang = tag.get('locale') tag_localized_name = tag.get('localized_text') tag = TagMultilang.by_name(tag_name, tag_lang) if tag: # Update the existing record if tag_localized_name and tag_localized_name != tag.text: tag.text = tag_localized_name try: tag.save() log.info( '::::::::: OBJECT TAG UPDATED SUCCESSFULLY :::::::::' ) pass except Exception, e: # on rollback, the same closure of state # as that of commit proceeds. session.rollback() log.error( 'Exception occurred while persisting DB objects: %s', e) raise else: # Create a new localized record existing_tag = model.Tag.by_name(tag_name) if existing_tag: TagMultilang.persist( { 'id': existing_tag.id, 'name': tag_name, 'text': tag_localized_name }, tag_lang) log.info( '::::::::: OBJECT TAG PERSISTED SUCCESSFULLY :::::::::' )