def before_index(self, pkg_dict): from ckanext.multilang.model import PackageMultilang multilang_localized = PackageMultilang.get_for_package(pkg_dict['id']) for package in multilang_localized: log.debug('...Creating index for Package localized field: ' + package.field + ' - ' + package.lang) pkg_dict['package_multilang_localized_' + package.field + '_' + package.lang] = package.text log.debug('Index successfully created for Package: %r', pkg_dict.get('package_multilang_localized_' + package.field + '_' + package.lang)) '''from ckanext.multilang.model import GroupMultilang multilang_localized = GroupMultilang.get_for_group_name(str(pkg_dict['organization'])) for organization in multilang_localized: log.debug('...Creating index for Organization localized field: ' + organization.field + ' - ' + organization.lang) pkg_dict['organization_multilang_localized_' + organization.field + '_' + organization.lang] = organization.text log.debug('Index successfully created for Organization: %r', pkg_dict.get('organization_multilang_localized_' + organization.field + '_' + organization.lang)) for group in pkg_dict['groups']: multilang_localized = GroupMultilang.get_for_group_name(str(group)) for record in multilang_localized: log.debug('...Creating index for Group localized field: ' + organization.field + ' - ' + organization.lang) pkg_dict['group_multilang_localized_' + record.field + '_' + record.lang] = record.text log.debug('Index successfully created for Group: %r', pkg_dict.get('group_multilang_localized_' + organization.field + '_' + organization.lang))''' return pkg_dict
def before_index(self, pkg_dict): from ckanext.multilang.model import PackageMultilang multilang_localized = PackageMultilang.get_for_package(pkg_dict['id']) for package in multilang_localized: log.debug('...Creating index for Package localized field: ' + package.field + ' - ' + package.lang) pkg_dict['package_multilang_localized_' + package.field + '_' + package.lang] = package.text log.debug('Index successfully created for Package: %r', pkg_dict.get('package_multilang_localized_' + package.field + '_' + package.lang)) return pkg_dict
def get_for_package(pkg_id): ''' Returns all the localized fields of a dataset, in a dict of dicts, i.e.: {FIELDNAME:{LANG:label,...},...} Returns None if multilang extension not loaded. ''' try: from ckanext.multilang.model import PackageMultilang except ImportError: log.warn('DCAT-AP_IT: multilang extension not available.') # TODO: if no multilang, return the dataset in a single language in the same format of the multilang data return None records = PackageMultilang.get_for_package(pkg_id) return _multilang_to_dict(records)
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 :::::::::' )