Skip to content

Commit 5efaad2

Browse files
committed
reduce duplication
1 parent 79ade3d commit 5efaad2

File tree

1 file changed

+49
-61
lines changed

1 file changed

+49
-61
lines changed

services/catalog/src/simcore_service_catalog/services/services_api.py

Lines changed: 49 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,51 @@
3636
_logger = logging.getLogger(__name__)
3737

3838

39-
def _to_latest_get_schema(
39+
def _aggregate(
4040
service_db: ServiceWithHistoryDBGet,
4141
access_rights_db: list[ServiceAccessRightsAtDB],
4242
service_manifest: ServiceMetaDataPublished,
43-
) -> LatestServiceGet:
44-
45-
assert len(service_db.history) == 0 # nosec
46-
47-
return LatestServiceGet(
48-
key=service_db.key,
49-
version=service_db.version,
50-
name=service_db.name,
51-
thumbnail=HttpUrl(service_db.thumbnail) if service_db.thumbnail else None,
52-
icon=HttpUrl(service_db.icon) if service_db.icon else None,
53-
description=service_db.description,
54-
description_ui=service_db.description_ui,
55-
version_display=service_db.version_display,
56-
service_type=service_manifest.service_type,
57-
contact=service_manifest.contact,
58-
authors=service_manifest.authors,
59-
owner=(service_db.owner_email if service_db.owner_email else None),
60-
inputs=service_manifest.inputs or {},
61-
outputs=service_manifest.outputs or {},
62-
boot_options=service_manifest.boot_options,
63-
min_visible_inputs=service_manifest.min_visible_inputs,
64-
access_rights={
43+
) -> dict:
44+
return {
45+
"key": service_db.key,
46+
"version": service_db.version,
47+
"name": service_db.name,
48+
"thumbnail": HttpUrl(service_db.thumbnail) if service_db.thumbnail else None,
49+
"icon": HttpUrl(service_db.icon) if service_db.icon else None,
50+
"description": service_db.description,
51+
"description_ui": service_db.description_ui,
52+
"version_display": service_db.version_display,
53+
"service_type": service_manifest.service_type,
54+
"contact": service_manifest.contact,
55+
"authors": service_manifest.authors,
56+
"owner": (service_db.owner_email if service_db.owner_email else None),
57+
"inputs": service_manifest.inputs or {},
58+
"outputs": service_manifest.outputs or {},
59+
"boot_options": service_manifest.boot_options,
60+
"min_visible_inputs": service_manifest.min_visible_inputs,
61+
"access_rights": {
6562
a.gid: ServiceGroupAccessRightsV2.model_construct(
6663
execute=a.execute_access,
6764
write=a.write_access,
6865
)
6966
for a in access_rights_db
7067
},
71-
classifiers=service_db.classifiers,
72-
quality=service_db.quality,
68+
"classifiers": service_db.classifiers,
69+
"quality": service_db.quality,
7370
# NOTE: History section is removed
71+
}
72+
73+
74+
def _to_latest_get_schema(
75+
service_db: ServiceWithHistoryDBGet,
76+
access_rights_db: list[ServiceAccessRightsAtDB],
77+
service_manifest: ServiceMetaDataPublished,
78+
) -> LatestServiceGet:
79+
80+
assert len(service_db.history) == 0 # nosec
81+
82+
return LatestServiceGet.model_validate(
83+
_aggregate(service_db, access_rights_db, service_manifest)
7484
)
7585

7686

@@ -82,42 +92,20 @@ def _to_get_schema(
8292
) -> ServiceGetV2:
8393
compatibility_map = compatibility_map or {}
8494

85-
return ServiceGetV2(
86-
key=service_db.key,
87-
version=service_db.version,
88-
name=service_db.name,
89-
thumbnail=HttpUrl(service_db.thumbnail) if service_db.thumbnail else None,
90-
icon=HttpUrl(service_db.icon) if service_db.icon else None,
91-
description=service_db.description,
92-
description_ui=service_db.description_ui,
93-
version_display=service_db.version_display,
94-
service_type=service_manifest.service_type,
95-
contact=service_manifest.contact,
96-
authors=service_manifest.authors,
97-
owner=(service_db.owner_email if service_db.owner_email else None),
98-
inputs=service_manifest.inputs or {},
99-
outputs=service_manifest.outputs or {},
100-
boot_options=service_manifest.boot_options,
101-
min_visible_inputs=service_manifest.min_visible_inputs,
102-
access_rights={
103-
a.gid: ServiceGroupAccessRightsV2.model_construct(
104-
execute=a.execute_access,
105-
write=a.write_access,
106-
)
107-
for a in access_rights_db
108-
},
109-
classifiers=service_db.classifiers,
110-
quality=service_db.quality,
111-
history=[
112-
ServiceRelease.model_construct(
113-
version=h.version,
114-
version_display=h.version_display,
115-
released=h.created,
116-
retired=h.deprecated,
117-
compatibility=compatibility_map.get(h.version),
118-
)
119-
for h in service_db.history
120-
],
95+
return ServiceGetV2.model_validate(
96+
{
97+
**_aggregate(service_db, access_rights_db, service_manifest),
98+
"history": [
99+
ServiceRelease.model_construct(
100+
version=h.version,
101+
version_display=h.version_display,
102+
released=h.created,
103+
retired=h.deprecated,
104+
compatibility=compatibility_map.get(h.version),
105+
)
106+
for h in service_db.history
107+
],
108+
}
121109
)
122110

123111

0 commit comments

Comments
 (0)