udata 10.8.4.dev37375__py2.py3-none-any.whl → 10.8.4.dev37405__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (24) hide show
  1. udata/core/dataservices/rdf.py +4 -1
  2. udata/core/dataset/rdf.py +3 -2
  3. udata/rdf.py +19 -2
  4. udata/static/chunks/{10.8ca60413647062717b1e.js → 10.471164b2a9fe15614797.js} +3 -3
  5. udata/static/chunks/{10.8ca60413647062717b1e.js.map → 10.471164b2a9fe15614797.js.map} +1 -1
  6. udata/static/chunks/{11.0f04e49a40a0a381bcce.js → 11.51d706fb9521c16976bc.js} +3 -3
  7. udata/static/chunks/{11.0f04e49a40a0a381bcce.js.map → 11.51d706fb9521c16976bc.js.map} +1 -1
  8. udata/static/chunks/{13.d9c1735d14038b94c17e.js → 13.f29411b06be1883356a3.js} +2 -2
  9. udata/static/chunks/{13.d9c1735d14038b94c17e.js.map → 13.f29411b06be1883356a3.js.map} +1 -1
  10. udata/static/chunks/{17.81c57c0dedf812e43013.js → 17.3bd0340930d4a314ce9c.js} +2 -2
  11. udata/static/chunks/{17.81c57c0dedf812e43013.js.map → 17.3bd0340930d4a314ce9c.js.map} +1 -1
  12. udata/static/chunks/{8.494b003a94383b142c18.js → 8.54e44b102164ae5e7a67.js} +2 -2
  13. udata/static/chunks/{8.494b003a94383b142c18.js.map → 8.54e44b102164ae5e7a67.js.map} +1 -1
  14. udata/static/chunks/{9.033d7e190ca9e226a5d0.js → 9.07515e5187f475bce828.js} +3 -3
  15. udata/static/chunks/{9.033d7e190ca9e226a5d0.js.map → 9.07515e5187f475bce828.js.map} +1 -1
  16. udata/static/common.js +1 -1
  17. udata/static/common.js.map +1 -1
  18. udata/tests/dataset/test_dataset_rdf.py +19 -0
  19. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/METADATA +2 -1
  20. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/RECORD +24 -24
  21. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/LICENSE +0 -0
  22. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/WHEEL +0 -0
  23. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/entry_points.txt +0 -0
  24. {udata-10.8.4.dev37375.dist-info → udata-10.8.4.dev37405.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,7 @@ from udata.rdf import (
14
14
  TAG_TO_EU_HVD_CATEGORIES,
15
15
  contact_points_from_rdf,
16
16
  contact_points_to_rdf,
17
+ default_lang_value,
17
18
  namespace_manager,
18
19
  rdf_value,
19
20
  remote_url_from_rdf,
@@ -38,7 +39,9 @@ def dataservice_from_rdf(
38
39
  d = graph.resource(node)
39
40
 
40
41
  dataservice.title = rdf_value(d, DCT.title)
41
- dataservice.description = sanitize_html(d.value(DCT.description) or d.value(DCT.abstract))
42
+ dataservice.description = sanitize_html(
43
+ default_lang_value(d, DCT.description) or default_lang_value(d, DCT.abstract)
44
+ )
42
45
 
43
46
  dataservice.base_api_url = url_from_rdf(d, DCAT.endpointURL)
44
47
 
udata/core/dataset/rdf.py CHANGED
@@ -40,6 +40,7 @@ from udata.rdf import (
40
40
  TAG_TO_EU_HVD_CATEGORIES,
41
41
  contact_points_from_rdf,
42
42
  contact_points_to_rdf,
43
+ default_lang_value,
43
44
  namespace_manager,
44
45
  rdf_unique_values,
45
46
  rdf_value,
@@ -656,7 +657,7 @@ def resource_from_rdf(graph_or_distrib, dataset=None, is_additionnal=False):
656
657
  resource.filetype = "remote"
657
658
  resource.title = title_from_rdf(distrib, url)
658
659
  resource.url = url
659
- resource.description = sanitize_html(distrib.value(DCT.description))
660
+ resource.description = sanitize_html(default_lang_value(distrib, DCT.description))
660
661
  resource.filesize = rdf_value(distrib, DCAT.byteSize)
661
662
  resource.mime = mime_from_rdf(distrib)
662
663
  resource.format = format_from_rdf(distrib)
@@ -731,7 +732,7 @@ def dataset_from_rdf(graph: Graph, dataset=None, node=None, remote_url_prefix: s
731
732
  raise HarvestSkipException("missing title on dataset")
732
733
 
733
734
  # Support dct:abstract if dct:description is missing (sometimes used instead)
734
- description = d.value(DCT.description) or d.value(DCT.abstract)
735
+ description = default_lang_value(d, DCT.description) or default_lang_value(d, DCT.abstract)
735
736
  dataset.description = sanitize_html(description)
736
737
  dataset.frequency = frequency_from_rdf(d.value(DCT.accrualPeriodicity)) or dataset.frequency
737
738
  roles = [ # Imbricated list of contact points for each role
udata/rdf.py CHANGED
@@ -239,11 +239,28 @@ def rdf_unique_values(resource, predicate, parse_label=False) -> set[str]:
239
239
 
240
240
 
241
241
  def rdf_value(obj, predicate, default=None, parse_label=False):
242
- """Serialize the value for a predicate on a RdfResource"""
243
- value = obj.value(predicate)
242
+ """
243
+ Serialize the value for a predicate on a RdfResource,
244
+ expecting one value only or (at most) one per language for Literals.
245
+ """
246
+ value = default_lang_value(obj, predicate)
244
247
  return serialize_value(value, parse_label=parse_label) if value else default
245
248
 
246
249
 
250
+ def default_lang_value(obj, predicate):
251
+ """
252
+ Return the value with the default language if multiple Literal values exist in different languages.
253
+ """
254
+ candidate_values = list(obj.objects(predicate))
255
+ if not candidate_values:
256
+ return None
257
+ for val in candidate_values:
258
+ if isinstance(val, Literal) and val.language == current_app.config["DEFAULT_LANGUAGE"]:
259
+ return val
260
+ # Defaulting to the first value found
261
+ return candidate_values[0]
262
+
263
+
247
264
  class HTMLDetector(HTMLParser):
248
265
  def __init__(self, *args, **kwargs):
249
266
  HTMLParser.__init__(self, *args, **kwargs)