JSONSchemata 0.0.0.dev55__tar.gz → 0.0.0.dev56__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.dev55/src/JSONSchemata.egg-info → jsonschemata-0.0.0.dev56}/PKG-INFO +4 -4
  2. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/pyproject.toml +3 -3
  3. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56/src/JSONSchemata.egg-info}/PKG-INFO +4 -4
  4. jsonschemata-0.0.0.dev56/src/JSONSchemata.egg-info/requires.txt +4 -0
  5. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/registry.py +53 -42
  6. jsonschemata-0.0.0.dev55/src/JSONSchemata.egg-info/requires.txt +0 -4
  7. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/LICENSE +0 -0
  8. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/MANIFEST.in +0 -0
  9. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/README.md +0 -0
  10. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/setup.cfg +0 -0
  11. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/JSONSchemata.egg-info/SOURCES.txt +0 -0
  12. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/JSONSchemata.egg-info/dependency_links.txt +0 -0
  13. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/JSONSchemata.egg-info/not-zip-safe +0 -0
  14. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/JSONSchemata.egg-info/top_level.txt +0 -0
  15. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/__init__.py +0 -0
  16. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/array/unique-strings.yaml +0 -0
  17. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/css-name.yaml +0 -0
  18. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/css.yaml +0 -0
  19. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/hex-string.yaml +0 -0
  20. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/hsl-array.yaml +0 -0
  21. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/hsl-string.yaml +0 -0
  22. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/hsla-array.yaml +0 -0
  23. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/rgb-array.yaml +0 -0
  24. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/rgb-string.yaml +0 -0
  25. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/color/rgba-array.yaml +0 -0
  26. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/config/github/form/body.yaml +0 -0
  27. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/config/github/label/description.yaml +0 -0
  28. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/date/yyyy-mm-dd.yaml +0 -0
  29. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/doi.yaml +0 -0
  30. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/email.yaml +0 -0
  31. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/github/node.yaml +0 -0
  32. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/github/rest.yaml +0 -0
  33. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/github/user.yaml +0 -0
  34. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/linkedin.yaml +0 -0
  35. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/orcid.yaml +0 -0
  36. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/researchgate.yaml +0 -0
  37. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/spdx-license.yaml +0 -0
  38. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/id/twitter.yaml +0 -0
  39. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/integer/non-negative.yaml +0 -0
  40. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/number/non-negative.yaml +0 -0
  41. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/path/dir-name.yaml +0 -0
  42. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/path/posix/absolute-from-cwd.yaml +0 -0
  43. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/string/nonempty.yaml +0 -0
  44. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/string/oneline.yaml +0 -0
  45. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/uri/mailto.yaml +0 -0
  46. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/README.md +0 -0
  47. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/ftp.yaml +0 -0
  48. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/github/user.yaml +0 -0
  49. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/http-explicit.yaml +0 -0
  50. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/http-ftp-sftp.yaml +0 -0
  51. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/http-implicit.yaml +0 -0
  52. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/https.yaml +0 -0
  53. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/linkedin/company.yaml +0 -0
  54. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/linkedin/person.yaml +0 -0
  55. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/linkedin/user.yaml +0 -0
  56. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/orcid/user.yaml +0 -0
  57. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/researchgate/institution.yaml +0 -0
  58. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/researchgate/lab.yaml +0 -0
  59. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/researchgate/person.yaml +0 -0
  60. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/researchgate/user.yaml +0 -0
  61. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/sftp.yaml +0 -0
  62. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/_data/url/twitter/user.yaml +0 -0
  63. {jsonschemata-0.0.0.dev55 → jsonschemata-0.0.0.dev56}/src/jsonschemata/edit.py +0 -0
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: JSONSchemata
3
- Version: 0.0.0.dev55
3
+ Version: 0.0.0.dev56
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.dev59
9
- Requires-Dist: PyLinks==0.0.0.dev69
8
+ Requires-Dist: PySerials==0.0.0.dev60
9
+ Requires-Dist: PyLinks==0.0.0.dev70
@@ -17,12 +17,12 @@ namespaces = true
17
17
  # ----------------------------------------- Project Metadata -------------------------------------
18
18
  #
19
19
  [project]
20
- version = "0.0.0.dev55"
20
+ version = "0.0.0.dev56"
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.dev59",
26
- "PyLinks == 0.0.0.dev69",
25
+ "PySerials == 0.0.0.dev60",
26
+ "PyLinks == 0.0.0.dev70",
27
27
  ]
