shacl2code 0.0.23__tar.gz → 0.0.24__tar.gz

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.
Files changed (126) hide show
  1. {shacl2code-0.0.23 → shacl2code-0.0.24}/PKG-INFO +1 -1
  2. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/python.j2 +14 -4
  3. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/model.py +32 -18
  4. shacl2code-0.0.24/src/shacl2code/version.py +1 -0
  5. {shacl2code-0.0.23 → shacl2code-0.0.24}/testfixtures/testfixtures/jsonvalidation.py +136 -136
  6. {shacl2code-0.0.23 → shacl2code-0.0.24}/testfixtures/testfixtures/timetests.py +53 -52
  7. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/model/test-context.json +4 -0
  8. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/model/test.ttl +14 -0
  9. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/roundtrip.json +2 -1
  10. shacl2code-0.0.23/src/shacl2code/version.py +0 -1
  11. shacl2code-0.0.23/testfixtures/testfixtures/utils.py +0 -18
  12. {shacl2code-0.0.23 → shacl2code-0.0.24}/.flake8 +0 -0
  13. {shacl2code-0.0.23 → shacl2code-0.0.24}/.github/workflows/coverage-generate.yaml +0 -0
  14. {shacl2code-0.0.23 → shacl2code-0.0.24}/.github/workflows/coverage-report.yaml +0 -0
  15. {shacl2code-0.0.23 → shacl2code-0.0.24}/.github/workflows/publish.yaml +0 -0
  16. {shacl2code-0.0.23 → shacl2code-0.0.24}/.github/workflows/scorecard.yml +0 -0
  17. {shacl2code-0.0.23 → shacl2code-0.0.24}/.github/workflows/test.yaml +0 -0
  18. {shacl2code-0.0.23 → shacl2code-0.0.24}/.gitignore +0 -0
  19. {shacl2code-0.0.23 → shacl2code-0.0.24}/LICENSE +0 -0
  20. {shacl2code-0.0.23 → shacl2code-0.0.24}/README.md +0 -0
  21. {shacl2code-0.0.23 → shacl2code-0.0.24}/SECURITY.md +0 -0
  22. {shacl2code-0.0.23 → shacl2code-0.0.24}/pyproject.toml +0 -0
  23. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/__init__.py +0 -0
  24. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/__main__.py +0 -0
  25. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/context.py +0 -0
  26. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/__init__.py +0 -0
  27. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/common.py +0 -0
  28. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/cpp.py +0 -0
  29. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/golang.py +0 -0
  30. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/jinja.py +0 -0
  31. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/jsonschema.py +0 -0
  32. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/lang.py +0 -0
  33. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/python.py +0 -0
  34. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/sources/cpp/json.hpp +0 -0
  35. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/Doxyfile.j2 +0 -0
  36. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/Makefile.j2 +0 -0
  37. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/api.hpp.j2 +0 -0
  38. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/datetime.cpp.j2 +0 -0
  39. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/datetime.hpp.j2 +0 -0
  40. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/decode.cpp.j2 +0 -0
  41. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/decode.hpp.j2 +0 -0
  42. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/encode.cpp.j2 +0 -0
  43. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/encode.hpp.j2 +0 -0
  44. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/errorhandler.cpp.j2 +0 -0
  45. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/errorhandler.hpp.j2 +0 -0
  46. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/exceptions.hpp.j2 +0 -0
  47. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/extensible.cpp.j2 +0 -0
  48. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/extensible.hpp.j2 +0 -0
  49. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/header.j2 +0 -0
  50. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/jsonld-header.j2 +0 -0
  51. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/jsonld-source.j2 +0 -0
  52. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/link.cpp.j2 +0 -0
  53. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/link.hpp.j2 +0 -0
  54. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/namedindividual.cpp.j2 +0 -0
  55. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/namedindividual.hpp.j2 +0 -0
  56. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/object.cpp.j2 +0 -0
  57. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/object.hpp.j2 +0 -0
  58. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/objectpath.cpp.j2 +0 -0
  59. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/objectpath.hpp.j2 +0 -0
  60. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/objectset.cpp.j2 +0 -0
  61. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/objectset.hpp.j2 +0 -0
  62. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/pkgconfig.pc.j2 +0 -0
  63. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/prop.hpp.j2 +0 -0
  64. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/property.cpp.j2 +0 -0
  65. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/property.hpp.j2 +0 -0
  66. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/propertyvalue.cpp.j2 +0 -0
  67. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/propertyvalue.hpp.j2 +0 -0
  68. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/ref.hpp.j2 +0 -0
  69. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/refproperty.cpp.j2 +0 -0
  70. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/refproperty.hpp.j2 +0 -0
  71. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/source.j2 +0 -0
  72. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/type.cpp.j2 +0 -0
  73. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/type.hpp.j2 +0 -0
  74. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/util.cpp.j2 +0 -0
  75. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/util.hpp.j2 +0 -0
  76. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/validate.j2 +0 -0
  77. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/cpp/walk.hpp.j2 +0 -0
  78. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/classes.go.j2 +0 -0
  79. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/decode.go.j2 +0 -0
  80. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/encode.go.j2 +0 -0
  81. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/errorhandler.go.j2 +0 -0
  82. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/errors.go.j2 +0 -0
  83. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/extensible.go.j2 +0 -0
  84. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/linkstate.go.j2 +0 -0
  85. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/listproperty.go.j2 +0 -0
  86. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/optional.go.j2 +0 -0
  87. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/path.go.j2 +0 -0
  88. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/property.go.j2 +0 -0
  89. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/ref.go.j2 +0 -0
  90. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/reflistproperty.go.j2 +0 -0
  91. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/refproperty.go.j2 +0 -0
  92. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/shaclobject.go.j2 +0 -0
  93. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/shaclobjectset.go.j2 +0 -0
  94. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/shacltype.go.j2 +0 -0
  95. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/util.go.j2 +0 -0
  96. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/golang/validator.go.j2 +0 -0
  97. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/lang/templates/jsonschema.j2 +0 -0
  98. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/main.py +0 -0
  99. {shacl2code-0.0.23 → shacl2code-0.0.24}/src/shacl2code/urlcontext.py +0 -0
  100. {shacl2code-0.0.23 → shacl2code-0.0.24}/testfixtures/testfixtures/__init__.py +0 -0
  101. {shacl2code-0.0.23 → shacl2code-0.0.24}/testfixtures/testfixtures/httpserver.py +0 -0
  102. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/conftest.py +0 -0
  103. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/abort.j2 +0 -0
  104. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-id.j2 +0 -0
  105. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-node-kind.ttl +0 -0
  106. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-pattern-class.ttl +0 -0
  107. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-pattern-integer.ttl +0 -0
  108. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-prop-type.ttl +0 -0
  109. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/bad-reference.jsonld +0 -0
  110. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/context-url.j2 +0 -0
  111. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/context.j2 +0 -0
  112. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/links.json +0 -0
  113. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/missing-range.ttl +0 -0
  114. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/python/bad-object-type-inline.json +0 -0
  115. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/python/bad-object-type-ref-after.json +0 -0
  116. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/python/bad-object-type-ref-before.json +0 -0
  117. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/data/raw.j2 +0 -0
  118. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_cli.py +0 -0
  119. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_common_jinja.py +0 -0
  120. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_common_prefix.py +0 -0
  121. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_context.py +0 -0
  122. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_cpp.py +0 -0
  123. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_golang.py +0 -0
  124. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_jsonschema.py +0 -0
  125. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_model_source.py +0 -0
  126. {shacl2code-0.0.23 → shacl2code-0.0.24}/tests/test_python.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shacl2code
