Coverage for gws-app/gws/lib/metadata/core.py: 0%
56 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1import gws
2import gws.lib.intl
4from . import inspire
7class Props(gws.Props):
8 abstract: str
9 attribution: str
10 dateCreated: str
11 dateUpdated: str
12 keywords: list[str]
13 language: str
14 title: str
17def from_dict(d: dict) -> gws.Metadata:
18 return check(gws.Metadata(d))
21def from_args(**kwargs) -> gws.Metadata:
22 return from_dict(kwargs)
25def from_config(c: gws.Config) -> gws.Metadata:
26 return check(gws.Metadata(gws.u.to_dict(c)))
29def from_props(p: gws.Props) -> gws.Metadata:
30 return check(gws.Metadata(gws.u.to_dict(p)))
33def props(md: gws.Metadata) -> gws.Props:
34 return gws.Props(
35 abstract=md.abstract or '',
36 attribution=md.attribution.title if md.attribution else '',
37 dateCreated=md.dateCreated,
38 dateUpdated=md.dateUpdated,
39 keywords=md.keywords or [],
40 language=md.language or '',
41 title=md.title or '',
42 )
45_LIST_KEYS = [
46 p
47 for p, typ in gws.Metadata.__annotations__.items()
48 if 'list' in repr(typ).lower()
49]
52def set_value(md: gws.Metadata, key: str, val) -> gws.Metadata:
53 setattr(md, key, val)
54 return check(md)
57def set_default(md: gws.Metadata, key: str, val) -> gws.Metadata:
58 if hasattr(md, key):
59 return md
60 setattr(md, key, val)
61 return check(md)
64def check(md: gws.Metadata) -> gws.Metadata:
65 for key in _LIST_KEYS:
66 val = md.get(key) or []
67 if not isinstance(val, list):
68 val = [val]
69 setattr(md, key, val)
71 p = md.language
72 if p:
73 md.language3 = gws.lib.intl.locale(p).language3
75 p = md.inspireTheme
76 if p:
77 md.inspireThemeName = inspire.theme_name(p, md.language)
78 md.inspireThemeNameEn = inspire.theme_name(p, 'en')
80 return md
83def merge(*mds, extend_lists=False) -> gws.Metadata:
84 d = {}
86 for md in mds:
87 if not md:
88 continue
89 for key, val in gws.u.to_dict(md).items():
90 if gws.u.is_empty(val):
91 continue
92 if extend_lists and key in _LIST_KEYS:
93 val = d.get(key, []) + val
94 d[key] = val
96 return from_dict(d)