|
1 | 1 | from datetime import datetime |
2 | 2 | from opengever.api.ogdslistingbase import OGDSListingBaseService |
3 | 3 | from opengever.base.visible_users_and_groups_filter import visible_users_and_groups_filter |
4 | | -from opengever.ogds.models.group import groups_users |
| 4 | +from opengever.ogds.models.group_membership import GroupMembership |
| 5 | +from opengever.ogds.models.group_membership import groups_users |
5 | 6 | from opengever.ogds.models.user import User |
6 | 7 | import re |
7 | 8 |
|
@@ -35,6 +36,13 @@ class OGDSUserListingGet(OGDSListingBaseService): |
35 | 36 | default_state_filter = tuple() |
36 | 37 | pattern = re.compile(r"^(\d{4}-\d{2}-\d{2}) TO (\d{4}-\d{2}-\d{2})") |
37 | 38 |
|
| 39 | + def reply(self): |
| 40 | + result = super(OGDSUserListingGet, self).reply() |
| 41 | + filters = self.request.form.get('filters', {}) |
| 42 | + |
| 43 | + self._augment_items_with_membership_note(result, filters) |
| 44 | + return result |
| 45 | + |
38 | 46 | def needs_join_with_groups_users(self, filters): |
39 | 47 | return bool(filters.get('groupid', False)) |
40 | 48 |
|
@@ -75,3 +83,31 @@ def extend_query_with_visible_users_and_groups_filter(self, query): |
75 | 83 | visible_users_and_groups_filter.get_whitelisted_principals())) |
76 | 84 |
|
77 | 85 | return query |
| 86 | + |
| 87 | + def _augment_items_with_membership_note(self, result, filters): |
| 88 | + groupid = filters.get('groupid', None) |
| 89 | + items = result.get('items') or [] |
| 90 | + |
| 91 | + userids = list({item.get('userid') for item in items}) |
| 92 | + if not userids: |
| 93 | + return |
| 94 | + |
| 95 | + rows = ( |
| 96 | + GroupMembership.query |
| 97 | + .with_entities(GroupMembership.userid, GroupMembership.note) |
| 98 | + .filter( |
| 99 | + GroupMembership.groupid == groupid, |
| 100 | + GroupMembership.userid.in_(userids), |
| 101 | + GroupMembership.note.isnot(None), |
| 102 | + ) |
| 103 | + .all() |
| 104 | + ) |
| 105 | + notes_by_userid = dict(rows) |
| 106 | + |
| 107 | + for item in items: |
| 108 | + uid = item.get('userid') |
| 109 | + if not uid: |
| 110 | + continue |
| 111 | + note = notes_by_userid.get(uid) |
| 112 | + if note: |
| 113 | + item['note'] = note |
0 commit comments