Ejemplo n.º 1
0
    def get_feature_row(self):
        all_features_reported = self.get_unique_values("Features")
        themes_fromdb = FEATURES_DB_2018

        rows = []
        all_features = []
        all_themes = defaultdict(list)

        for feat in all_features_reported:
            all_features.extend(feat.split(','))
        all_features = set(all_features)

        for feature in all_features:
            if feature not in themes_fromdb:
                all_themes['No subject: No theme'].append(feature)

                continue

            subject_and_theme = "{}: {}".format(themes_fromdb[feature].subject,
                                                themes_fromdb[feature].theme)
            all_themes[subject_and_theme].append(feature)

        # First sort by THEME
        all_themes = sorted(all_themes.items(),
                            key=lambda t: fixedorder_sortkey(
                                t[0].split(': ')[1], THEMES_2018_ORDER))

        # Second sort by SUBJECT
        all_themes = sorted(all_themes,
                            key=lambda t: fixedorder_sortkey(
                                t[0].split(': ')[0], SUBJECT_2018_ORDER))

        for subject_and_theme, feats in all_themes:
            values = []

            for country_code, country_name in self.countries:
                value = []
                data = [
                    row.Features.split(',') for row in self.db_data
                    if row.CountryCode == country_code and row.Features
                ]
                all_features_rep = [x for x in chain(*data)]
                count_features = Counter(all_features_rep)

                for feature in feats:
                    cnt = count_features.get(feature, 0)

                    if not cnt:
                        continue

                    label = self.get_label_for_value(feature)
                    val = u"{} ({})".format(label, cnt)
                    value.append(val)

                values.append(simple_itemlist(value))

            rows.append((subject_and_theme, values))

        return rows
Ejemplo n.º 2
0
    def get_article_folders(self, descr_folder):
        article_folders = self.filter_contentvalues_by_iface(
            descr_folder, interfaces.INationalDescriptorAssessment)

        article_folders = sorted(
            article_folders,
            key=lambda i: fixedorder_sortkey(i.title, self.ARTICLE_ORDER))

        return article_folders
Ejemplo n.º 3
0
    def get_features_by_subject(self, subjects):
        features_order = [x[0] for x in ANTHROPOGENIC_FEATURES_SHORT_NAMES]

        filtered = defaultdict(list)

        for k, v in self.features.items():
            if v.subject not in subjects:
                continue

            filtered[v.theme].append(v.name)

        out = [(k,
                sorted(v, key=lambda i: fixedorder_sortkey(i, features_order)))
               for k, v in filtered.items()]

        sorted_out = sorted(
            out, key=lambda i: fixedorder_sortkey(i[0], THEMES_2018_ORDER))

        return sorted_out
Ejemplo n.º 4
0
    def setup_data(self):
        # setup data to be available at 'features_pressures_data' attr
        self.get_features_pressures_data()
        data = self.features_pressures_data
        out = []

        for activ_theme, activ_features in self.uses_activities_features:
            activ_features = sorted(
                activ_features,
                key=lambda i: fixedorder_sortkey(i, FEATURES_ORDER))
            theme_data = []

            for activ_feat in activ_features:
                # if activ_feat.endswith('All'):
                #     continue

                activity_data = []

                for country_id, country_name in self.available_countries:
                    pressures = [
                        x[3] for x in data
                        if x[0] == country_id and x[2] == activ_feat
                    ]

                    sorted_press = sorted(
                        set(pressures),
                        key=lambda i: fixedorder_sortkey(i, FEATURES_ORDER))

                    pressures = [
                        ItemLabel(x, self.get_feature_short_name(x))
                        for x in sorted_press
                    ]

                    activity_data.append(
                        ItemListOverview(pressures, sort=False))

                theme_data.append((get_label(activ_feat,
                                             'features'), activity_data))

            out.append((activ_theme, theme_data))

        return out
Ejemplo n.º 5
0
    def get_all_wf_states(self, context=None):
        if context is None:
            context = self.context

        wftool = get_tool('portal_workflow')
        wf = wftool.getWorkflowsFor(context)[0]  # assumes one wf

        states = [k for k, v in wf.states.items()]
        states_sorted = sorted(
            states, key=lambda i: fixedorder_sortkey(i, STATUS_ORDER))
        titles = [wf.states[s].title for s in states_sorted]

        return titles
