Пример #1
0
    def get_table(self, **kwargs):
        # set some custom attributes for template rendering
        table = super(WmsIndexView, self).get_table(**kwargs)
        # whether whole services or single layers should be displayed, we have to exclude some columns
        filter_by_show_layers = self.filterset.form_prefix + '-' + 'service__is_root'
        if filter_by_show_layers in self.filterset.data and self.filterset.data.get(
                filter_by_show_layers) == 'on':
            table.exclude = (
                'layers',
                'featuretypes',
                'harvest_results',
                'collected_harvest_records',
                'harvest_duration',
            )
        else:
            table.exclude = (
                'parent_service',
                'featuretypes',
                'harvest_results',
                'collected_harvest_records',
                'harvest_duration',
            )

        render_helper = RenderHelper(user_permissions=list(
            filter(None, self.request.user.get_all_permissions())))
        table.actions = [
            render_helper.render_item(item=Metadata.get_add_resource_action())
        ]
        return table
Пример #2
0
    def get_table(self, **kwargs):
        # set some custom attributes for template rendering
        table = super(LogsIndexView, self).get_table(**kwargs)
        table.title = Tag(tag='i', attrs={"class": [IconEnum.LOGS.value]
                                          }) + _(' Logs')

        render_helper = RenderHelper(user_permissions=list(
            filter(None, self.request.user.get_all_permissions())),
                                     update_url_qs=get_current_view_args(
                                         self.request))

        # append export links
        query_trailer_sign = "?"
        if self.request.GET:
            query_trailer_sign = "&"
        csv_download_link = Link(url=self.request.get_full_path() +
                                 f"{query_trailer_sign}_export=csv",
                                 content=".csv")
        json_download_link = Link(url=self.request.get_full_path() +
                                  f"{query_trailer_sign}_export=json",
                                  content=".json")

        dropdown = Dropdown(btn_value=Tag(
            tag='i', attrs={"class": [IconEnum.DOWNLOAD.value]}) +
                            _(" Export as"),
                            items=[csv_download_link, json_download_link],
                            needs_perm=PermissionEnum.CAN_ACCESS_LOGS.value)
        table.actions = [render_helper.render_item(item=dropdown)]
        return table
Пример #3
0
 def get_table(self, **kwargs):
     # set some custom attributes for template rendering
     table = super(DatasetIndexView, self).get_table(**kwargs)
     render_helper = RenderHelper(user_permissions=list(
         filter(None, self.request.user.get_all_permissions())),
                                  update_url_qs=get_current_view_args(
                                      self.request))
     table.actions = [
         render_helper.render_item(item=Metadata.get_add_dataset_action())
     ]
     return table
Пример #4
0
class PendingTaskTable(tables.Table):
    bs4helper = None
    status = tables.Column(verbose_name=_('Status'),
                           accessor='status_icons',
                           attrs={"th": {
                               "class": "col-sm-1"
                           }})
    service = tables.Column(verbose_name=_('Service'),
                            accessor='service_uri',
                            attrs={"th": {
                                "class": "col-sm-3"
                            }})
    phase = tables.Column(verbose_name=_('Phase'),
                          attrs={"th": {
                              "class": "col-sm-4"
                          }})
    progress = tables.Column(verbose_name=_('Progress'),
                             attrs={"th": {
                                 "class": "col-sm-3"
                             }})
    actions = tables.Column(verbose_name=_('Actions'),
                            accessor='action_buttons',
                            attrs={
                                "td": {
                                    "style": "white-space:nowrap;"
                                },
                                "th": {
                                    "class": "col-sm-1"
                                }
                            })

    class Meta:
        model = PendingTask
        fields = ('status', 'service', 'phase', 'progress', 'actions')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        prefix = 'pending-task-table'
        orderable = False

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_status(self, value):
        return format_html(self.render_helper.render_list_coherent(value))

    def render_actions(self, value):
        self.render_helper.update_attrs = {"class": ["btn-sm"]}
        renderd_actions = self.render_helper.render_list_coherent(items=value)
        self.render_helper.update_attrs = None
        return format_html(renderd_actions)

    @staticmethod
    def render_progress(value):
        return ProgressBar(progress=round(value, 2)).render(safe=True)