3
- Version: 0.0.23
3
+ Version: 0.0.24
4
4
  Summary: Convert SHACL model file to code bindings
5
5
  Project-URL: Homepage, https://github.com/JPEWdev/shacl2code
6
6
  Project-URL: Repository, https://github.com/JPEWdev/shacl2code.git
@@ -36,6 +36,7 @@ from typing import (
36
36
  TypeVar,
37
37
  Union,
38
38
  cast,
39
+ overload,
39
40
  )
40
41
 
41
42
 
@@ -616,7 +617,7 @@ def register(
616
617
 
617
618
  register_lock = threading.Lock()
618
619
  NAMED_INDIVIDUALS: Set[str] = set()
619
- ForeachT = TypeVar("ForeachT", bound="SHACLObject")
620
+ T_SHACLObject = TypeVar("T_SHACLObject", bound="SHACLObject")
620
621
 
621
622
 
622
623
  @functools.total_ordering
@@ -1279,9 +1280,18 @@ class SHACLObjectSet(object):
1279
1280
  for child in o.iter_objects(recursive=True, visited=visited):
1280
1281
  yield child
1281
1282
 
1283
+ @overload
1282
1284
  def foreach_type(
1283
- self, typ: Union[str, type[ForeachT]], *, match_subclass: bool = True
1284
- ) -> Iterable[ForeachT]:
1285
+ self, typ: str, *, match_subclass: bool = True
1286
+ ) -> Iterator[SHACLObject]: ...
1287
+ @overload
1288
+ def foreach_type(
1289
+ self, typ: Type[T_SHACLObject], *, match_subclass: bool = True
1290
+ ) -> Iterator[T_SHACLObject]: ...
1291
+
1292
+ def foreach_type(
1293
+ self, typ: Union[str, Type[T_SHACLObject]], *, match_subclass: bool = True
1294
+ ) -> Iterable[SHACLObject]:
1285
1295
  """
1286
1296
  Iterate over each object of a specified type (or subclass there of)
1287
1297
 
@@ -1301,7 +1311,7 @@ class SHACLObjectSet(object):
1301
1311
 
1302
1312
  for exact, o in self.obj_by_type[typ]:
1303
1313
  if match_subclass or exact:
1304
- yield cast(ForeachT, o)
1314
+ yield cast(T_SHACLObject, o)
1305
1315
 
1306
1316
  def merge(self, *objectsets) -> "SHACLObjectSet":
1307
1317
  """
