Skip to content

Commit 23ec20c

Browse files
authored
Merge branch 'refactor/423-implement-public-api' into refactor/423-implement-public-api+docs
2 parents e9d010f + cd6e3d5 commit 23ec20c

15 files changed

Lines changed: 2278 additions & 398 deletions

poetry.lock

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ flake8 = "poetry run flake8 ./test/ ./src/ --count --select=E9,F63,F7,F82 --stat
110110

111111

112112
[tool.pytest.ini_options]
113+
minversion = "6.0"
113114
norecursedirs = "docs/*"
115+
xfail_strict = true
114116
testpaths = [
115117
"test"
116118
]

src/hermes/model/api.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from hermes.model.types import ld_dict, ld_list
1+
from hermes.model.types import ld_dict
22

33
from hermes.model.types.ld_context import ALL_CONTEXTS
44

@@ -8,15 +8,3 @@ class SoftwareMetadata(ld_dict):
88
def __init__(self, data: dict = None, extra_vocabs: dict[str, str] = None) -> None:
99
ctx = ALL_CONTEXTS + [{**extra_vocabs}] if extra_vocabs is not None else ALL_CONTEXTS
1010
super().__init__([ld_dict.from_dict(data, context=ctx).data_dict if data else {}], context=ctx)
11-
12-
def add(self, key, value):
13-
if key not in self:
14-
self[key] = value
15-
return
16-
if isinstance(val := self[key], ld_list):
17-
val.append(value)
18-
else:
19-
temp = ld_list([{"@list": []}], parent=self, key=self.ld_proc.expand_iri(self.active_ctx, key),
20-
context=self.context)
21-
temp.extend([val, value])
22-
self[key] = temp

src/hermes/model/types/__init__.py

Lines changed: 12 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,75 +3,29 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55
# SPDX-FileContributor: Michael Meinel
6-
7-
from datetime import date, time, datetime
6+
# SPDX-FileContributor: Michael Fritzsche
87

98
from .ld_container import ld_container
10-
from .ld_list import ld_list
119
from .ld_dict import ld_dict
12-
from .ld_context import iri_map
10+
from .ld_list import ld_list
1311
from .pyld_util import JsonLdProcessor
1412

1513

1614
_TYPEMAP = [
17-
# Conversion routines for ld_container
18-
(
19-
lambda c: isinstance(c, ld_container),
20-
{
21-
"ld_container": lambda c, **_: c,
22-
"json": lambda c, **_: c.compact(),
23-
"expanded_json": lambda c, **_: c.ld_value,
24-
},
25-
),
15+
# Conversion routine for ld_container
16+
(lambda c: isinstance(c, ld_container), {"ld_container": lambda c, **_: c}),
2617

2718
# Wrap item from ld_dict in ld_list
28-
(ld_list.is_ld_list, dict(ld_container=ld_list)),
29-
(
30-
lambda c: isinstance(c, list) and all(isinstance(item, dict) for item in c),
31-
dict(ld_container=lambda c, **kw: ld_list([{"@list": c}], **kw))
32-
),
19+
(ld_list.is_ld_list, {"ld_container": ld_list}),
20+
(lambda c: isinstance(c, list), {"ld_container": ld_list}),
3321

3422
# pythonize items from lists (expanded set is already handled above)
35-
(ld_container.is_json_id, dict(python=lambda c, **_: c["@id"])),
36-
(ld_container.is_typed_json_value, dict(python=ld_container.typed_ld_to_py)),
37-
(ld_container.is_json_value, dict(python=lambda c, **_: c["@value"])),
38-
(ld_list.is_container, dict(ld_container=lambda c, **kw: ld_list([c], **kw))),
39-
(ld_dict.is_json_dict, dict(ld_container=lambda c, **kw: ld_dict([c], **kw))),
40-
41-
# Convert internal data types to expanded_json
42-
(lambda c: ld_container.is_json_id(c) or ld_container.is_json_value(c), dict(expanded_json=lambda c, **_: [c])),
43-
(ld_dict.is_json_dict, dict(expanded_json=lambda c, **kw: ld_dict.from_dict(c, **kw).ld_value)),
44-
(ld_dict.is_ld_dict, dict(expanded_json=lambda c, **kw: ld_dict.from_dict(c[0], **kw).ld_value)),
45-
(
46-
ld_list.is_container,
47-
dict(
48-
expanded_json=lambda c, **kw: ld_list.from_list(
49-
ld_list([c]).item_list, container=ld_list([c]).container, **kw
50-
).ld_value
51-
),
52-
),
53-
(
54-
ld_list.is_ld_list,
55-
dict(
56-
expanded_json=lambda c, **kw: ld_list.from_list(
57-
ld_list(c).item_list, container=ld_list(c).container, **kw
58-
).ld_value
59-
),
60-
),
61-
(lambda c: isinstance(c, list), dict(expanded_json=lambda c, **kw: ld_list.from_list(c, **kw).ld_value)),
62-
(lambda v: isinstance(v, (int, float, str, bool)), dict(expanded_json=lambda v, **_: [{"@value": v}])),
63-
(
64-
lambda v: isinstance(v, datetime),
65-
dict(expanded_json=lambda v, **_: [{"@value": v.isoformat(), "@type": iri_map["schema:DateTime"]}]),
66-
),
67-
(
68-
lambda v: isinstance(v, date),
69-
dict(expanded_json=lambda v, **_: [{"@value": v.isoformat(), "@type": iri_map["schema:Date"]}]),
70-
),
71-
(
72-
lambda v: isinstance(v, time),
73-
dict(expanded_json=lambda v, **_: [{"@value": v.isoformat(), "@type": iri_map["schema:Time"]}]),
74-
),
23+
(ld_container.is_json_id, {"python": lambda c, **_: c["@id"]}),
24+
(ld_container.is_typed_json_value, {"python": lambda c, **kw: ld_container.typed_ld_to_py([c], **kw)}),
25+
(ld_container.is_json_value, {"python": lambda c, **_: c["@value"]}),
26+
(ld_list.is_container, {"ld_container": lambda c, **kw: ld_list([c], **kw)}),
27+
(ld_dict.is_json_dict, {"ld_container": lambda c, **kw: ld_dict([c], **kw)}),
28+
(lambda v: isinstance(v, str), {"python": lambda v, parent, **_: parent.ld_proc.compact_iri(parent.active_ctx, v)}),
7529
]
7630

7731

0 commit comments

Comments
 (0)