28
28
  requires-python = ">=3.10"
@@ -1,9 +1,9 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: JSONSchemata
3
- Version: 0.0.0.dev55
3
+ Version: 0.0.0.dev56
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.dev59
9
- Requires-Dist: PyLinks==0.0.0.dev69
8
+ Requires-Dist: PySerials==0.0.0.dev60
9
+ Requires-Dist: PyLinks==0.0.0.dev70
@@ -0,0 +1,4 @@
1
+ referencing>=0.35.1
2
+ PkgData==0.0.0.dev5
3
+ PySerials==0.0.0.dev60
4
+ PyLinks==0.0.0.dev70
@@ -1,4 +1,7 @@
1
- from typing import Callable as _Callable
1
+ from __future__ import annotations as _annotations
2
+
3
+ from typing import TYPE_CHECKING as _TYPE_CHECKING
4
+
2
5
  import referencing as _referencing
3
6
  from referencing import jsonschema as _ref_jsonschema, retrieval as _ref_retrieval
4
7
  import pkgdata as _pkgdata
@@ -7,39 +10,46 @@ import pylinks as _pl
7
10
 
8
11
  from jsonschemata import edit as _edit
9
12
 
13
+ if _TYPE_CHECKING:
14
+ from typing import Callable, Sequence
15
+
10
16
 
11
17
  def make(
12
- dynamic: bool = False,
18
+ resources: Sequence[dict | _referencing.Resource | tuple[str, dict | _referencing.Resource]] | None = None,
19
+ default_specification: _referencing.Specification = _ref_jsonschema.DRAFT202012,
13
20
  crawl: bool = True,
14
- add_resources: list[dict | _referencing.Resource | tuple[str, dict | _referencing.Resource]] | None = None,
15
- add_resources_default_spec: _referencing.Specification = _ref_jsonschema.DRAFT202012,
16
- retrieval_func: _Callable[[str], str | _referencing.Resource] = None,
21
+ clean: bool = False,
22
+ dynamic: bool = True,
23
+ retrieval_function: Callable[[str], str | _referencing.Resource] = None,
17
24
  ) -> _referencing.Registry:
18
- """Create a registry of all JSON schemas.
25
+ """Create a JSON Schema registry.
19
26
 
20
27
  Parameters
21
28
  ----------
