def get_editor_info(meta, external=False): """ Create a dict of formatted user info. :rtype: dict :returns: dict of formatted user info such as name, ip addr, email,... """ addr = meta.get(ADDRESS) hostname = meta.get(HOSTNAME) text = _('anonymous') # link text title = '' # link title css = 'editor' # link/span css class name = None # author name uri = None # author homepage uri email = None # pure email address of author if app.cfg.show_hosts and addr: # only tell ip / hostname if show_hosts is True if hostname: text = hostname[:15] # 15 = len(ipaddr) name = title = u'{0}[{1}]'.format(hostname, addr) css = 'editor host' else: name = text = addr title = u'[{0}]'.format(addr) css = 'editor ip' userid = meta.get(USERID) if userid: u = user.User(userid) name = u.name0 text = name display_name = u.display_name or name if title: # we already have some address info title = u"{0} @ {1}".format(display_name, title) else: title = display_name if u.mailto_author and u.email: email = u.email css = 'editor mail' else: homewiki = app.cfg.user_homewiki if is_local_wiki(homewiki): css = 'editor homepage local' else: css = 'editor homepage interwiki' uri = url_for_item(name, wiki_name=homewiki, _external=external, namespace=NAMESPACE_USERS) result = dict(name=name, text=text, css=css, title=title) if uri: result['uri'] = uri if email: result['email'] = email return result
def get_editor_info(meta, external=False): addr = meta.get(ADDRESS) hostname = meta.get(HOSTNAME) text = _('anonymous') # link text title = '' # link title css = 'editor' # link/span css class name = None # author name uri = None # author homepage uri email = None # pure email address of author if app.cfg.show_hosts and addr: # only tell ip / hostname if show_hosts is True if hostname: text = hostname[:15] # 15 = len(ipaddr) name = title = '{0}[{1}]'.format(hostname, addr) css = 'editor host' else: name = text = addr title = '[{0}]'.format(addr) css = 'editor ip' userid = meta.get(USERID) if userid: u = user.User(userid) name = u.name text = name aliasname = u.aliasname if not aliasname: aliasname = name if title: # we already have some address info title = "{0} @ {1}".format(aliasname, title) else: title = aliasname if u.mailto_author and u.email: email = u.email css = 'editor mail' else: homewiki = app.cfg.user_homewiki if is_local_wiki(homewiki): css = 'editor homepage local' else: css = 'editor homepage interwiki' uri = url_for_item(name, wiki_name=homewiki, _external=external) result = dict(name=name, text=text, css=css, title=title) if uri: result['uri'] = uri if email: result['email'] = email return result
def navibar(self, item_name): """ Assemble the navibar :rtype: list :returns: list of tuples (css_class, url, link_text, title) """ flaskg.clock.start('navibar') current = item_name # Process config navi_bar items = [(cls, url_for(endpoint, **args), link_text, title) for cls, endpoint, args, link_text, title in self.cfg.navi_bar] # Add user links to wiki links. for text in self.user.quicklinks: url, link_text, title = self.split_navilink(text) items.append(('userlink', url, link_text, title)) # Add sister pages (see http://usemod.com/cgi-bin/mb.pl?SisterSitesImplementationGuide ) for sistername, sisterurl in self.cfg.sistersites: if is_local_wiki(sistername): items.append(('sisterwiki current', sisterurl, sistername)) else: cid = cache_key(usage="SisterSites", sistername=sistername) sisteritems = app.cache.get(cid) if sisteritems is None: uo = urllib.URLopener() uo.version = 'MoinMoin SisterItem list fetcher 1.0' try: sisteritems = {} f = uo.open(sisterurl) for line in f: line = line.strip() try: item_url, item_name = line.split(' ', 1) sisteritems[item_name.decode('utf-8')] = item_url except: pass # ignore invalid lines f.close() app.cache.set(cid, sisteritems) logging.info("Site: {0} Status: Updated. Pages: {1}".format(sistername, len(sisteritems))) except IOError as err: (title, code, msg, headers) = err.args # code e.g. 304 logging.warning("Site: {0} Status: Not updated.".format(sistername)) logging.exception("exception was:") if current in sisteritems: url = sisteritems[current] items.append(('sisterwiki', url, sistername, '')) flaskg.clock.stop('navibar') return items
def userhome(self): """ Assemble arguments used to build user homepage link :rtype: tuple :returns: arguments of user homepage link in tuple (wiki_href, display_name, title, exists) """ user = self.user name = user.name0 display_name = user.display_name or name wikiname, itemname = getInterwikiHome(name) title = u"{0} @ {1}".format(display_name, wikiname) # link to (interwiki) user homepage if is_local_wiki(wikiname): exists = self.storage.has_item(itemname) else: # We cannot check if wiki pages exists in remote wikis exists = True wiki_href = url_for_item(itemname, wiki_name=wikiname, namespace=NAMESPACE_USERPROFILES) return wiki_href, display_name, title, exists
def path_breadcrumbs(self): """ Assemble the path breadcrumbs (a.k.a.: trail) :rtype: list :returns: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err) """ user = self.user breadcrumbs = [] trail = user.get_trail() for interwiki_item_name in trail: wiki_name, item_name = split_interwiki(interwiki_item_name) err = not is_known_wiki(wiki_name) href = url_for_item(item_name, wiki_name=wiki_name) if is_local_wiki(wiki_name): exists = self.storage.has_item(item_name) wiki_name = '' # means "this wiki" for the theme code else: exists = True # we can't detect existance of remote items breadcrumbs.append((wiki_name, item_name, href, exists, err)) return breadcrumbs
def path_breadcrumbs(self): """ Assemble the path breadcrumbs (a.k.a.: trail) :rtype: list :returns: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err) """ user = self.user breadcrumbs = [] trail = user.get_trail() for interwiki_item_name in trail: wiki_name, namespace, field, item_name = split_interwiki(interwiki_item_name) fqname = CompositeName(namespace, field, item_name) err = not is_known_wiki(wiki_name) href = url_for_item(wiki_name=wiki_name, **fqname.split) if is_local_wiki(wiki_name): exists = bool(self.storage.get_item(**fqname.query)) wiki_name = "" # means "this wiki" for the theme code else: exists = True # we can't detect existance of remote items if item_name: breadcrumbs.append((wiki_name, fqname, href, exists, err)) return breadcrumbs
def userhome(self): """ Assemble arguments used to build user homepage link :rtype: tuple :returns: arguments of user homepage link in tuple (wiki_href, aliasname, title, exists) """ user = self.user name = user.name aliasname = user.aliasname if not aliasname: aliasname = name wikiname, itemname = getInterwikiHome(name) title = "{0} @ {1}".format(aliasname, wikiname) # link to (interwiki) user homepage if is_local_wiki(wikiname): exists = self.storage.has_item(itemname) else: # We cannot check if wiki pages exists in remote wikis exists = True wiki_href = url_for_item(itemname, wiki_name=wikiname) return wiki_href, aliasname, title, exists
def path_breadcrumbs(self): """ Assemble the path breadcrumbs (a.k.a.: trail) :rtype: list :returns: path breadcrumbs items in tuple (wiki_name, item_name, url, exists, err) """ user = self.user breadcrumbs = [] trail = user.get_trail() for interwiki_item_name in trail: wiki_name, namespace, field, item_name = split_interwiki(interwiki_item_name) fqname = CompositeName(namespace, field, item_name) err = not is_known_wiki(wiki_name) href = url_for_item(wiki_name=wiki_name, **fqname.split) if is_local_wiki(wiki_name): exists = bool(self.storage.get_item(**fqname.query)) wiki_name = '' # means "this wiki" for the theme code else: exists = True # we can't detect existance of remote items if item_name: breadcrumbs.append((wiki_name, fqname, href, exists, err)) return breadcrumbs
def navibar(self, fqname): """ Assemble the navibar :rtype: list :returns: list of tuples (css_class, url, link_text, title) """ if not isinstance(fqname, CompositeName): fqname = split_fqname(fqname) item_name = fqname.value current = item_name # Process config navi_bar items = [] for cls, endpoint, args, link_text, title in self.cfg.navi_bar: if endpoint == "frontend.show_root": endpoint = "frontend.show_item" root_fqname = fqname.get_root_fqname() default_root = app.cfg.root_mapping.get( NAMESPACE_DEFAULT, app.cfg.default_root) args[ 'item_name'] = root_fqname.fullname if fqname.namespace != NAMESPACE_ALL else default_root elif endpoint in [ "frontend.global_history", "frontend.global_tags" ]: args['namespace'] = fqname.namespace elif endpoint == "frontend.index": args['item_name'] = fqname.namespace items.append((cls, url_for(endpoint, **args), link_text, title)) # Add user links to wiki links. for text in self.user.quicklinks: url, link_text, title = self.split_navilink(text) items.append(('userlink', url, link_text, title)) # Add sister pages (see http://usemod.com/cgi-bin/mb.pl?SisterSitesImplementationGuide ) for sistername, sisterurl in self.cfg.sistersites: if is_local_wiki(sistername): items.append(('sisterwiki current', sisterurl, sistername, '')) else: cid = cache_key(usage="SisterSites", sistername=sistername) sisteritems = app.cache.get(cid) if sisteritems is None: uo = urllib.URLopener() uo.version = 'MoinMoin SisterItem list fetcher 1.0' try: sisteritems = {} f = uo.open(sisterurl) for line in f: line = line.strip() try: item_url, item_name = line.split(' ', 1) sisteritems[item_name.decode( 'utf-8')] = item_url except: pass # ignore invalid lines f.close() app.cache.set(cid, sisteritems) logging.info( "Site: {0!r} Status: Updated. Pages: {1}".format( sistername, len(sisteritems))) except IOError as err: (title, code, msg, headers) = err.args # code e.g. 304 logging.warning( "Site: {0!r} Status: Not updated.".format( sistername)) logging.exception("exception was:") if current in sisteritems: url = sisteritems[current] items.append(('sisterwiki', url, sistername, '')) return items
def navibar(self, fqname): """ Assemble the navibar :rtype: list :returns: list of tuples (css_class, url, link_text, title) """ if not isinstance(fqname, CompositeName): fqname = split_fqname(fqname) item_name = fqname.value current = item_name # Process config navi_bar items = [] for cls, endpoint, args, link_text, title in self.cfg.navi_bar: if endpoint == "frontend.show_root": endpoint = "frontend.show_item" root_fqname = fqname.get_root_fqname() default_root = app.cfg.root_mapping.get(NAMESPACE_DEFAULT, app.cfg.default_root) args['item_name'] = root_fqname.fullname if fqname.namespace != NAMESPACE_ALL else default_root elif endpoint in ["frontend.global_history", "frontend.global_tags"]: args['namespace'] = fqname.namespace elif endpoint == "frontend.index": args['item_name'] = fqname.namespace items.append((cls, url_for(endpoint, **args), link_text, title)) # Add user links to wiki links. for text in self.user.quicklinks: url, link_text, title = self.split_navilink(text) items.append(('userlink', url, link_text, title)) # Add sister pages (see http://usemod.com/cgi-bin/mb.pl?SisterSitesImplementationGuide ) for sistername, sisterurl in self.cfg.sistersites: if is_local_wiki(sistername): items.append(('sisterwiki current', sisterurl, sistername, '')) else: cid = cache_key(usage="SisterSites", sistername=sistername) sisteritems = app.cache.get(cid) if sisteritems is None: uo = urllib.URLopener() uo.version = 'MoinMoin SisterItem list fetcher 1.0' try: sisteritems = {} f = uo.open(sisterurl) for line in f: line = line.strip() try: item_url, item_name = line.split(' ', 1) sisteritems[item_name.decode('utf-8')] = item_url except: pass # ignore invalid lines f.close() app.cache.set(cid, sisteritems) logging.info("Site: {0!r} Status: Updated. Pages: {1}".format(sistername, len(sisteritems))) except IOError as err: (title, code, msg, headers) = err.args # code e.g. 304 logging.warning("Site: {0!r} Status: Not updated.".format(sistername)) logging.exception("exception was:") if current in sisteritems: url = sisteritems[current] items.append(('sisterwiki', url, sistername, '')) return items