Ejemplo n.º 6
0
    def get_feature_row(self):
        all_features = self.get_unique_values("Feature")
        themes_fromdb = FEATURES_DB_2018

        rows = []
        all_themes = defaultdict(list)

        for feature in all_features:
            if feature not in themes_fromdb:
                all_themes['No theme'].append(feature)

                continue

            theme = themes_fromdb[feature].theme
            all_themes[theme].append(feature)

        all_themes = sorted(
            all_themes.items(),
            key=lambda t: fixedorder_sortkey(t[0], THEMES_2018_ORDER)
        )

        for theme, feats in all_themes:
            values = []

            for country_code, country_name in self.countries:
                value = []
                data = [
                    row.Feature

                    for row in self.db_data

                    if row.CountryCode == country_code
                    and row.Feature
                ]
                count_features = Counter(data)

                for feature in feats:
                    cnt = count_features.get(feature, 0)

                    if not cnt:
                        continue

                    label = self.get_label_for_value(feature)
                    val = u"{} ({})".format(label, cnt)
                    value.append(val)

                values.append(simple_itemlist(value))

            rows.append((theme, values))

        return rows
Ejemplo n.º 7
0
def ordered_regions_sortkey(region_id):
    """ Sorting function to sort regions by the order defined in vocabulary.py
    REGIONAL_DESCRIPTORS_REGIONS
    """

    regions = REGIONAL_DESCRIPTORS_REGIONS
    regions_order = []

    for region in regions:
        if not region.is_main:
            continue

        regions_order.extend(region.subregions)

    return fixedorder_sortkey(region_id, regions_order)
Ejemplo n.º 8
0
    def get_data_from_db(self):
        data = self.get_data_from_view(self.article)
        data = [Proxy2018(row, self) for row in data]
        order = ORDER_COLS_ART11

        data_ = consolidate_singlevalue_to_list(data, 'Element', order)

        grouped_fields = ('Element', 'GESCriteria', 'P_Parameters',
                          'ParameterOther')

        data_by_mru, features = group_multiple_fields(data_, 'Feature',
                                                      grouped_fields, order)

        if data_by_mru:
            data_by_mru = {"": data_by_mru}
        else:
            data_by_mru = {}

        res = []

        fields = self.get_report_definition()
        feature_field_orig = [a for a in fields if a.title == 'Features'][0]
        f_field_index = fields.index(feature_field_orig)

        feature_fields = [
            DummyReportField(f) for f in sorted(
                features,
                key=lambda i: fixedorder_sortkey(i.name, FEATURES_ORDER))
        ]

        fields_all = (fields[:f_field_index] + feature_fields +
                      fields[f_field_index + len(grouped_fields) + 1:])

        for mru, rows in data_by_mru.items():
            _rows = items_to_rows(rows, fields_all)

            res.append((mru, _rows))

        return res
Ejemplo n.º 9
0
    def get_updatetype_row(self):
        rows = []
        values = []

        order = [
            'Same as 2012 definition', 'Modified from 2012 definition',
            'New target'
        ]

        for country_code, country_name in self.countries:
            value = []
            data = [
                row.UpdateType for row in self.db_data
                if row.CountryCode == country_code and row.UpdateType
            ]
            total = len(data)

            if not total:
                values.append(self.not_rep)

                continue

            updatetypes = sorted(set(data),
                                 key=lambda t: fixedorder_sortkey(t, order))

            for updatetype in updatetypes:
                found = len([x for x in data if x == updatetype])
                percentage = total and (found / float(total)) * 100 or 0
                value.append(u"{0} ({1} - {2:0.1f}%)".format(
                    updatetype, found, percentage))

            values.append(simple_itemlist(value, sort=False))

        rows.append(('No. of targets per category', values))

        return rows
Ejemplo n.º 10
0
    def get_feature_row(self):
        all_features_reported = self.get_unique_values("Features")
        themes_fromdb = FEATURES_DB_2018

        rows = []
        all_features = []
        all_themes = defaultdict(list)

        for feat in all_features_reported:
            all_features.extend(feat.split(','))
        all_features = sorted(set(all_features))

        ok_features = all_features

        if self.descriptor.startswith('D1') and '.' in self.descriptor:
            ok_features = set([f.name for f in get_features(self.descriptor)])

        for feature in all_features:
            if feature not in themes_fromdb:
                all_themes['No subject: No theme'].append(feature)

                continue

            subject_and_theme = "{}: {}".format(themes_fromdb[feature].subject,
                                                themes_fromdb[feature].theme)
            all_themes[subject_and_theme].append(feature)

        # First sort by THEME
        all_themes = sorted(all_themes.items(),
                            key=lambda t: fixedorder_sortkey(
                                t[0].split(': ')[1], THEMES_2018_ORDER))

        # Second sort by SUBJECT
        all_themes = sorted(all_themes,
                            key=lambda t: fixedorder_sortkey(
                                t[0].split(': ')[0], SUBJECT_2018_ORDER))

        for subject_and_theme, feats in all_themes:
            for feature in feats:
                if feature not in ok_features:
                    continue

                values = []
                feature_label = self.get_label_for_value(feature)

                for country_code, country_name in self.countries:
                    value = []
                    data = [
                        row.GESComponent for row in self.db_data
                        if row.CountryCode == country_code and row.Features
                        and feature in row.Features.split(',')
                    ]

                    count_gescomps = Counter(data)

                    if count_gescomps:
                        value = [
                            u'{} ({})'.format(k, v)
                            for k, v in count_gescomps.items()
                        ]

                    values.append(simple_itemlist(value))

                rows.append((subject_and_theme, feature_label, values))

        return rows