22
- dynamic : bool, default: False
23
- If True, any reference that is not found in the registry will be
24
- [dynamically retrieved](https://referencing.readthedocs.io/en/stable/intro/#dynamically-retrieving-resources)
25
- and [cached](https://referencing.readthedocs.io/en/stable/intro/#caching).
26
- The retrieval works as follows:
29
+ resources
30
+ A list of schema resources to add to the registry. Each resource can be a dictionary or
31
+ a [`referencing.Resource`](https://referencing.readthedocs.io/en/stable/api/#referencing.Resource)
32
+ object. If a schema does not have an "$id",
33
+ the ID must be provided along with the resource as a tuple of (ID, schema).
34
+ default_specification
35
+ The default specification to use when creating a resource from a dictionary.
36
+ The default is Draft 2020-12.
37
+ crawl
38
+ Pre-[crawl](https://referencing.readthedocs.io/en/stable/api/#referencing.Registry.crawl)
39
+ all resources so that the registry is
40
+ [fully ready](https://referencing.readthedocs.io/en/stable/schema-packages/).
41
+ clean
42
+ Only add the input resources (if any) to the registry,
43
+ without adding any of the predefined schemas.
44
+ dynamic
45
+ [Dynamically retrieve](https://referencing.readthedocs.io/en/stable/intro/#dynamically-retrieving-resources)
46
+ and [cache](https://referencing.readthedocs.io/en/stable/intro/#caching)
47
+ references that are not found in the registry.
48
+ If set to True, the default behaviour is as follows (see `retrieval_function` for customization):
27
49
  If the reference URI starts with "http" or "https", the URI is fetched using an HTTP GET request.
28
50
  Otherwise, the URI is assumed to be a local filepath,
29
51
  which can be either absolute or relative to the current working directory.
30
- You can also provide a custom retrieval function using the `retrieval_func` parameter.
31
- crawl : bool, default: True
32
- Pre [crawl](https://referencing.readthedocs.io/en/stable/api/#referencing.Registry.crawl)
33
- all resources so that the registry is
34
- [fully ready](https://referencing.readthedocs.io/en/stable/schema-packages/).
35
- add_resources: list[dict | referencing.Resource | tuple[str, dict | referencing.Resource]] | None, default: None
36
- A list of additional resources to add to the registry. Each resource can be a dictionary or
37
- a [`referencing.Resource`](https://referencing.readthedocs.io/en/stable/api/#referencing.Resource)
38
- object. If a resource does not have an "$id",
39
- the ID must be provided along with the resource as a tuple of (ID, resource).
40
- add_resources_default_spec: referencing.Specification, default: referencing.jsonschema.DRAFT202012
41
- The default specification to use when creating an additional resource from a dictionary.
42
- retrieval_func: Callable[[str], str | referencing.Resource], optional
52
+ retrieval_function: Callable[[str], str | referencing.Resource], optional
43
53
  A custom retrieval function to use when `dynamic` is True.
44
54
  The function should take a URI as input and return the reference schema.
45
55
  If you want the retrieval function to also cache the retrieved references,
@@ -48,7 +58,6 @@ def make(
48
58
  decorator, in which case the function must return the reference schema as a JSON string
49
59
  (cf. [Referencing Docs](https://referencing.readthedocs.io/en/stable/intro/#caching)).
50
60
  If the decorator is not used, the function must return the schema as a `referencing.Resource` instead.
51
- Note that this retrieval function will only be used when `dynamic` is set to `True`.
52
61
  Returns
53
62
  -------
54
63
  referencing.Registry
@@ -62,37 +71,39 @@ def make(
62
71
  return _pl.http.request(url=uri, response_type="str")
63
72
  return _ps.write.to_json_string(_ps.read.from_file(path=uri, toml_as_dict=True), sort_keys=False)
64
73
 
65
- schema_dir_path = _pkgdata.get_package_path_from_caller(top_level=True) / "_data"
66
- resources = []
67
- for schema_filepath in schema_dir_path.glob("**/*.yaml"):
68
- schema_dict = _ps.read.yaml_from_file(path=schema_filepath)
69
- _edit.required_last(schema_dict)
70
- schema = _referencing.Resource.from_contents(
71
- schema_dict, default_specification=_ref_jsonschema.DRAFT202012
72
- )
73
- resources.append(schema)
74
-
74
+ full_resources = []
75
75
  id_resources: list[tuple[str, _referencing.Resource]] = []
76
- for add_resource in add_resources or []:
76
+
77
+ if not clean:
78
+ schema_dir_path = _pkgdata.get_package_path_from_caller(top_level=True) / "_data"
79
+ for schema_filepath in schema_dir_path.glob("**/*.yaml"):
80
+ schema_dict = _ps.read.yaml_from_file(path=schema_filepath)
81
+ _edit.required_last(schema_dict)
82
+ schema = _referencing.Resource.from_contents(
83
+ schema_dict, default_specification=_ref_jsonschema.DRAFT202012
84
+ )
85
+ full_resources.append(schema)
86
+ for add_resource in resources or []:
77
87
  resource_id = None
78
88
  if isinstance(add_resource, dict):
79
89
  add_resource = _referencing.Resource.from_contents(
80
- add_resource, default_specification=add_resources_default_spec
90
+ add_resource, default_specification=default_specification
81
91
  )
82
- elif isinstance(add_resource, tuple):
92
+ elif isinstance(add_resource, (list, tuple)):
83
93
  resource_id, resource_dict = add_resource
84
94
  add_resource = _referencing.Resource.from_contents(
85
- resource_dict, default_specification=add_resources_default_spec,
95
+ resource_dict, default_specification=default_specification,
86
96
  )
87
97
  if resource_id:
88
98
  id_resources.append((resource_id, add_resource))
89
99
  else:
90
- resources.append(add_resource)
100
+ full_resources.append(add_resource)
91
101
 
92
102
  registry = _referencing.Registry(
93
- retrieve=retrieval_func or retrieve_url
103
+ retrieve=retrieval_function or retrieve_url
94
104
  ) if dynamic else _referencing.Registry()
95
- registry = resources @ registry
105
+ if full_resources:
106
+ registry = full_resources @ registry
96
107
  if id_resources:
97
108
  registry = registry.with_resources(id_resources)
98
109
  if crawl:
@@ -1,4 +0,0 @@
1
- referencing>=0.35.1
2
- PkgData==0.0.0.dev5
3
- PySerials==0.0.0.dev59
4
- PyLinks==0.0.0.dev69