Пример #5
0
 def get_table(self, **kwargs):
     # set some custom attributes for template rendering
     table = super(CswIndexView, self).get_table(**kwargs)
     table.exclude = ('parent_service', 'layers', 'featuretypes',
                      'service__published_for')
     render_helper = RenderHelper(user_permissions=list(
         filter(None, self.request.user.get_all_permissions())),
                                  update_url_qs=get_current_view_args(
                                      self.request))
     table.actions = [
         render_helper.render_item(item=Metadata.get_add_resource_action())
     ]
     return table
Пример #6
0
    def get_table(self, **kwargs):
        # set some custom attributes for template rendering
        table = super(WfsIndexView, self).get_table(**kwargs)
        table.exclude = ('parent_service', 'layers', 'harvest_results',
                         'collected_harvest_records', 'harvest_duration')

        render_helper = RenderHelper(user_permissions=list(
            filter(None, self.request.user.get_all_permissions())),
                                     update_url_qs=get_current_view_args(
                                         self.request))
        table.actions = [
            render_helper.render_item(item=Metadata.get_add_resource_action())
        ]
        return table
Пример #7
0
class SubscriptionTable(tables.Table):
    render_helper = None
    actions = MrMapColumn(verbose_name=_('Actions'),
                          tooltip=_('Actions to perform'),
                          empty_values=[],
                          orderable=False,
                          attrs={"td": {
                              "style": "white-space:nowrap;"
                          }})

    class Meta:
        model = Subscription
        fields = ('metadata', 'notify_on_update', 'notify_on_metadata_edit',
                  'notify_on_access_edit')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        prefix = 'subscription-table'

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_metadata(self, value):
        return Link(url=value.get_absolute_url(),
                    content=value).render(safe=True)

    def render_actions(self, record):
        self.render_helper.update_attrs = {"class": ["btn-sm", "mr-1"]}
        renderd_actions = self.render_helper.render_list_coherent(
            items=record.get_actions())
        self.render_helper.update_attrs = None
        return format_html(renderd_actions)
Пример #8
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        related_datasets = self.object.get_related_dataset_metadatas()

        item_list = []
        for related_dataset in related_datasets:
            link_to_dataset = Link(url=related_dataset.detail_view_uri,
                                   content=related_dataset.title)

            metadata_xml = Link(url=related_dataset.service_metadata_uri,
                                content=get_icon(IconEnum.CAPABILITIES) +
                                _(' XML'),
                                open_in_new_tab=True)
            metadata_html = Link(url=related_dataset.html_metadata_uri,
                                 content=get_icon(IconEnum.NEWSPAPER) +
                                 _(' HTML'),
                                 open_in_new_tab=True)

            dataset_metadata_dropdown = Dropdown(
                btn_value=get_icon(IconEnum.METADATA) + _(' Metadata'),
                items=[metadata_xml, metadata_html],
                color=ButtonColorEnum.SECONDARY,
                header=_l('Show metadata as:'))

            render_helper = RenderHelper(
                user_permissions=list(
                    filter(None, self.request.user.get_all_permissions())),
                update_url_qs=get_current_view_args(request=self.request),
                update_attrs={"class": ["btn-sm", "mr-1"]})
            right = render_helper.render_list_coherent(
                items=related_dataset.get_actions())

            item_content = DefaultHeaderRow(
                content_left=link_to_dataset.render(),
                content_center=dataset_metadata_dropdown.render(),
                content_right=right)
            item_list.append(ListGroupItem(content=item_content.render()))

        dataset_list = ListGroup(items=item_list)

        context.update({'card_body': dataset_list if related_datasets else ''})
        return context
Пример #9
0
    def get_table(self, **kwargs):
        # set some custom attributes for template rendering
        table = super(AllowedOperationTableView, self).get_table(**kwargs)

        table.title = Tag(tag='i', attrs={"class": [IconEnum.ACCESS.value]}).render() + f' Allowed Operations for {self.root_metadata}'

        render_helper = RenderHelper(user_permissions=list(filter(None, self.request.user.get_all_permissions())),
                                     update_url_qs=get_current_view_args(self.request))
        #table.actions = [render_helper.render_item(item=Metadata.get_add_resource_action())]
        return table
