|
1 | 1 | """Conversion functions.""" |
2 | 2 |
|
3 | | -from typing import cast |
4 | | - |
5 | 3 | from renku_data_services.authz.models import Visibility |
6 | 4 | from renku_data_services.search.apispec import ( |
7 | 5 | Group as GroupApi, |
|
14 | 12 | UserOrGroup, |
15 | 13 | UserOrGroupOrProject, |
16 | 14 | ) |
| 15 | +from renku_data_services.search.apispec import ( |
| 16 | + SearchGroup as SearchGroupApi, |
| 17 | +) |
17 | 18 | from renku_data_services.search.apispec import ( |
18 | 19 | SearchProject as ProjectApi, |
19 | 20 | ) |
| 21 | +from renku_data_services.search.apispec import ( |
| 22 | + SearchUser as SearchUserApi, |
| 23 | +) |
20 | 24 | from renku_data_services.search.apispec import ( |
21 | 25 | User as UserApi, |
22 | 26 | ) |
@@ -49,50 +53,88 @@ def from_visibility(v: Visibility) -> VisibilityApi: |
49 | 53 | return VisibilityApi.private |
50 | 54 |
|
51 | 55 |
|
52 | | -def from_user(user: UserDocument) -> UserApi: |
| 56 | +def from_user(user: UserDocument) -> SearchUserApi: |
53 | 57 | """Creates an apispec user from a solr user document.""" |
54 | | - return UserApi( |
| 58 | + return SearchUserApi( |
55 | 59 | id=user.id, |
56 | 60 | slug=user.slug.value, |
57 | 61 | path=user.path, |
58 | 62 | firstName=user.firstName, |
59 | 63 | lastName=user.lastName, |
60 | 64 | score=user.score, |
| 65 | + project_count=None, |
| 66 | + data_connector_count=None, |
61 | 67 | ) |
62 | 68 |
|
63 | 69 |
|
64 | | -def from_group(group: GroupDocument) -> GroupApi: |
| 70 | +def from_group(group: GroupDocument) -> SearchGroupApi: |
65 | 71 | """Creates a apispec group from a solr group document.""" |
66 | | - return GroupApi( |
| 72 | + return SearchGroupApi( |
67 | 73 | id=str(group.id), |
68 | 74 | name=group.name, |
69 | 75 | slug=group.slug.value, |
70 | 76 | path=group.path, |
71 | 77 | description=group.description, |
72 | 78 | score=group.score, |
| 79 | + project_count=None, |
| 80 | + data_connector_count=None, |
73 | 81 | ) |
74 | 82 |
|
75 | 83 |
|
76 | 84 | def __creator_details(e: ProjectDocument | DataConnectorDocument) -> UserApi | None: |
77 | 85 | if e.creatorDetails is not None and e.creatorDetails.docs != []: |
78 | | - return from_user(UserDocument.from_dict(e.creatorDetails.docs[0])) |
| 86 | + return __user_to_base(UserDocument.from_dict(e.creatorDetails.docs[0])) |
79 | 87 | else: |
80 | 88 | return None |
81 | 89 |
|
82 | 90 |
|
| 91 | +def __user_to_base(user: UserDocument) -> UserApi: |
| 92 | + """Creates a base User (not SearchUser) from a solr user document.""" |
| 93 | + return UserApi( |
| 94 | + id=user.id, |
| 95 | + slug=user.slug.value, |
| 96 | + path=user.path, |
| 97 | + firstName=user.firstName, |
| 98 | + lastName=user.lastName, |
| 99 | + score=user.score, |
| 100 | + ) |
| 101 | + |
| 102 | + |
| 103 | +def __group_to_base(group: GroupDocument) -> GroupApi: |
| 104 | + """Creates a base Group (not SearchGroup) from a solr group document.""" |
| 105 | + return GroupApi( |
| 106 | + id=str(group.id), |
| 107 | + name=group.name, |
| 108 | + slug=group.slug.value, |
| 109 | + path=group.path, |
| 110 | + description=group.description, |
| 111 | + score=group.score, |
| 112 | + ) |
| 113 | + |
| 114 | + |
83 | 115 | def __namespace_details(d: ProjectDocument) -> UserOrGroup | None: |
84 | 116 | if d.namespaceDetails is not None and d.namespaceDetails.docs != []: |
85 | 117 | e = EntityDocReader.from_dict(d.namespaceDetails.docs[0]) |
86 | 118 | if e is not None: |
87 | | - return UserOrGroup(cast(UserApi | GroupApi, from_entity(e).root)) |
| 119 | + match e: |
| 120 | + case UserDocument() as user_doc: |
| 121 | + return UserOrGroup(__user_to_base(user_doc)) |
| 122 | + case GroupDocument() as group_doc: |
| 123 | + return UserOrGroup(__group_to_base(group_doc)) |
88 | 124 | return None |
89 | 125 |
|
90 | 126 |
|
91 | 127 | def __namespace_details_dc(d: DataConnectorDocument) -> UserOrGroupOrProject | None: |
92 | 128 | if d.namespaceDetails is not None and d.namespaceDetails.docs != []: |
93 | 129 | e = EntityDocReader.from_dict(d.namespaceDetails.docs[0]) |
94 | 130 | if e is not None: |
95 | | - return UserOrGroupOrProject(cast(UserApi | GroupApi | ProjectApi, from_entity(e).root)) |
| 131 | + match e: |
| 132 | + case UserDocument() as user_doc: |
| 133 | + return UserOrGroupOrProject(__user_to_base(user_doc)) |
| 134 | + case GroupDocument() as group_doc: |
| 135 | + return UserOrGroupOrProject(__group_to_base(group_doc)) |
| 136 | + case ProjectDocument() as project_doc: |
| 137 | + return UserOrGroupOrProject(from_project(project_doc)) |
96 | 138 | return None |
97 | 139 |
|
98 | 140 |
|
|
0 commit comments