def is_subscribed_to(self, pagelist): """ Check if user subscription matches any page in pagelist. The subscription contains interwiki page names. e.g 'WikiName:Page_Name' TODO: check if it's fast enough when getting called for many users from page.getSubscribersList() :param pagelist: list of pages to check for subscription :rtype: bool :returns: if user is subscribed any page in pagelist """ if not self.valid: return False # Create a new list with interwiki names. pages = [getInterwikiName(pagename) for pagename in pagelist] # Create text for regular expression search text = '\n'.join(pages) for pattern in self.subscribed_items: # Try simple match first if pattern in pages: return True # Try regular expression search, skipping bad patterns try: pattern = re.compile(r'^{0}$'.format(pattern), re.M) except re.error: continue if pattern.search(text): return True return False
def add_trail(self, item_name): """ Add item name to trail. :param item_name: the item name (unicode) to add to the trail """ item_name = getInterwikiName(item_name) trail_in_session = session.get('trail', []) trail = trail_in_session[:] trail = [i for i in trail if i != item_name] # avoid dupes trail.append(item_name) # append current item name at end trail = trail[-self._cfg.trail_size:] # limit trail length if trail != trail_in_session: session['trail'] = trail
def quickunlink(self, pagename): """ Remove a page from user quicklinks Remove interwiki name from quicklinks. :param pagename: page name :type pagename: unicode :rtype: bool :returns: if pagename was removed """ quicklinks = self.quicklinks interWikiName = getInterwikiName(pagename) if interWikiName and interWikiName in quicklinks: quicklinks.remove(interWikiName) self.save(force=True) return True return False
def quicklink(self, pagename): """ Adds a page to the user quicklinks Add links as interwiki names. :param pagename: page name :type pagename: unicode :rtype: bool :returns: if pagename was added """ quicklinks = self.quicklinks interWikiName = getInterwikiName(pagename) if interWikiName and interWikiName not in quicklinks: quicklinks.append(interWikiName) self.save(force=True) return True return False
def is_quicklinked_to(self, pagelist): """ Check if user quicklink matches any page in pagelist. :param pagelist: list of pages to check for quicklinks :rtype: bool :returns: if user has quicklinked any page in pagelist """ if not self.valid: return False quicklinks = self.quicklinks for pagename in pagelist: interWikiName = getInterwikiName(pagename) if interWikiName and interWikiName in quicklinks: return True return False
def subscribe(self, pagename): """ Subscribe to a wiki page. Page names are saved as interwiki names. :param pagename: name of the page to subscribe :type pagename: unicode :rtype: bool :returns: if page was subscribed """ pagename = getInterwikiName(pagename) subscribed_items = self.subscribed_items if pagename not in subscribed_items: subscribed_items.append(pagename) self.save(force=True) # XXX SubscribedToPageEvent return True return False
def unsubscribe(self, pagename): """ Unsubscribe a wiki page. Try to unsubscribe by removing interwiki name from the subscription list. Its possible that the user will be subscribed to a page by more than one pattern. It can be both interwiki name and a regex pattern that both match the page. Therefore, we must check if the user is still subscribed to the page after we try to remove names from the list. :param pagename: name of the page to subscribe :type pagename: unicode :rtype: bool :returns: if unsubscribe was successful. If the user has a regular expression that matches, unsubscribe will always fail. """ interWikiName = getInterwikiName(pagename) subscribed_items = self.profile[SUBSCRIBED_ITEMS] if interWikiName and interWikiName in subscribed_items: subscribed_items.remove(interWikiName) self.save(force=True) return not self.is_subscribed_to([pagename])