Beispiel #1
0
 def from_db_to_document_records(self,
                                 legal_provisions_from_db,
                                 article_numbers=None):
     document_records = []
     for i, legal_provision in enumerate(legal_provisions_from_db):
         referenced_documents_db = []
         referenced_article_numbers = []
         for join in legal_provision.referenced_documents:
             referenced_documents_db.append(join.referenced_document)
             referenced_article_nrs = join.article_numbers.split(
                 '|') if join.article_numbers else None
             referenced_article_numbers.append(referenced_article_nrs)
         referenced_document_records = self.from_db_to_document_records(
             referenced_documents_db, referenced_article_numbers)
         article_records = self.from_db_to_article_records(
             legal_provision.articles)
         office_record = self.from_db_to_office_record(
             legal_provision.responsible_office)
         article_nrs = article_numbers[i] if isinstance(
             article_numbers, list) else None
         law_status = LawStatusRecord.from_config(
             Config.get_law_status(self._plr_info.get('code'),
                                   self._plr_info.get('law_status'),
                                   legal_provision.law_status))
         document_records.append(
             self._documents_reocord_class(
                 law_status, legal_provision.published_from,
                 legal_provision.title, office_record,
                 legal_provision.text_at_web, legal_provision.abbreviation,
                 legal_provision.official_number,
                 legal_provision.official_title, legal_provision.canton,
                 legal_provision.municipality, article_nrs,
                 legal_provision.file, article_records,
                 referenced_document_records))
     return document_records
Beispiel #2
0
    def from_db_to_geometry_records(self, geometries_from_db):
        geometry_records = []
        for geometry_from_db in geometries_from_db:

            # Create law status record
            law_status = LawStatusRecord.from_config(
                Config.get_law_status(
                    self._plr_info.get('code'),
                    self._plr_info.get('law_status'),
                    geometry_from_db.law_status
                )
            )

            # Create office record
            office = self.from_db_to_office_record(geometry_from_db.responsible_office)

            # Create geometry records
            geometry_records.extend(self.create_geometry_records_(
                law_status,
                geometry_from_db.published_from,
                to_shape(geometry_from_db.geom),
                geometry_from_db.geo_metadata,
                office
            ))

        return geometry_records
Beispiel #3
0
 def from_db_to_article_records(self, articles_from_db):
     article_records = []
     for article_from_db in articles_from_db:
         law_status = LawStatusRecord.from_config(
             Config.get_law_status(self._plr_info.get('code'),
                                   self._plr_info.get('law_status'),
                                   article_from_db.law_status))
         article_records.append(
             self._article_record_class(law_status,
                                        article_from_db.published_from,
                                        article_from_db.number,
                                        article_from_db.text_at_web,
                                        article_from_db.text))
     return article_records
Beispiel #4
0
    def from_db_to_plr_record(self, public_law_restriction_from_db,
                              legend_entries_from_db):
        thresholds = self._plr_info.get('thresholds')
        min_length = thresholds.get('length').get('limit')
        length_unit = thresholds.get('length').get('unit')
        min_area = thresholds.get('area').get('limit')
        area_unit = thresholds.get('area').get('unit')
        legend_entry_records = self.from_db_to_legend_entry_record(
            self._theme_record, legend_entries_from_db,
            public_law_restriction_from_db)
        symbol = None
        for legend_entry_record in legend_entry_records:
            if public_law_restriction_from_db.type_code == legend_entry_record.type_code:
                symbol = legend_entry_record.symbol

        if symbol is None:
            error_msg = u'No symbol was found for plr in topic {topic} with id {id}'.format(
                topic=self._plr_info.get('code'),
                id=public_law_restriction_from_db.id)
            log.error(error_msg)
            raise AttributeError(error_msg)
        view_service_record = self.from_db_to_view_service_record(
            public_law_restriction_from_db.view_service, legend_entry_records,
            self._plr_info.get('code'))

        document_records = self.get_document_records(
            public_law_restriction_from_db)
        geometry_records = self.from_db_to_geometry_records(
            public_law_restriction_from_db.geometries)

        basis_plr_records = []
        for join in public_law_restriction_from_db.basis:
            basis_plr_records.append(self.from_db_to_plr_record(join.base, []))
        refinements_plr_records = []
        for join in public_law_restriction_from_db.refinements:
            refinements_plr_records.append(
                self.from_db_to_plr_record(join.refinement, []))
        law_status = LawStatusRecord.from_config(
            Config.get_law_status(self._plr_info.get('code'),
                                  self._plr_info.get('law_status'),
                                  public_law_restriction_from_db.law_status))

        plr_record = self._plr_record_class(
            self._theme_record,
            public_law_restriction_from_db.information,
            law_status,
            public_law_restriction_from_db.published_from,
            self.from_db_to_office_record(
                public_law_restriction_from_db.responsible_office),
            symbol,
            view_service_record,
            geometry_records,
            sub_theme=public_law_restriction_from_db.sub_theme,
            other_theme=public_law_restriction_from_db.other_theme,
            type_code=public_law_restriction_from_db.type_code,
            type_code_list=public_law_restriction_from_db.type_code_list,
            basis=basis_plr_records,
            refinements=refinements_plr_records,
            documents=document_records,
            min_area=min_area,
            min_length=min_length,
            area_unit=area_unit,
            length_unit=length_unit,
            view_service_id=public_law_restriction_from_db.view_service.id)

        return plr_record
