oarepo-runtime 1.5.58__py3-none-any.whl → 1.5.60__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.
- oarepo_runtime/datastreams/asynchronous.py +1 -1
- oarepo_runtime/datastreams/datastreams.py +13 -4
- oarepo_runtime/datastreams/semi_asynchronous.py +1 -1
- oarepo_runtime/records/systemfields/selectors.py +67 -2
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/METADATA +1 -1
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/RECORD +10 -10
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/LICENSE +0 -0
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/WHEEL +0 -0
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-1.5.58.dist-info → oarepo_runtime-1.5.60.dist-info}/top_level.txt +0 -0
@@ -178,7 +178,7 @@ def run_datastream_processor(batch: Dict, *, processor: JSONObject, identity, ca
|
|
178
178
|
{
|
179
179
|
"batch": deserialized_batch.json,
|
180
180
|
"identity": serialize_identity(identity),
|
181
|
-
"callback": f"{processor_signature.kind}_error",
|
181
|
+
"callback": f"{processor_signature.kind.value}_error",
|
182
182
|
"exception": err.json,
|
183
183
|
},
|
184
184
|
)
|
@@ -25,11 +25,20 @@ class DataStreamChain(abc.ABC):
|
|
25
25
|
def finish(self, callback: Union[DataStreamCallback, Any]):
|
26
26
|
pass
|
27
27
|
|
28
|
+
try:
|
29
|
+
from enum import StrEnum
|
28
30
|
|
29
|
-
class SignatureKind(
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
class SignatureKind(StrEnum):
|
32
|
+
READER = "reader"
|
33
|
+
TRANSFORMER = "transformer"
|
34
|
+
WRITER = "writer"
|
35
|
+
|
36
|
+
except ImportError:
|
37
|
+
|
38
|
+
class SignatureKind(str, Enum):
|
39
|
+
READER = "reader"
|
40
|
+
TRANSFORMER = "transformer"
|
41
|
+
WRITER = "writer"
|
33
42
|
|
34
43
|
|
35
44
|
@dataclasses.dataclass
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Any, List
|
1
|
+
from typing import Any, Callable, List
|
2
2
|
|
3
3
|
|
4
4
|
class Selector:
|
@@ -25,6 +25,71 @@ class FirstItemSelector(PathSelector):
|
|
25
25
|
return []
|
26
26
|
|
27
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
|
+
|
28
93
|
def getter(data, path: List):
|
29
94
|
if len(path) == 0:
|
30
95
|
if isinstance(data, list):
|
@@ -36,4 +101,4 @@ def getter(data, path: List):
|
|
36
101
|
yield from getter(data[path[0]], path[1:])
|
37
102
|
elif isinstance(data, list):
|
38
103
|
for item in data:
|
39
|
-
yield from getter(item, path)
|
104
|
+
yield from getter(item, path)
|
@@ -14,14 +14,14 @@ oarepo_runtime/cli/fixtures.py,sha256=l6zHpz1adjotrbFy_wcN2TOL8x20i-1jbQmaoEEo-U
|
|
14
14
|
oarepo_runtime/cli/index.py,sha256=2dZvXtrph527YIgFTCQ8dIVsza-bZou9HBBzYRWAPTY,8243
|
15
15
|
oarepo_runtime/cli/validate.py,sha256=HpSvHQCGHlrdgdpKix9cIlzlBoJEiT1vACZdMnOUGEY,2827
|
16
16
|
oarepo_runtime/datastreams/__init__.py,sha256=_i52Ek9J8DMARST0ejZAZPzUKm55xrrlKlCSO7dl6y4,1008
|
17
|
-
oarepo_runtime/datastreams/asynchronous.py,sha256=
|
17
|
+
oarepo_runtime/datastreams/asynchronous.py,sha256=JwT-Hx6P7KwV0vSJlxX6kLSIX5vtsekVsA2p_hZpJ_U,7402
|
18
18
|
oarepo_runtime/datastreams/catalogue.py,sha256=D6leq-FPT3RP3SniEAXPm66v3q8ZdQnaUYJ5XM0dIFY,5021
|
19
|
-
oarepo_runtime/datastreams/datastreams.py,sha256=
|
19
|
+
oarepo_runtime/datastreams/datastreams.py,sha256=N9XXwIaBTADkPhE-XG6uotMwd-8Kn0vEZOoeV2BnMGI,4679
|
20
20
|
oarepo_runtime/datastreams/errors.py,sha256=WyZLU53EdFJTLv6K2ooM_M6ISjLS-U1dDw6B7guOLSc,1540
|
21
21
|
oarepo_runtime/datastreams/ext.py,sha256=ivugdVMCqwugK-5SeX14a-dMq6VaTt7DM2wFU357tR4,1406
|
22
22
|
oarepo_runtime/datastreams/fixtures.py,sha256=LTzRLoS3hkdP7a7wX3fCNWplaxh0DQQjxGto3p1_Luk,8691
|
23
23
|
oarepo_runtime/datastreams/json.py,sha256=OAiaH93eqpH5qNQSPKKc8K-hXKAn5lB0PUKwwZFqJSw,153
|
24
|
-
oarepo_runtime/datastreams/semi_asynchronous.py,sha256=
|
24
|
+
oarepo_runtime/datastreams/semi_asynchronous.py,sha256=kNc6BBnV6oFoY9kHgf5l8fd1wibRfI0dwyzLtu4fmUA,2940
|
25
25
|
oarepo_runtime/datastreams/synchronous.py,sha256=t5lfnMkLqy3jK5zMl-nIuA0HlMPiHGjwCqZ8XQP-3GM,2595
|
26
26
|
oarepo_runtime/datastreams/transformers.py,sha256=q5KzHPl2kJg7HP1BtKJ7F_UMqg_7L1ZGDX0O7s8D6UI,521
|
27
27
|
oarepo_runtime/datastreams/types.py,sha256=KZjblc3T_UFFW7LrMDmiR8lqVf86V484LAHj6yg05EI,9908
|
@@ -62,7 +62,7 @@ oarepo_runtime/records/systemfields/icu.py,sha256=sSGAgi5WhsAY4cCBL7-7nMpvHAuctp
|
|
62
62
|
oarepo_runtime/records/systemfields/mapping.py,sha256=tXOK_jkdY1pOUO7_VfChfDNB8UTi21GUXaidpugTnO8,1017
|
63
63
|
oarepo_runtime/records/systemfields/owner.py,sha256=dYRVBinniW7ECHuSnTAjeN6x1KhhJtNR9vxmD1KswMs,3805
|
64
64
|
oarepo_runtime/records/systemfields/record_status.py,sha256=U3kem4-JkNsT17e0iAl3HIAZ2MvO5lY_0U757aZvTKE,935
|
65
|
-
oarepo_runtime/records/systemfields/selectors.py,sha256=
|
65
|
+
oarepo_runtime/records/systemfields/selectors.py,sha256=xQEMhmqiE1M466cMilVO85V2DkELbbM3Xa8oYSCli8o,2959
|
66
66
|
oarepo_runtime/records/systemfields/synthetic.py,sha256=UustvhzcDGuaNZLDeHbWwshoxQR-qRIuHDCct5RXmrI,4287
|
67
67
|
oarepo_runtime/resources/__init__.py,sha256=v8BGrOTu_FjKzd0eozV7Q4GoGxyfybsL2cI-tbP5Pys,185
|
68
68
|
oarepo_runtime/resources/file_resource.py,sha256=Ta3bFce7l0xwqkkOMOEu9mxbB8BbKj5HUHRHmidhnl8,414
|
@@ -119,9 +119,9 @@ oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
119
119
|
oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
|
120
120
|
oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
|
121
121
|
tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
122
|
-
oarepo_runtime-1.5.
|
123
|
-
oarepo_runtime-1.5.
|
124
|
-
oarepo_runtime-1.5.
|
125
|
-
oarepo_runtime-1.5.
|
126
|
-
oarepo_runtime-1.5.
|
127
|
-
oarepo_runtime-1.5.
|
122
|
+
oarepo_runtime-1.5.60.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
123
|
+
oarepo_runtime-1.5.60.dist-info/METADATA,sha256=8HAOuGW8hqgI2E1df2A-ux-WdXPlA5fMM7TFvok8hTY,4720
|
124
|
+
oarepo_runtime-1.5.60.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
125
|
+
oarepo_runtime-1.5.60.dist-info/entry_points.txt,sha256=QrlXAKuPDVBinaSh_v3yO9_Nb9ZNmJCJ0VFcCW-z0Jg,327
|
126
|
+
oarepo_runtime-1.5.60.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
|
127
|
+
oarepo_runtime-1.5.60.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|