JSONSchemata 0.0.0.dev28__tar.gz → 0.0.0.dev29__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 (63) hide show
  1. {jsonschemata-0.0.0.dev28/src/JSONSchemata.egg-info → jsonschemata-0.0.0.dev29}/PKG-INFO +3 -3
  2. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/pyproject.toml +3 -3
  3. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29/src/JSONSchemata.egg-info}/PKG-INFO +3 -3
  4. jsonschemata-0.0.0.dev29/src/JSONSchemata.egg-info/requires.txt +4 -0
  5. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/edit.py +31 -10
  6. jsonschemata-0.0.0.dev28/src/JSONSchemata.egg-info/requires.txt +0 -4
  7. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/LICENSE +0 -0
  8. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/MANIFEST.in +0 -0
  9. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/README.md +0 -0
  10. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/setup.cfg +0 -0
  11. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/JSONSchemata.egg-info/SOURCES.txt +0 -0
  12. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/JSONSchemata.egg-info/dependency_links.txt +0 -0
  13. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/JSONSchemata.egg-info/not-zip-safe +0 -0
  14. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/JSONSchemata.egg-info/top_level.txt +0 -0
  15. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/__init__.py +0 -0
  16. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/array/unique-strings.yaml +0 -0
  17. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/css-name.yaml +0 -0
  18. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/css.yaml +0 -0
  19. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/hex-string.yaml +0 -0
  20. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/hsl-array.yaml +0 -0
  21. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/hsl-string.yaml +0 -0
  22. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/hsla-array.yaml +0 -0
  23. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/rgb-array.yaml +0 -0
  24. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/rgb-string.yaml +0 -0
  25. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/color/rgba-array.yaml +0 -0
  26. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/config/github/form/body.yaml +0 -0
  27. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/config/github/label/description.yaml +0 -0
  28. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/date/yyyy-mm-dd.yaml +0 -0
  29. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/doi.yaml +0 -0
  30. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/email.yaml +0 -0
  31. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/github/node.yaml +0 -0
  32. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/github/rest.yaml +0 -0
  33. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/github/user.yaml +0 -0
  34. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/linkedin.yaml +0 -0
  35. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/orcid.yaml +0 -0
  36. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/researchgate.yaml +0 -0
  37. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/spdx-license.yaml +0 -0
  38. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/id/twitter.yaml +0 -0
  39. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/integer/non-negative.yaml +0 -0
  40. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/number/non-negative.yaml +0 -0
  41. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/path/dir-name.yaml +0 -0
  42. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/path/posix/absolute-from-cwd.yaml +0 -0
  43. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/string/nonempty.yaml +0 -0
  44. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/string/oneline.yaml +0 -0
  45. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/uri/mailto.yaml +0 -0
  46. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/README.md +0 -0
  47. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/ftp.yaml +0 -0
  48. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/github/user.yaml +0 -0
  49. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/http-explicit.yaml +0 -0
  50. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/http-ftp-sftp.yaml +0 -0
  51. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/http-implicit.yaml +0 -0
  52. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/https.yaml +0 -0
  53. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/linkedin/company.yaml +0 -0
  54. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/linkedin/person.yaml +0 -0
  55. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/linkedin/user.yaml +0 -0
  56. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/orcid/user.yaml +0 -0
  57. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/researchgate/institution.yaml +0 -0
  58. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/researchgate/lab.yaml +0 -0
  59. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/researchgate/person.yaml +0 -0
  60. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/researchgate/user.yaml +0 -0
  61. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/sftp.yaml +0 -0
  62. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/_data/url/twitter/user.yaml +0 -0
  63. {jsonschemata-0.0.0.dev28 → jsonschemata-0.0.0.dev29}/src/jsonschemata/registry.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: JSONSchemata
3
- Version: 0.0.0.dev28
3
+ Version: 0.0.0.dev29
4
4
  Requires-Python: >=3.10
5
5
  License-File: LICENSE
6
6
  Requires-Dist: referencing>=0.35.1
7
7
  Requires-Dist: PkgData==0.0.0.dev5
8
- Requires-Dist: PySerials==0.0.0.dev32
9
- Requires-Dist: PyLinks==0.0.0.dev42
8
+ Requires-Dist: PySerials==0.0.0.dev33
9
+ Requires-Dist: PyLinks==0.0.0.dev43
@@ -17,12 +17,12 @@ namespaces = true
17
17
  # ----------------------------------------- Project Metadata -------------------------------------
18
18
  #
19
19
  [project]
