From cce5678584330ee2bf8274808724f1dbcc7d7b23 Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Fri, 19 Apr 2013 18:15:28 +0200 Subject: [PATCH] [IMP] Update redis links in linkTo/unlinkTo --- indico/MaKaC/user.py | 10 ++++++++++ indico/util/redis/avatar_links.py | 27 +++++++++++++++------------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/indico/MaKaC/user.py b/indico/MaKaC/user.py index 416b62bfd..88f22b851 100644 --- a/indico/MaKaC/user.py +++ b/indico/MaKaC/user.py @@ -51,6 +51,8 @@ from indico.util.contextManager import ContextManager from indico.util.caching import order_dict from indico.util.i18n import i18nformat from indico.util.decorators import cached_classproperty +from indico.util.redis import write_client as redis_write_client +import indico.util.redis.avatar_links as avatar_links """Contains the classes that implement the user management subsystem """ @@ -766,6 +768,10 @@ class Avatar(Persistent, Fossilizable): raise ValueError('role %s is not allowed for %s objects' % (role, type(obj).__name__)) self.linkedTo[field][role].add(obj) self._p_changed = 1 + if redis_write_client: + event = avatar_links.event_from_obj(obj) + if event: + avatar_links.add_link(redis_write_client, self, event, field + '_' + role) break def getLinkTo(self, field, role): @@ -781,6 +787,10 @@ class Avatar(Persistent, Fossilizable): if obj in self.linkedTo[field][role]: self.linkedTo[field][role].remove(obj) self._p_changed = 1 + if redis_write_client: + event = avatar_links.event_from_obj(obj) + if event: + avatar_links.del_link(redis_write_client, self, event, field + '_' + role) break def getStatus( self ): diff --git a/indico/util/redis/avatar_links.py b/indico/util/redis/avatar_links.py index d8335680f..9a63e80c1 100644 --- a/indico/util/redis/avatar_links.py +++ b/indico/util/redis/avatar_links.py @@ -59,17 +59,10 @@ def init_links(client, avatar): for key, roleDict in avatar.linkedTo.iteritems(): for role, items in roleDict.iteritems(): for item in items: - event = None - if isinstance(item, MaKaC.conference.Conference): - event = item - elif hasattr(item, 'getConference'): - event = item.getConference() - if event is None: - continue - elif event.getId() == 'default': # DefaultConference - continue - all_events.add(event) - event_roles[event].add(key + '_' + role) + event = event_from_obj(item) + if event: + all_events.add(event) + event_roles[event].add(key + '_' + role) # Add avatar to event avatar lists for event in all_events: @@ -80,4 +73,14 @@ def init_links(client, avatar): client.zadd('avatar-event-links/avatar_events:%s' % avatar.getId(), **zdata) # Add roles to avatar-event role lists for event, roles in event_roles.iteritems(): - client.sadd('avatar-event-links/avatar_event_roles:%s:%s' % (avatar.getId(), event.getId()), *roles) \ No newline at end of file + client.sadd('avatar-event-links/avatar_event_roles:%s:%s' % (avatar.getId(), event.getId()), *roles) + + +def event_from_obj(obj): + event = None + if isinstance(obj, MaKaC.conference.Conference): + event = obj + elif hasattr(obj, 'getConference'): + event = obj.getConference() + if event and event.getId() != 'default': + return event \ No newline at end of file -- 2.11.4.GIT