Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
    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 :::::::::'
                            )