@@ -5,7 +5,7 @@
5
5
  # SPDX-License-Identifier: MIT
6
6
 
7
7
  import typing
8
- from dataclasses import dataclass
8
+ from dataclasses import dataclass, field
9
9
 
10
10
  from rdflib import URIRef
11
11
  from rdflib.namespace import RDF, RDFS, OWL, SH, XSD, DefinedNamespace, Namespace
@@ -68,7 +68,7 @@ class Property:
68
68
  comment: str = ""
69
69
  max_count: int = None
70
70
  min_count: int = None
71
- enum_values: list = None
71
+ enum_values: list = field(default_factory=list)
72
72
  class_id: str = ""
73
73
  datatype: str = ""
74
74
  pattern: str = ""
@@ -206,24 +206,40 @@ class Model(object):
206
206
  c.is_abstract = True
207
207
  continue
208
208
 
209
- p = Property(
210
- varname=self.model.value(
211
- obj_prop,
212
- SH.name,
213
- default=self.get_compact_id(
214
- prop,
215
- fallback=remove_common_prefix(prop, cls_iri).lstrip("/"),
216
- ),
209
+ varname = self.model.value(
210
+ obj_prop,
211
+ SH.name,
212
+ default=self.get_compact_id(
213
+ prop,
214
+ fallback=remove_common_prefix(prop, cls_iri).lstrip("/"),
217
215
  ),
218
- path=str(prop),
219
- comment=str(self.model.value(prop, RDFS.comment, default="")),
220
- max_count=int_val(self.model.value(obj_prop, SH.maxCount)),
221
- min_count=int_val(self.model.value(obj_prop, SH.minCount)),
222
- deprecated=(prop, RDF.type, OWL.DeprecatedProperty) in self.model,
223
216
  )
224
217
 
218
+ for p in c.properties:
219
+ if p.path == str(prop):
220
+ break
221
+ else:
222
+ p = Property(
223
+ varname=varname,
224
+ path=str(prop),
225
+ comment=str(self.model.value(prop, RDFS.comment, default="")),
226
+ deprecated=(prop, RDF.type, OWL.DeprecatedProperty)
227
+ in self.model,
228
+ )
229
+ c.properties.append(p)
230
+
231
+ if varname < p.varname:
232
+ p.varname = varname
233
+
234
+ if (v := int_val(self.model.value(obj_prop, SH.maxCount))) is not None:
235
+ p.max_count = v
236
+
237
+ if (v := int_val(self.model.value(obj_prop, SH.minCount))) is not None:
238
+ p.min_count = v
239
+
225
240
  if in_list := self.model.value(obj_prop, SH["in"]):
226
- p.enum_values = sorted(tuple(self.model.items(in_list)))
241
+ enum_values = set(p.enum_values) | set(self.model.items(in_list))
242
+ p.enum_values = sorted(list(enum_values))
227
243
 
228
244
  if range_id := self.model.value(obj_prop, SH["class"]):
229
245
  if not set_prop_range(p, range_id):
@@ -252,8 +268,6 @@ class Model(object):
252
268
  )
253
269
  p.pattern = str(pattern)
254
270
 
255
- c.properties.append(p)
256
-
257
271
  c.properties.sort(key=lambda p: p.path)
258
272
 
259
273
  self.classes.append(c)
@@ -0,0 +1 @@
1
+ VERSION = "0.0.24"