def update(self, oid, tags): self.remove(oid) for tag in tags: htag = self.getHash(tag) self.tagsmap[htag] = tag # add oid -> tag oids = self.tag_oids.get(htag) if oids is None: oids = LFSet() self.tag_oids[htag] = oids if oid not in oids: oids.insert(oid) # add tag -> oid oid_tags = self.oid_tags.get(oid) if oid_tags is None: oid_tags = LLSet() self.oid_tags[oid] = oid_tags if htag not in oid_tags: oid_tags.insert(htag) # culculate weight weight = self.tag_weight.get(htag) if weight is not None: key = (weight, htag) if key in self.weights: self.weights.remove(key) weight = float(len(oids)) self.tag_weight[htag] = weight self.weights.insert((weight, htag))
def addComment(self, comment): """Add a new comment. The parent id should have been set already. The comment id may be modified to find a free key. The id used will be returned. """ # Make sure we don't have a wrapped object comment = aq_base(comment) id = long(time.time() * 1e6) while id in self._comments: id += 1 comment.comment_id = id notify(ObjectWillBeAddedEvent(comment, self, id)) self._comments[id] = comment comment.__parent__ = aq_base(self) # Record unique users who've commented (for logged in users only) commentator = comment.author_username if commentator: if not commentator in self._commentators: self._commentators[commentator] = 0 self._commentators[commentator] += 1 reply_to = comment.in_reply_to if not reply_to: # top level comments are in reply to the faux id 0 comment.in_reply_to = reply_to = 0 if not reply_to in self._children: self._children[reply_to] = LLSet() self._children[reply_to].insert(id) # Add the annotation if not already done annotions = IAnnotations(self.__parent__) if not ANNOTATION_KEY in annotions: annotions[ANNOTATION_KEY] = aq_base(self) # Notify that the object is added. The object must here be # acquisition wrapped or the indexing will fail. notify(ObjectCreatedEvent(comment)) notify(ObjectAddedEvent(comment.__of__(self), self, id)) notify(ContainerModifiedEvent(self)) return id
def children(self): # we need to look this up every time, because we may not have a # dict yet when the adapter is first created return self.conversation._children.get(self.comment_id, LLSet())
def import_data(self, data): results = 0 for conversation_data in data: obj = api.content.get(UID=conversation_data["uuid"]) if not obj: continue if not obj.restrictedTraverse("@@conversation_view").enabled(): continue added = 0 conversation = IConversation(obj) for item in conversation_data["conversation"]["items"]: if isinstance(item["text"], dict) and item["text"].get("data"): item["text"] = item["text"]["data"] comment = Comment() comment_id = int(item["comment_id"]) comment.comment_id = comment_id comment.creation_date = dateutil.parser.parse( item["creation_date"]) comment.modification_date = dateutil.parser.parse( item["modification_date"]) comment.author_name = item["author_name"] comment.author_username = item["author_username"] comment.creator = item["author_username"] comment.text = unescape(item["text"].replace( u"\r<br />", u"\r\n").replace(u"<br />", u"\r\n")) if item["user_notification"]: comment.user_notification = True if item.get("in_reply_to"): comment.in_reply_to = int(item["in_reply_to"]) conversation._comments[comment_id] = comment comment.__parent__ = aq_base(conversation) commentator = comment.author_username if commentator: if commentator not in conversation._commentators: conversation._commentators[commentator] = 0 conversation._commentators[commentator] += 1 reply_to = comment.in_reply_to if not reply_to: # top level comments are in reply to the faux id 0 comment.in_reply_to = reply_to = 0 if reply_to not in conversation._children: conversation._children[reply_to] = LLSet() conversation._children[reply_to].insert(comment_id) # Add the annotation if not already done annotions = IAnnotations(obj) if DISCUSSION_ANNOTATION_KEY not in annotions: annotions[DISCUSSION_ANNOTATION_KEY] = aq_base( conversation) added += 1 logger.info("Added {} comments to {}".format( added, obj.absolute_url())) results += added return results
def _makeOne(self): from BTrees.LLBTree import LLSet return LLSet()