20
- version = "0.0.0.dev28"
20
+ version = "0.0.0.dev29"
21
21
  name = "JSONSchemata"
22
22
  dependencies = [
23
23
  "referencing >= 0.35.1",
24
24
  "PkgData == 0.0.0.dev5",
25
- "PySerials == 0.0.0.dev32",
26
- "PyLinks == 0.0.0.dev42",
25
+ "PySerials == 0.0.0.dev33",
26
+ "PyLinks == 0.0.0.dev43",
27
27
  ]
28
28
  requires-python = ">=3.10"
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: JSONSchemata
3
- Version: 0.0.0.dev28
3
+ Version: 0.0.0.dev29
4
4
  Requires-Python: >=3.10
5
5
  License-File: LICENSE
6
6
  Requires-Dist: referencing>=0.35.1
7
7
  Requires-Dist: PkgData==0.0.0.dev5
8
- Requires-Dist: PySerials==0.0.0.dev32
9
- Requires-Dist: PyLinks==0.0.0.dev42
8
+ Requires-Dist: PySerials==0.0.0.dev33
9
+ Requires-Dist: PyLinks==0.0.0.dev43
@@ -0,0 +1,4 @@
1
+ referencing>=0.35.1
2
+ PkgData==0.0.0.dev5
3
+ PySerials==0.0.0.dev33
4
+ PyLinks==0.0.0.dev43
@@ -1,3 +1,11 @@
1
+ from __future__ import annotations as _annotations
2
+
3
+ from typing import TYPE_CHECKING as _TYPE_CHECKING
4
+
5
+ if _TYPE_CHECKING:
6
+ from typing import Callable
7
+
8
+
1
9
  def required_last(schema: dict) -> dict:
2
10
  """Modify JSON schema to recursively put all 'required' fields at the end of the schema.
3
11
 
@@ -27,7 +35,13 @@ def required_last(schema: dict) -> dict:
27
35
  return schema
28
36
 
29
37
 
30
- def add_property(schema: dict, prop: str, value: dict) -> dict:
38
+ def add_property(
39
+ schema: dict,
40
+ prop: str,
41
+ value: dict,
42
+ conditioner: Callable[[dict, list], bool] | None = None,
43
+ current_path: list[str] | None = None,
44
+ ) -> dict:
31
45
  """Recursively add a property to a JSON schema.
32
46
 
33
47
  Parameters
@@ -38,21 +52,28 @@ def add_property(schema: dict, prop: str, value: dict) -> dict:
38
52
  The name of the property to add.
39
53
  value : Any
40
54
  The value of the property to add.
41
-
55
+ conditioner : Callable[[dict, list], bool], optional
56
+ A function that takes a schema and the path to the current schema as arguments
57
+ and returns a boolean indicating whether to add the property to the schema.
58
+ current_path : list[str], optional
59
+ The path to the current schema in the JSON schema hierarchy.
42
60
  Returns
43
61
  -------
44
62
  dict
45
63
  The modified schema.
46
64
  """
47
- if "properties" in schema:
48
- schema["properties"][prop] = value
49
- for subschema in schema["properties"].values():
50
- add_property(subschema, prop, value)
65
+ if current_path is None:
66
+ current_path = []
51
67
  for key in ["anyOf", "allOf", "oneOf", "prefixItems"]:
52
68
  if key in schema:
53
- for subschema in schema[key]:
54
- add_property(subschema, prop, value)
69
+ for idx, subschema in enumerate(schema[key]):
70
+ add_property(subschema, prop, value, conditioner, current_path + [f"{key}[{idx}]"])
55
71
  for key in ["if", "then", "else", "not", "items", "unevaluatedItems", "contains", "additionalProperties", "patternProperties", "unevaluatedProperties"]:
56
72
  if key in schema and isinstance(schema[key], dict):
57
- add_property(schema[key], prop, value)
58
- return schema
73
+ add_property(schema[key], prop, value, conditioner, current_path + [key])
74
+ if "properties" in schema:
75
+ for property_name, subschema in schema["properties"].items():
76
+ add_property(subschema, prop, value, conditioner, current_path + [f"properties[{property_name}]"])
77
+ if not conditioner or conditioner(schema, current_path):
78
+ schema["properties"][prop] = value
79
+ return schema
@@ -1,4 +0,0 @@
1
- referencing>=0.35.1
2
- PkgData==0.0.0.dev5
3
- PySerials==0.0.0.dev32
4
- PyLinks==0.0.0.dev42