Пример #10
0
class MonitoringRunTable(tables.Table):
    class Meta:
        model = MonitoringRun
        fields = ('uuid', 'metadatas__all', 'start', 'end', 'duration')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        prefix = 'monitoring-result-table'

    health_state = tables.Column(accessor='health_state',
                                 verbose_name=_('Related health state'))
    results = tables.Column(verbose_name=_('Related results'), empty_values=[])

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_uuid(self, record, value):
        return Link(url=record.get_absolute_url(),
                    content=value).render(safe=True)

    def render_metadatas__all(self, value):
        links = []
        for metadata in value:
            links.append(
                Tag(tag='span',
                    attrs={"class": ['mr-1']},
                    content=Link(url=metadata.get_absolute_url(),
                                 content=metadata).render() + ','))
        return format_html(
            self.render_helper.render_list_coherent(items=links))

    def render_results(self, record):
        if record.result_view_uri:
            return Link(url=record.result_view_uri,
                        content=_('results')).render(safe=True)
        else:
            return ''

    def render_health_state(self, value):
        if value.health_state_code == HealthStateEnum.WARNING.value:
            color = TextColorEnum.WARNING
        elif value.health_state_code == HealthStateEnum.CRITICAL.value:
            color = TextColorEnum.DANGER
        elif value.health_state_code == HealthStateEnum.UNAUTHORIZED.value:
            color = TextColorEnum.SECONDARY
        else:
            color = TextColorEnum.SUCCESS
        return Link(url=value.get_absolute_url, color=color,
                    content=value.pk).render(safe=True)
Пример #11
0
 def setup(self, request, *args, **kwargs):
     super().setup(request, *args, **kwargs)
     self.render_helper = RenderHelper(
         user_permissions=list(
             filter(None, self.request.user.get_all_permissions())),
         update_attrs={"class": ["btn-sm", "mr-1"]})
Пример #12
0
 def before_render(self, request):
     self.render_helper = RenderHelper(user_permissions=list(
         filter(None, request.user.get_all_permissions())))
Пример #13
0
class DatasetTable(tables.Table):
    bs4helper = None
    related_objects = MrMapColumn(verbose_name=_('Related objects'),
                                  accessor='related_to__all',
                                  empty_values=[])
    origins = MrMapColumn(verbose_name=_('Origins'), empty_values=[])
    actions = tables.Column(verbose_name=_('Actions'),
                            empty_values=[],
                            orderable=False,
                            attrs={"td": {
                                "style": "white-space:nowrap;"
                            }})

    class Meta:
        model = Metadata
        fields = ('title', 'related_objects', 'origins', 'actions')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        # todo: set this prefix dynamic
        prefix = 'wms-table'

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_title(self, value, record):
        return Link(url=record.detail_html_view_uri,
                    content=value,
                    open_in_new_tab=True).render(safe=True)

    def render_related_objects(self, value):
        link_list = []
        for metadata in value:
            if metadata.metadata_type == MetadataEnum.FEATURETYPE.value:
                kind_of_resource_icon = IconEnum.FEATURETYPE.value
                kind_of_resource = "Featuretype"
            elif metadata.metadata_type == MetadataEnum.LAYER.value:
                kind_of_resource_icon = IconEnum.LAYER.value
                kind_of_resource = "Layer"
            else:
                kind_of_resource_icon = ""
                kind_of_resource = ""
            kind_of_resource_icon = Tag(
                tag='i',
                attrs={
                    "class": [kind_of_resource_icon]
                },
            ).render()

            link_list.append(
                Link(
                    url=metadata.detail_view_uri,
                    content=format_html(kind_of_resource_icon +
                                        f" {metadata.title} [{metadata.id}]"),
                    tooltip=
                    _(f'Click to open the detail view of related {kind_of_resource} <strong>{metadata.title} [{metadata.id}]"</strong>'
                      ),
                ), )
        return format_html(
            self.render_helper.render_list_coherent(items=link_list))

    def render_origins(self, record):
        related_metadatas = MetadataRelation.objects.filter(to_metadata=record)
        origin_list = []
        rel_mds = list(record.related_metadatas.all())
        relations = list(related_metadatas) + rel_mds
        for relation in relations:
            origin_list.append(f"{relation.origin}")

        return format_html(', '.join(origin_list))

    def render_actions(self, record):
        self.render_helper.update_attrs = {"class": ["btn-sm", "mr-1"]}
        renderd_actions = self.render_helper.render_list_coherent(
            items=record.get_actions())
        self.render_helper.update_attrs = None
        return format_html(renderd_actions)