Beispiel #5
0
    def from_db_to_plr_record(self, public_law_restriction_from_db):
        thresholds = self._plr_info.get('thresholds')
        min_length = thresholds.get('length').get('limit')
        length_unit = thresholds.get('length').get('unit')
        length_precision = thresholds.get('length').get('precision')
        min_area = thresholds.get('area').get('limit')
        area_unit = thresholds.get('area').get('unit')
        area_precision = thresholds.get('area').get('precision')
        percentage_precision = thresholds.get('percentage').get('precision')
        legend_entry_records = self.from_db_to_legend_entry_record(
            self._theme_record,
            public_law_restriction_from_db.view_service.legends)
        symbol = None
        for legend_entry_record in legend_entry_records:
            if public_law_restriction_from_db.type_code == legend_entry_record.type_code \
                    and public_law_restriction_from_db.information == legend_entry_record.legend_text:
                symbol = legend_entry_record.symbol
        if symbol is None:
            # TODO: raise real error here when data is correct, emit warning for now
            msg = u'No symbol was found for plr in topic {topic} with id {id}'.format(
                topic=self._plr_info.get('code'),
                id=public_law_restriction_from_db.id)
            log.warning(msg)
            symbol = ImageRecord('1'.encode('utf-8'))
            # raise AttributeError(msg)
        view_service_record = self.from_db_to_view_service_record(
            public_law_restriction_from_db.view_service, legend_entry_records)
        documents_from_db = []
        article_numbers = []
        for i, legal_provision in enumerate(
                public_law_restriction_from_db.legal_provisions):
            documents_from_db.append(legal_provision.document)
            article_nrs = legal_provision.article_numbers.split('|') if legal_provision.article_numbers \
                else None
            article_numbers.append(article_nrs)
        document_records = self.from_db_to_document_records(
            documents_from_db, article_numbers)
        geometry_records = self.from_db_to_geometry_records(
            public_law_restriction_from_db.geometries)

        basis_plr_records = []
        for join in public_law_restriction_from_db.basis:
            basis_plr_records.append(self.from_db_to_plr_record(join.base))
        refinements_plr_records = []
        for join in public_law_restriction_from_db.refinements:
            refinements_plr_records.append(
                self.from_db_to_plr_record(join.refinement))
        law_status = LawStatusRecord.from_config(
            Config.get_law_status(self._plr_info.get('code'),
                                  self._plr_info.get('law_status'),
                                  public_law_restriction_from_db.law_status))

        plr_record = self._plr_record_class(
            self._theme_record,
            public_law_restriction_from_db.information,
            law_status,
            public_law_restriction_from_db.published_from,
            self.from_db_to_office_record(
                public_law_restriction_from_db.responsible_office),
            symbol,
            view_service_record,
            geometry_records,
            sub_theme=public_law_restriction_from_db.sub_theme,
            other_theme=public_law_restriction_from_db.other_theme,
            type_code=public_law_restriction_from_db.type_code,
            type_code_list=public_law_restriction_from_db.type_code_list,
            basis=basis_plr_records,
            refinements=refinements_plr_records,
            documents=document_records,
            min_area=min_area,
            min_length=min_length,
            area_unit=area_unit,
            length_unit=length_unit,
            area_precision=area_precision,
            length_precision=length_precision,
            percentage_precision=percentage_precision)

        return plr_record