def update(cls, op, date, pid): """Handle post updates. Here we could also build content diffs, but for now just used a signal to update cache record. """ # pylint: disable=unused-argument if not DbState.is_initial_sync(): CachedPost.update(op['author'], op['permlink'], pid)
def process(self): """Applies a validated operation.""" assert self.valid, 'cannot apply invalid op' from hive.indexer.cached_post import CachedPost action = self.action params = dict( date=self.date, community=self.community, community_id=self.community_id, actor=self.actor, actor_id=self.actor_id, account=self.account, account_id=self.account_id, post_id=self.post_id, role_id=self.role_id, notes=self.notes, title=self.title, ) # Community-level commands if action == 'updateProps': bind = ', '.join([k + " = :" + k for k in list(self.props.keys())]) DB.query("UPDATE hive_communities SET %s WHERE id = :id" % bind, id=self.community_id, **self.props) self._notify('set_props', payload=json.dumps(read_key_dict(self.op, 'props'))) elif action == 'subscribe': DB.query( """INSERT INTO hive_subscriptions (account_id, community_id, created_at) VALUES (:actor_id, :community_id, :date)""", **params) DB.query( """UPDATE hive_communities SET subscribers = subscribers + 1 WHERE id = :community_id""", **params) self._notify('subscribe') elif action == 'unsubscribe': DB.query( """DELETE FROM hive_subscriptions WHERE account_id = :actor_id AND community_id = :community_id""", **params) DB.query( """UPDATE hive_communities SET subscribers = subscribers - 1 WHERE id = :community_id""", **params) # Account-level actions elif action == 'setRole': DB.query( """INSERT INTO hive_roles (account_id, community_id, role_id, created_at) VALUES (:account_id, :community_id, :role_id, :date) ON CONFLICT (account_id, community_id) DO UPDATE SET role_id = :role_id""", **params) self._notify('set_role', payload=Role(self.role_id).name) elif action == 'setUserTitle': DB.query( """INSERT INTO hive_roles (account_id, community_id, title, created_at) VALUES (:account_id, :community_id, :title, :date) ON CONFLICT (account_id, community_id) DO UPDATE SET title = :title""", **params) self._notify('set_label', payload=self.title) # Post-level actions elif action == 'mutePost': DB.query( """UPDATE hive_posts SET is_muted = '1' WHERE id = :post_id""", **params) self._notify('mute_post', payload=self.notes) if not DbState.is_initial_sync(): CachedPost.update(self.account, self.permlink, self.post_id) elif action == 'unmutePost': DB.query( """UPDATE hive_posts SET is_muted = '0' WHERE id = :post_id""", **params) self._notify('unmute_post', payload=self.notes) if not DbState.is_initial_sync(): CachedPost.update(self.account, self.permlink, self.post_id) elif action == 'pinPost': DB.query( """UPDATE hive_posts SET is_pinned = '1' WHERE id = :post_id""", **params) self._notify('pin_post', payload=self.notes) elif action == 'unpinPost': DB.query( """UPDATE hive_posts SET is_pinned = '0' WHERE id = :post_id""", **params) self._notify('unpin_post', payload=self.notes) elif action == 'flagPost': self._notify('flag_post', payload=self.notes) return True
def update(cls, op, date, pid): # here we could also build content diffs... if not DbState.is_initial_sync(): CachedPost.update(op['author'], op['permlink'], pid)