def set_field_appstruct(self, values, notify = True, mark_modified = True): #Remove restricted keys, in case they're present #This might be changed to raise an error instead in time for restricted_key in RESTRICTED_KEYS: if restricted_key in values: del values[restricted_key] updated = set() for (k, v) in values.items(): cur = self.get_field_value(k) if cur == v: continue self.set_field_value(k, v) updated.add(k) if updated: updated.add('searchable_text') #Just to make sure updated.add('allowed_to_view') if mark_modified and 'modified' not in values: #Don't update if modified is set, since it will override the value we're trying to set. self.mark_modified() updated.add('modified') if 'tags' not in updated: #Hack to fix text updated.add('tags') if notify: #FIXME: This hack can be removed when transformations are live #Currently we need to reindex whenever some fields have changed objectEventNotify(ObjectUpdatedEvent(self, changed=updated)) return updated
def test_content_not_updated_when_only_read(self): root = self._fixture() meeting = root['m'] objectEventNotify(ObjectUpdatedEvent(meeting, indexes=('unread', ))) adapter = self.config.registry.queryAdapter(meeting, ILogHandler) self.assertEqual(len(adapter.log_storage), 0)
def clear_unread_from_retracted_proposals(obj, event): if obj.get_workflow_state() != 'retracted': return reg = get_current_registry() unread = reg.queryAdapter(obj, IUnread) if unread and unread.unread_storage: unread.unread_storage.clear() objectEventNotify(ObjectUpdatedEvent(obj, indexes = ('unread',), metadata = False))
def mark_as_read(self, userid): storage = self.unread_storage if userid in storage: storage.remove(userid) objectEventNotify( ObjectUpdatedEvent(self.context, indexes=('unread', ), metadata=False))
def test_content_updated(self): root = self._fixture() meeting = root['m'] objectEventNotify(ObjectUpdatedEvent(meeting)) adapter = self.config.registry.queryAdapter(meeting, ILogHandler) self.assertEqual(len(adapter.log_storage), 1) self.assertEqual(adapter.log_storage[0].tags, ('updated', ))
def reset_unread(self): try: del self.context.__unread_storage__ objectEventNotify( ObjectUpdatedEvent(self.context, indexes=('unread', ), metadata=False)) except AttributeError: #If there is no __unread_storage__ we shouldn't do something pass
def set_vote_data(self, value, notify=True): """ Set vote data """ marker = object() current_val = self.get_vote_data(marker) if value == current_val: return self.__vote_data__ = value if notify: objectEventNotify(ObjectUpdatedEvent(self))
def test_reindexed_on_update(self): meeting = createContent('Meeting') meeting.title = 'hello world' self.root['meeting'] = meeting query = self.query self.assertEqual(query("title == 'hello world'")[0], 1) self.root['meeting'].title = 'me and my little friends' #We'll have to kick the subscriber manually objectEventNotify(ObjectUpdatedEvent(self.root['meeting'])) self.assertEqual(query("title == 'hello world'")[0], 0) self.assertEqual(query("title == 'me and my little friends'")[0], 1)
def _notify(context): """ Send notification for Like tag. This might change later since the index is for a specific tag rather than a general solution. """ objectEventNotify( ObjectUpdatedEvent(context, indexes=('like_userids', ), metadata=True))
def _notify(self): #Only update specific index? objectEventNotify(ObjectUpdatedEvent(self, metadata=True))