oarepo-runtime 1.5.59__tar.gz → 1.5.60__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. {oarepo_runtime-1.5.59/oarepo_runtime.egg-info → oarepo_runtime-1.5.60}/PKG-INFO +1 -1
  2. oarepo_runtime-1.5.60/oarepo_runtime/records/systemfields/selectors.py +104 -0
  3. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60/oarepo_runtime.egg-info}/PKG-INFO +1 -1
  4. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/setup.cfg +1 -1
  5. oarepo_runtime-1.5.59/oarepo_runtime/records/systemfields/selectors.py +0 -39
  6. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/LICENSE +0 -0
  7. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/MANIFEST.in +0 -0
  8. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/README.md +0 -0
  9. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/__init__.py +0 -0
  10. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/__init__.py +0 -0
  11. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/assets.py +0 -0
  12. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/base.py +0 -0
  13. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/cf.py +0 -0
  14. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/check.py +0 -0
  15. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/configuration.py +0 -0
  16. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/fixtures.py +0 -0
  17. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/index.py +0 -0
  18. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/cli/validate.py +0 -0
  19. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/__init__.py +0 -0
  20. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/asynchronous.py +0 -0
  21. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/catalogue.py +0 -0
  22. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/datastreams.py +0 -0
  23. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/errors.py +0 -0
  24. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/ext.py +0 -0
  25. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/fixtures.py +0 -0
  26. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/json.py +0 -0
  27. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
  28. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
  29. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/excel.py +0 -0
  30. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/json.py +0 -0
  31. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/service.py +0 -0
  32. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
  33. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
  34. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/synchronous.py +0 -0
  35. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/transformers.py +0 -0
  36. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/types.py +0 -0
  37. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/utils.py +0 -0
  38. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
  39. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
  40. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
  41. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/service.py +0 -0
  42. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/utils.py +0 -0
  43. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
  44. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
  45. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/ext.py +0 -0
  46. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/ext_config.py +0 -0
  47. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/i18n/__init__.py +0 -0
  48. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/info/__init__.py +0 -0
  49. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/info/views.py +0 -0
  50. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/profile.py +0 -0
  51. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/proxies.py +0 -0
  52. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/__init__.py +0 -0
  53. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/dumpers/__init__.py +0 -0
  54. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
  55. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
  56. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
  57. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
  58. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/owners/__init__.py +0 -0
  59. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/owners/registry.py +0 -0
  60. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/relations/__init__.py +0 -0
  61. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/relations/base.py +0 -0
  62. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/relations/internal.py +0 -0
  63. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/relations/lookup.py +0 -0
  64. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/relations/pid_relation.py +0 -0
  65. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/__init__.py +0 -0
  66. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
  67. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
  68. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/icu.py +0 -0
  69. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/mapping.py +0 -0
  70. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/owner.py +0 -0
  71. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/record_status.py +0 -0
  72. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
  73. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/resources/__init__.py +0 -0
  74. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/resources/file_resource.py +0 -0
  75. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
  76. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/__init__.py +0 -0
  77. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/components.py +0 -0
  78. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/config/__init__.py +0 -0
  79. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/config/permissions_presets.py +0 -0
  80. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/config/service.py +0 -0
  81. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
  82. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
  83. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/expansions/__init__.py +0 -0
  84. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
  85. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/expansions/service.py +0 -0
  86. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/__init__.py +0 -0
  87. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/base.py +0 -0
  88. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/date.py +0 -0
  89. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/enum.py +0 -0
  90. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
  91. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/max_facet.py +0 -0
  92. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/nested_facet.py +0 -0
  93. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/params.py +0 -0
  94. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/facets/year_histogram.py +0 -0
  95. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/files/__init__.py +0 -0
  96. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/files/components.py +0 -0
  97. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/files/service.py +0 -0
  98. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/generators.py +0 -0
  99. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/permissions/__init__.py +0 -0
  100. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/permissions/generators.py +0 -0
  101. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/relations/__init__.py +0 -0
  102. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/relations/components.py +0 -0
  103. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/relations/errors.py +0 -0
  104. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/relations/mapping.py +0 -0
  105. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/results.py +0 -0
  106. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/__init__.py +0 -0
  107. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/cf.py +0 -0
  108. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/i18n.py +0 -0
  109. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
  110. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
  111. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/marshmallow.py +0 -0
  112. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/oneofschema.py +0 -0
  113. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/polymorphic.py +0 -0
  114. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/ui.py +0 -0
  115. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/schema/validation.py +0 -0
  116. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/services/search.py +0 -0
  117. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
  118. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
  119. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/default_translations.py +0 -0
  120. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
  121. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
  122. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
  123. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/translations/messages.pot +0 -0
  124. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/uow.py +0 -0
  125. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/utils/__init__.py +0 -0
  126. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/utils/functools.py +0 -0
  127. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime/utils/path.py +0 -0
  128. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime.egg-info/SOURCES.txt +0 -0
  129. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
  130. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime.egg-info/entry_points.txt +0 -0
  131. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime.egg-info/requires.txt +0 -0
  132. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/oarepo_runtime.egg-info/top_level.txt +0 -0
  133. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/pyproject.toml +0 -0
  134. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/setup.py +0 -0
  135. {oarepo_runtime-1.5.59 → oarepo_runtime-1.5.60}/tests/pkg_data/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.59