Ejemplo n.º 11
0
    def setup_descriptor_level_assessment_data(self):
        """ Setup the regional assessments data for a region

        :return: res =  [("Baltic Sea", [
                    ("D7 - Hydrographical changes", [
                            ("Art8", DESCRIPTOR_SUMMARY),
                            ("Art9", DESCRIPTOR_SUMMARY),
                            ("Art10", DESCRIPTOR_SUMMARY),
                        ]
                    ),
                    ("D1.4 - Birds", [
                            ("Art8", DESCRIPTOR_SUMMARY),
                            ("Art9", DESCRIPTOR_SUMMARY),
                            ("Art10", DESCRIPTOR_SUMMARY),
                        ]
                    ),
                ]
            )]
        """
        self.overall_scores = {}
        res = []

        region_folder = [
            region
            for region in self._reg_desc_region_folders
            if region.id == self.region_code.lower()
        ][0]

        self.reg_desc_region_folder = region_folder
        region_code = region_folder.id
        region_name = region_folder.title

        descriptor_data = []
        descriptor_folders = self.filter_contentvalues_by_iface(
            region_folder, IDescriptorFolder
        )

        for descriptor_folder in descriptor_folders:
            desc_id = descriptor_folder.id.upper()
            if desc_id == 'D1':
                continue

            desc_name = descriptor_folder.title
            articles = []
            article_folders = self.filter_contentvalues_by_iface(
                descriptor_folder, IRegionalDescriptorAssessment
            )

            for article_folder in article_folders:
                article = article_folder.title

                if article in ('Art11', ):
                    continue

                assess_data = self._get_assessment_data(article_folder)
                article_data = self._get_article_data(
                    region_code.upper(), desc_id, assess_data, article
                )
                articles.append((article, article_data))

            articles = sorted(
                articles,
                key=lambda i: fixedorder_sortkey(i[0], self.ARTICLE_ORDER)
            )

            descriptor_data.append(
                ((desc_id, desc_name), articles)
            )

        res.append((region_name, descriptor_data))

        return res
Ejemplo n.º 12
0
    def setup_descriptor_level_assessment_data(self):
        """
        :return: res =  [("Baltic Sea", [
                    ("D7 - Hydrographical changes", [
                            ("Art8", DESCRIPTOR_SUMMARY),
                            ("Art9", DESCRIPTOR_SUMMARY),
                            ("Art10", DESCRIPTOR_SUMMARY),
                        ]
                    ),
                    ("D1.4 - Birds", [
                            ("Art8", DESCRIPTOR_SUMMARY),
                            ("Art9", DESCRIPTOR_SUMMARY),
                            ("Art10", DESCRIPTOR_SUMMARY),
                        ]
                    ),
                ]
            )]
        """

        res = []

        country_folder = [
            country for country in self._nat_desc_folder.contentValues()
            if country.id == self.country_code.lower()
        ][0]

        self.nat_desc_country_folder = country_folder
        region_folders = self.filter_contentvalues_by_iface(
            country_folder, INationalRegionDescriptorFolder)

        region_folders_sorted = sorted(
            region_folders,
            key=lambda i: ordered_regions_sortkey(i.id.upper()))

        for region_folder in region_folders_sorted:
            region_code = region_folder.id
            region_name = region_folder.title
            descriptor_data = []
            descriptor_folders = self.filter_contentvalues_by_iface(
                region_folder, IDescriptorFolder)

            for descriptor_folder in descriptor_folders:
                desc_id = descriptor_folder.id.upper()
                desc_name = descriptor_folder.title
                articles = []
                article_folders = self.filter_contentvalues_by_iface(
                    descriptor_folder, INationalDescriptorAssessment)

                for article_folder in article_folders:
                    article = article_folder.title

                    assess_data = self._get_assessment_data(article_folder)
                    article_data = self._get_article_data(
                        region_code.upper(), country_folder.title, desc_id,
                        assess_data, article)
                    articles.append((article, article_data))

                articles = sorted(
                    articles,
                    key=lambda i: fixedorder_sortkey(i[0], self.ARTICLE_ORDER))

                descriptor_data.append(((desc_id, desc_name), articles))

            res.append((region_name, descriptor_data))

        return res
Ejemplo n.º 13
0
    def _sortkey(self, value, order):

        return fixedorder_sortkey(value, order)