Пример #14
0
class OgcServiceTable(tables.Table):
    bs4helper = None
    layers = tables.Column(verbose_name=_('Layers'),
                           empty_values=[],
                           accessor='service__child_services__count')
    featuretypes = tables.Column(verbose_name=_('Featuretypes'),
                                 empty_values=[],
                                 accessor='service__featuretypes__count')
    parent_service = tables.Column(
        verbose_name=_('Parent service'),
        empty_values=[],
        accessor='service__parent_service__metadata')
    status = tables.Column(verbose_name=_('Status'),
                           empty_values=[],
                           attrs={"td": {
                               "style": "white-space:nowrap;"
                           }})
    health = tables.Column(
        verbose_name=_('Health'),
        empty_values=[],
    )
    harvest_results = tables.Column(
        verbose_name=_('Last harvest'),
        empty_values=[],
    )
    harvest_duration = tables.Column(verbose_name=_('Harvest duration'),
                                     empty_values=[],
                                     accessor='harvest_results')
    collected_harvest_records = tables.Column(
        verbose_name=_('Collected harvest records'),
        empty_values=[],
        accessor='harvest_results')
    actions = tables.TemplateColumn(
        verbose_name=_('Actions'),
        empty_values=[],
        orderable=False,
        template_code=RESOURCE_TABLE_ACTIONS,
        attrs={"td": {
            "style": "white-space:nowrap;"
        }})

    class Meta:
        model = Metadata
        fields = ('title', 'layers', 'featuretypes', 'parent_service',
                  'status', 'health', 'service__service_type__version',
                  'harvest_results', 'harvest_duration',
                  'collected_harvest_records', 'contact',
                  'service__created_by__mrmapgroup', 'service__published_for',
                  'created', 'actions')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        prefix = 'ogc-service-table'

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_title(self, record, value):
        return Link(url=record.detail_view_uri,
                    content=value).render(safe=True)

    def render_harvest_results(self, value):
        last_harvest_result = value.all().first()
        return last_harvest_result.timestamp_start if last_harvest_result is not None else _(
            'Never')

    def render_collected_harvest_records(self, record, value):
        last_harvest_result = value.all().first()
        dataset_count = record.get_related_metadatas().filter(
            metadata_type=MetadataEnum.DATASET.value).count()
        link = f"<a data-toggle='tooltip' title='{_('Number of dataset metadata harvested')}'href='{reverse('resource:datasets-index')}?dataset-filter-related_to={record.pk}'>{dataset_count}</a>"
        return format_html(f"{last_harvest_result.number_results} ({link})"
                           ) if last_harvest_result is not None else '-'

    def render_harvest_duration(self, value):
        last_harvest_result = value.all().first()
        if last_harvest_result and last_harvest_result.timestamp_end and last_harvest_result.timestamp_start:
            time_delta = last_harvest_result.timestamp_end - last_harvest_result.timestamp_start
            return f"{time_delta.days}d  {time_delta.seconds//3600}h {(time_delta.seconds//60)%60}m {(time_delta.seconds)%60}s"
        else:
            return '-'

    # todo
    def render_wms_validation(self, record):
        passed = None
        try:
            check_run = ConformityCheckRun.objects.get_latest_check(record)
            passed = check_run.passed
        except ConformityCheckRun.DoesNotExist:
            pass
        return self.get_validation_icons(passed=passed)

    def render_parent_service(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def render_status(self, record):
        self.render_helper.update_attrs = {'class': ['mr-1']}
        update_url_qs = self.render_helper.update_url_qs
        self.render_helper.update_url_qs = {}
        icons = self.render_helper.render_list_coherent(
            items=record.get_status_icons(), safe=True)
        self.render_helper.update_attrs = {}
        self.render_helper.update_url_qs = update_url_qs
        return format_html(icons)

    def render_health(self, record):
        return format_html(
            self.render_helper.render_list_coherent(
                items=record.get_health_icons(), safe=True))

    def render_contact(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def render_service__created_by(self, value):
        return Link(url=value.get_absolute_url(),
                    content=value).render(safe=True)

    def render_service__published_for(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def order_layers(self, queryset, is_descending):
        queryset = queryset.annotate(
            count=Count("service__child_services")).order_by(
                ("-" if is_descending else "") + "count")
        return queryset, True

    def order_wfs_featuretypes(self, queryset, is_descending):
        queryset = queryset.annotate(count=Count(
            "service__featuretypes")).order_by(("-" if is_descending else "") +
                                               "count")
        return queryset, True

    def order_status(self, queryset, is_descending):
        is_descending_str = "-" if is_descending else ""
        queryset = queryset.order_by(
            is_descending_str + "is_active",
            is_descending_str + "is_secured",
            is_descending_str + "external_authentication",
        )
        return queryset, True

    def order_health(self, queryset, is_descending):
        # TODO:
        return queryset, True
Пример #15
0
class OgcServiceTable(tables.Table):
    bs4helper = None
    layers = tables.Column(verbose_name=_('Layers'),
                           empty_values=[],
                           accessor='service__child_services__count')
    featuretypes = tables.Column(verbose_name=_('Featuretypes'),
                                 empty_values=[],
                                 accessor='service__featuretypes__count')
    parent_service = tables.Column(
        verbose_name=_('Parent service'),
        empty_values=[],
        accessor='service__parent_service__metadata')
    status = tables.Column(verbose_name=_('Status'),
                           empty_values=[],
                           attrs={"td": {
                               "style": "white-space:nowrap;"
                           }})
    health = tables.Column(
        verbose_name=_('Health'),
        empty_values=[],
    )
    harvest_results = tables.Column(
        verbose_name=_('Last harvest'),
        empty_values=[],
    )
    collected_harvest_records = tables.Column(
        verbose_name=_('Collected harvest records'),
        empty_values=[],
        accessor='harvest_results')
    actions = tables.Column(verbose_name=_('Actions'),
                            empty_values=[],
                            orderable=False,
                            attrs={"td": {
                                "style": "white-space:nowrap;"
                            }})

    class Meta:
        model = Metadata
        fields = ('title', 'layers', 'featuretypes', 'parent_service',
                  'status', 'health', 'service__service_type__version',
                  'harvest_results', 'collected_harvest_records', 'contact',
                  'service__created_by__mrmapgroup', 'service__published_for',
                  'created', 'actions')
        template_name = "skeletons/django_tables2_bootstrap4_custom.html"
        prefix = 'ogc-service-table'

    def before_render(self, request):
        self.render_helper = RenderHelper(user_permissions=list(
            filter(None, request.user.get_all_permissions())))

    def render_title(self, record, value):
        return Link(url=record.detail_view_uri,
                    content=value).render(safe=True)

    def render_harvest_results(self, record, value):
        last_harvest_result = value.filter(
            metadata=record).order_by("-created").first()
        return last_harvest_result.timestamp_start if last_harvest_result is not None else _(
            'Never')

    def render_collected_harvest_records(self, record, value):
        last_harvest_result = value.filter(
            metadata=record).order_by("-created").first()
        return last_harvest_result.number_results if last_harvest_result is not None else '-'

    # todo
    def render_wms_validation(self, record):
        passed = None
        try:
            check_run = ConformityCheckRun.objects.get_latest_check(record)
            passed = check_run.passed
        except ConformityCheckRun.DoesNotExist:
            pass
        return self.get_validation_icons(passed=passed)

    def render_parent_service(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def render_status(self, record):
        self.render_helper.update_attrs = {'class': ['mr-1']}
        update_url_qs = self.render_helper.update_url_qs
        self.render_helper.update_url_qs = {}
        icons = self.render_helper.render_list_coherent(
            items=record.get_status_icons(), safe=True)
        self.render_helper.update_attrs = {}
        self.render_helper.update_url_qs = update_url_qs
        return format_html(icons)

    def render_health(self, record):
        return format_html(
            self.render_helper.render_list_coherent(
                items=record.get_health_icons(), safe=True))

    def render_contact(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def render_service__created_by(self, value):
        return Link(url=value.get_absolute_url(),
                    content=value).render(safe=True)

    def render_service__published_for(self, value):
        return Link(url=value.detail_view_uri, content=value).render(safe=True)

    def render_actions(self, record):
        self.render_helper.update_attrs = {"class": ["btn-sm", "mr-1"]}
        renderd_actions = self.render_helper.render_list_coherent(
            items=record.get_actions())
        self.render_helper.update_attrs = None
        return format_html(renderd_actions)

    def order_layers(self, queryset, is_descending):
        queryset = queryset.annotate(
            count=Count("service__child_services")).order_by(
                ("-" if is_descending else "") + "count")
        return queryset, True

    def order_wfs_featuretypes(self, queryset, is_descending):
        queryset = queryset.annotate(count=Count(
            "service__featuretypes")).order_by(("-" if is_descending else "") +
                                               "count")
        return queryset, True

    def order_status(self, queryset, is_descending):
        is_descending_str = "-" if is_descending else ""
        queryset = queryset.order_by(
            is_descending_str + "is_active",
            is_descending_str + "is_secured",
            is_descending_str + "external_authentication",
        )
        return queryset, True

    def order_health(self, queryset, is_descending):
        # TODO:
        return queryset, True