3
+ Version: 1.5.60
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -0,0 +1,104 @@
1
+ from typing import Any, Callable, List
2
+
3
+
4
+ class Selector:
5
+ def select(self, record) -> List[Any]:
6
+ return []
7
+
8
+
9
+ class PathSelector(Selector):
10
+ def __init__(self, *paths):
11
+ self.paths = [x.split(".") for x in paths]
12
+
13
+ def select(self, record):
14
+ ret = []
15
+ for path in self.paths:
16
+ for rec in getter(record, path):
17
+ ret.append(rec)
18
+ return ret
19
+
20
+
21
+ class FirstItemSelector(PathSelector):
22
+ def select(self, record):
23
+ for rec in super().select(record):
24
+ return [rec]
25
+ return []
26
+
27
+
28
+ class FilteredSelector(Selector):
29
+ """
30
+ Selector which filters output of another selector
31
+ Example:
32
+ FilteredSelector(PathSelector("metadata.creators", "metadata.contributors"),
33
+ filter=lambda x: x["nameType"] == "personal", projection="affiliations")
34
+
35
+ selects affiliations of creators with nameType personal from following data
36
+
37
+ data = {
38
+ "metadata": {
39
+ "creators": [
40
+ {"name": "hugo", "affiliations": ["uni1", "uni2"], "nameType": "personal"},
41
+ {"name": "uni3", "nameType": "organizational"},
42
+ ]
43
+ }
44
+ }
45
+ """
46
+
47
+ def __init__(
48
+ self,
49
+ selector: Selector,
50
+ filter: Callable[[Any], bool],
51
+ projection: Callable[[Any], Any] | str = None,
52
+ ):
53
+
54
+ self.selector = selector
55
+ self.filter = filter
56
+ self.projection = projection
57
+
58
+ def select(self, record):
59
+ selected = self.selector.select(record)
60
+ selected = filter(self.filter, selected)
61
+ if self.projection:
62
+ ret = []
63
+ for select_element in selected:
64
+ if isinstance(self.projection, str):
65
+ if isinstance(select_element, dict) and self.projection in select_element:
66
+ result = select_element[self.projection]
67
+ else:
68
+ result = []
69
+ else:
70
+ result = self.projection(select_element)
71
+ if isinstance(result, list):
72
+ ret += result
73
+ else:
74
+ ret.append(result)
75
+ else:
76
+ ret = list(selected)
77
+ return ret
78
+
79
+
80
+ class MultiSelector(Selector):
81
+ """Selector concatenating outputs of multiple selectors"""
82
+
83
+ def __init__(self, *selectors: Selector):
84
+ self.selectors = selectors
85
+
86
+ def select(self, record):
87
+ ret = []
88
+ for selector in self.selectors:
89
+ ret += selector.select(record)
90
+ return ret
91
+
92
+
93
+ def getter(data, path: List):
94
+ if len(path) == 0:
95
+ if isinstance(data, list):
96
+ yield from data
97
+ else:
98
+ yield data
99
+ elif isinstance(data, dict):
100
+ if path[0] in data:
101
+ yield from getter(data[path[0]], path[1:])
102
+ elif isinstance(data, list):
103
+ for item in data:
104
+ yield from getter(item, path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.59
3
+ Version: 1.5.60
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = oarepo-runtime
3
- version = 1.5.59
3
+ version = 1.5.60
4
4
  description = A set of runtime extensions of Invenio repository
5
5
  authors = Alzbeta Pokorna
6
6
  readme = README.md
@@ -1,39 +0,0 @@
1
- from typing import Any, List
2
-
3
-
4
- class Selector:
5
- def select(self, record) -> List[Any]:
6
- return []
7
-
8
-
9
- class PathSelector(Selector):
10
- def __init__(self, *paths):
11
- self.paths = [x.split(".") for x in paths]
12
-
13
- def select(self, record):
14
- ret = []
15
- for path in self.paths:
16
- for rec in getter(record, path):
17
- ret.append(rec)
18
- return ret
19
-
20
-
21
- class FirstItemSelector(PathSelector):
22
- def select(self, record):
23
- for rec in super().select(record):
24
- return [rec]
25
- return []
26
-
27
-
28
- def getter(data, path: List):
29
- if len(path) == 0:
30
- if isinstance(data, list):
31
- yield from data
32
- else:
33
- yield data
34
- elif isinstance(data, dict):
35
- if path[0] in data:
36
- yield from getter(data[path[0]], path[1:])
37
- elif isinstance(data, list):
38
- for item in data:
39
- yield from getter(item, path)
File without changes