Пример #1
0
    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)
Пример #2
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 :::::::::'
                            )