ogc-na 0.3.51__py3-none-any.whl → 0.3.53__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 ogc-na might be problematic. Click here for more details.
- ogc/na/_version.py +2 -2
- ogc/na/annotate_schema.py +23 -9
- ogc/na/exceptions.py +6 -0
- ogc/na/ingest_json.py +2 -1
- ogc/na/update_vocabs.py +21 -2
- {ogc_na-0.3.51.dist-info → ogc_na-0.3.53.dist-info}/METADATA +1 -1
- {ogc_na-0.3.51.dist-info → ogc_na-0.3.53.dist-info}/RECORD +9 -8
- {ogc_na-0.3.51.dist-info → ogc_na-0.3.53.dist-info}/WHEEL +1 -1
- {ogc_na-0.3.51.dist-info → ogc_na-0.3.53.dist-info}/top_level.txt +0 -0
ogc/na/_version.py
CHANGED
ogc/na/annotate_schema.py
CHANGED
|
@@ -132,6 +132,7 @@ import jsonpointer
|
|
|
132
132
|
import jsonschema
|
|
133
133
|
import requests_cache
|
|
134
134
|
|
|
135
|
+
from ogc.na.exceptions import ContextLoadError, SchemaLoadError
|
|
135
136
|
from ogc.na.util import is_url, load_yaml, LRUCache, dump_yaml, \
|
|
136
137
|
merge_contexts, merge_dicts, dict_contains, JSON_LD_KEYWORDS
|
|
137
138
|
|
|
@@ -200,8 +201,11 @@ class SchemaResolver:
|
|
|
200
201
|
"""
|
|
201
202
|
contents = self._schema_cache.get(s)
|
|
202
203
|
if contents is None:
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
try:
|
|
205
|
+
contents = read_contents(s)[0]
|
|
206
|
+
self._schema_cache[s] = contents
|
|
207
|
+
except Exception as e:
|
|
208
|
+
raise SchemaLoadError(f'Error loading schema from schema source "{s}"') from e
|
|
205
209
|
return load_json_yaml(contents)
|
|
206
210
|
|
|
207
211
|
def resolve_ref(self, ref: str | Path, from_schema: ReferencedSchema | None = None) -> tuple[Path | str, str]:
|
|
@@ -257,7 +261,10 @@ class SchemaResolver:
|
|
|
257
261
|
if force_contents:
|
|
258
262
|
is_json = False
|
|
259
263
|
if isinstance(force_contents, str):
|
|
260
|
-
|
|
264
|
+
try:
|
|
265
|
+
contents = load_yaml(content=force_contents)
|
|
266
|
+
except Exception as e:
|
|
267
|
+
raise SchemaLoadError('Error loading schema from string contents') from e
|
|
261
268
|
else:
|
|
262
269
|
contents = force_contents
|
|
263
270
|
else:
|
|
@@ -394,13 +401,20 @@ def resolve_context(ctx: Path | str | dict | list, expand_uris=True) -> Resolved
|
|
|
394
401
|
def resolve_inner(inner_ctx, ctx_stack=None) -> ResolvedContext | None:
|
|
395
402
|
resolved = None
|
|
396
403
|
if isinstance(inner_ctx, Path) or (isinstance(inner_ctx, str) and not is_url(inner_ctx)):
|
|
397
|
-
|
|
404
|
+
try:
|
|
405
|
+
resolved = resolve_context(load_yaml(filename=ctx).get('@context'))
|
|
406
|
+
except Exception as e:
|
|
407
|
+
raise ContextLoadError(f'Error resolving context document in file "{ctx}"') from e
|
|
398
408
|
elif isinstance(inner_ctx, str):
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
409
|
+
try:
|
|
410
|
+
r = requests_session.get(ctx)
|
|
411
|
+
r.raise_for_status()
|
|
412
|
+
fetched = r.json().get('@context')
|
|
413
|
+
if fetched:
|
|
414
|
+
resolved = resolve_context(fetched)
|
|
415
|
+
except Exception as e:
|
|
416
|
+
raise ContextLoadError(f'Error resolving context document at URL "{ctx}"') from e
|
|
417
|
+
|
|
404
418
|
elif isinstance(inner_ctx, Sequence):
|
|
405
419
|
resolved_ctx = {}
|
|
406
420
|
inner_prefixes = {}
|
ogc/na/exceptions.py
ADDED
ogc/na/ingest_json.py
CHANGED
|
@@ -869,8 +869,9 @@ def _process_cmdln():
|
|
|
869
869
|
|
|
870
870
|
parser.add_argument(
|
|
871
871
|
'--transform-arg',
|
|
872
|
+
metavar='ARG=VALUE',
|
|
872
873
|
nargs='*',
|
|
873
|
-
help='Additional argument to pass to the jq transforms in the form
|
|
874
|
+
help='Additional argument to pass to the jq transforms in the form argument=value'
|
|
874
875
|
)
|
|
875
876
|
|
|
876
877
|
parser.add_argument(
|
ogc/na/update_vocabs.py
CHANGED
|
@@ -13,6 +13,16 @@ This script can be used as a library, or run directly from the cli;
|
|
|
13
13
|
please refer to the
|
|
14
14
|
[OGC NamingAuthority repository](https://github.com/opengeospatial/NamingAuthority)
|
|
15
15
|
for usage details on the latter.
|
|
16
|
+
|
|
17
|
+
## Defining the SPARQL graph URI
|
|
18
|
+
|
|
19
|
+
The graph URI that will be used for an RDF document when pushing the data to a SPARQL endpoint can
|
|
20
|
+
be defined by adding a `http://www.opengis.net/ogc-na#targetGraph` predicate anywhere
|
|
21
|
+
inside it, for example:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
[] <http://www.opengis.net/ogc-na#targetGraph> <https://example.com/target-graph> .
|
|
25
|
+
```
|
|
16
26
|
"""
|
|
17
27
|
|
|
18
28
|
from __future__ import annotations
|
|
@@ -26,7 +36,7 @@ from pathlib import Path
|
|
|
26
36
|
from typing import Union, Generator
|
|
27
37
|
|
|
28
38
|
import requests
|
|
29
|
-
from rdflib import Graph, RDF, SKOS
|
|
39
|
+
from rdflib import Graph, RDF, SKOS, URIRef
|
|
30
40
|
|
|
31
41
|
from ogc.na import util
|
|
32
42
|
from ogc.na.domain_config import DomainConfiguration, DomainConfigurationEntry
|
|
@@ -108,12 +118,21 @@ def get_graph_uri_for_vocab(g: Graph = None) -> Generator[str, None, None]:
|
|
|
108
118
|
"""
|
|
109
119
|
Find a target graph URI in a vocabulary [Graph][rdflib.Graph].
|
|
110
120
|
|
|
111
|
-
|
|
121
|
+
This function looks for any object of the http://www.opengis.net/ogc-na#targetGraph
|
|
122
|
+
predicate, and in its absence for a
|
|
112
123
|
[SKOS ConceptScheme's](https://www.w3.org/TR/2008/WD-skos-reference-20080829/skos.html#ConceptScheme).
|
|
113
124
|
|
|
125
|
+
The following can be included in a Turtle document to specify its graph:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
[] <http://www.opengis.net/ogc-na#targetGraph> <https://example.com/target/graph> .
|
|
129
|
+
```
|
|
130
|
+
|
|
114
131
|
:param g: the [Graph][rdflib.Graph] for which to find the target URI
|
|
115
132
|
:return: a [Node][rdflib.term.Node] generator
|
|
116
133
|
"""
|
|
134
|
+
for o in g.objects(predicate=URIRef('http://www.opengis.net/ogc-na#targetGraph')):
|
|
135
|
+
yield str(o)
|
|
117
136
|
for s in g.subjects(predicate=RDF.type, object=SKOS.ConceptScheme):
|
|
118
137
|
yield str(s)
|
|
119
138
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ogc_na
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.53
|
|
4
4
|
Summary: OGC Naming Authority tools
|
|
5
5
|
Author-email: Rob Atkinson <ratkinson@ogc.org>, Piotr Zaborowski <pzaborowski@ogc.org>, Alejandro Villar <avillar@ogc.org>
|
|
6
6
|
Project-URL: Homepage, https://github.com/opengeospatial/ogc-na-tools/
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
ogc/na/__init__.py,sha256=uzcNiJ3uKFNJ1HBfKxIwgAy2HMUFsLAe5RkrUg8ncac,464
|
|
2
|
-
ogc/na/_version.py,sha256=
|
|
3
|
-
ogc/na/annotate_schema.py,sha256=
|
|
2
|
+
ogc/na/_version.py,sha256=ms1ItKqACBjR1STKEmk5I4axWdIv0W7fX_8zXbtA0Cg,413
|
|
3
|
+
ogc/na/annotate_schema.py,sha256=1p-XZkIjzWaW1P1LYM093C8XYN2zhUpMlWbZ1n2N9cQ,42635
|
|
4
4
|
ogc/na/domain_config.py,sha256=ORzITa1rTrD1MQdpWYrIVW5SwSa9lJd3hnyHIxNgiIU,13947
|
|
5
5
|
ogc/na/download.py,sha256=2afrLyl4WsAlxkCgXsl47fs9mNKfDmhVpeT2iwNSoq0,3354
|
|
6
|
+
ogc/na/exceptions.py,sha256=cwvnq79ih90T9lfwJww0zOx_QwuICaUvlo3Mc8m8ouA,85
|
|
6
7
|
ogc/na/gsp.py,sha256=KGa2G9i8kPefYTHNPUDoXnNyF7Tiwt8K__Ew_Qa7eeg,6048
|
|
7
|
-
ogc/na/ingest_json.py,sha256=
|
|
8
|
+
ogc/na/ingest_json.py,sha256=OUA9IfSpBbwE6bNE2od64iMzdEg-Q4h5iyowgJsn2M4,35659
|
|
8
9
|
ogc/na/models.py,sha256=nGV8EALtXvmBtkUbu0FA4KOgwNUqQGWIDuMo7UGOKP8,652
|
|
9
10
|
ogc/na/profile.py,sha256=T7nesbm7azF2ijF60UenJnQQKjIgJlnJ3pUbGT5nYgM,16511
|
|
10
11
|
ogc/na/provenance.py,sha256=h7UtUb1wW_9MfEim0fjcqkHd0BYmpXqyE1ADzL9AH7I,5551
|
|
11
|
-
ogc/na/update_vocabs.py,sha256=
|
|
12
|
+
ogc/na/update_vocabs.py,sha256=m9Nd90Aplsm3m7cvNdiemPbnfq6Xq6rUDXGT1GBwDT4,18898
|
|
12
13
|
ogc/na/util.py,sha256=Ztju3g1YuguUDbk4n2RJfCrl_IIzNAj7linfy24T6VA,12067
|
|
13
14
|
ogc/na/validation.py,sha256=5xjHH55NZKM8HtUk8XgVzm8W5ZlZY00u_qsWfXK_8dM,3732
|
|
14
15
|
ogc/na/input_filters/__init__.py,sha256=AhE7n_yECwxFKwOM3Jc0ft96TtF5i_Z-fHrS4HYOjaE,1179
|
|
15
16
|
ogc/na/input_filters/csv.py,sha256=nFfB1XQF_QApcGGzMqEvzD_b3pBtCtsfUECsZ9UGE6s,2616
|
|
16
17
|
ogc/na/input_filters/xml.py,sha256=9qYjp_w5JLInFM48zB15IYH9eTafjp1Aqd_8kfuW3aA,2074
|
|
17
|
-
ogc_na-0.3.
|
|
18
|
-
ogc_na-0.3.
|
|
19
|
-
ogc_na-0.3.
|
|
20
|
-
ogc_na-0.3.
|
|
18
|
+
ogc_na-0.3.53.dist-info/METADATA,sha256=r7CUFV_8_TNhVFYmwbgVbGdFhMqiHzDLb4XsJXbB-Pg,3829
|
|
19
|
+
ogc_na-0.3.53.dist-info/WHEEL,sha256=5Mi1sN9lKoFv_gxcPtisEVrJZihrm_beibeg5R6xb4I,91
|
|
20
|
+
ogc_na-0.3.53.dist-info/top_level.txt,sha256=Kvy3KhzcIhNPT4_nZuJCmS946ptRr_MDyU4IIhZJhCY,4
|
|
21
|
+
ogc_na-0.3.53.dist-info/RECORD,,
|
|
File without changes
|