From 9ca79e7b672a26bcf8974ee2e91d433103cd1433 Mon Sep 17 00:00:00 2001 From: LePetitTim Date: Thu, 4 Aug 2022 15:53:15 +0200 Subject: [PATCH] Add warnings, addportal_filter, url on general parser --- geotrek/common/parsers.py | 11 ++++++++--- geotrek/trekking/parsers.py | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/geotrek/common/parsers.py b/geotrek/common/parsers.py index fbf52e6d64..3a4a94dd65 100644 --- a/geotrek/common/parsers.py +++ b/geotrek/common/parsers.py @@ -902,6 +902,7 @@ class GeotrekParser(AttachmentParserMixin, Parser): m2m_replace_fields: Replace m2m fields which have not the same name in the api v2 compare to models (geom => geometry in api v2) categories_keys_api_v2: Key in the route of the category (example: /api/v2/touristiccontent_category/) corresponding to the model field eid_prefix: Prefix of your eid which allow to differentiate multiple GeotrekParser + portals_filter: Portals which will be use for filter in api v2 (default: No portal filter) """ model = None next_url = '' @@ -922,14 +923,16 @@ class GeotrekParser(AttachmentParserMixin, Parser): } bbox = None eid_prefix = '' + portals_filter = None - def __init__(self, *args, **kwargs): + def __init__(self, url=None, portals_filter=None, *args, **kwargs): super().__init__(*args, **kwargs) self.bbox = Polygon.from_bbox(settings.SPATIAL_EXTENT) self.bbox.srid = settings.SRID self.bbox.transform(4326) # WGS84 - self.fields = dict((f.name, f.name) for f in self.model._meta.fields if - not isinstance(f, TranslationField) and not f.name == 'id') + self.portals_filter = portals_filter + self.url = url if url else self.url + self.fields = dict((f.name, f.name) for f in self.model._meta.fields if not isinstance(f, TranslationField) and not f.name == 'id') self.m2m_fields = { f.name: f.name for f in self.model._meta.many_to_many @@ -1001,8 +1004,10 @@ def filter_geom(self, src, val): def next_row(self): while self.next_url: + portals = self.portals_filter params = { 'in_bbox': ','.join([str(coord) for coord in self.bbox.extent]), + 'portals': ','.join(portals) if portals else '' } response = self.request_or_retry(self.next_url, params=params) self.root = response.json() diff --git a/geotrek/trekking/parsers.py b/geotrek/trekking/parsers.py index 569e3d13c4..04d50dfffb 100644 --- a/geotrek/trekking/parsers.py +++ b/geotrek/trekking/parsers.py @@ -121,7 +121,7 @@ def end(self): try: params = { 'in_bbox': ','.join([str(coord) for coord in self.bbox.extent]), - 'fields': ['children', 'id'] + 'fields': 'children,id' } response = self.request_or_retry(f"{self.next_url}", params=params) results = response.json()['results'] @@ -136,8 +136,13 @@ def end(self): return order = 0 for child in value: - trek_child_instance = Trek.objects.get(eid=f"{self.eid_prefix}{child}") - OrderedTrekChild.objects.get_or_create(parent=trek_parent_instance[0], child=trek_child_instance, + try: + trek_child_instance = Trek.objects.get(eid=f"{self.eid_prefix}{child}") + except Trek.DoesNotExist: + self.add_warning(_(f"One trek has not be generated for {trek_parent_instance[0].pk}")) + continue + OrderedTrekChild.objects.get_or_create(parent=trek_parent_instance[0], + child=trek_child_instance, order=order) order += 1 except Exception as e: