def __repr__(self): path = [] context = self while context: if context.resource.realm: # skip toplevel resource path.append(repr(context.resource)) context = context.parent return '<%s %s>' % (type(self).__name__, ' - '.join(reversed(path)))
class Acronyms(Component): """ Automatically generates HTML acronyms from definitions in tables in a Wiki page (AcronymDefinitions by default). """ implements(IWikiSyntaxProvider, IWikiChangeListener) acronyms = {} compiled_acronyms = None valid_acronym = re.compile(r'^\S+$', re.UNICODE) acronym_page = property(lambda self: self.env.config.get( 'acronym', 'page', 'AcronymDefinitions')) def __init__(self): self._update_acronyms() def _update_acronyms(self): self.env.log.debug('Updating acronym database') page = WikiPage(self.env, self.acronym_page) self.acronyms = {} if not page.exists: return for line in page.text.splitlines(): line = line.rstrip() if line.startswith('||') and line.endswith( '||') and line[3] != "'": try: a, d, u, s = ( [i.strip() for i in line.strip('||').split('||')] + ['', ''])[0:4] assert self.valid_acronym.match( a), "Invalid acronym %s" % a self.acronyms[a] = (escape(d), escape(u), escape(s)) except Exception, e: self.env.log.warning("Invalid acronym line: %s (%s)", line, e) keys = reversed(sorted(self.acronyms.keys(), key=lambda a: len(a))) self.compiled_acronyms = \ r'''\b(?P<acronym>%s)(?P<acronymselector>\w*)\b''' % '|'.join(keys) # XXX Very ugly, but only "reliable" way? from trac.wiki.parser import WikiParser WikiParser(self.env)._compiled_rules = None
class KeywordReplace(Component): """ Replce wiki keywords from a table in a Wiki page. (KeywordReplace by default). """ implements(IWikiSyntaxProvider, IWikiChangeListener) replace = {} compiled_replace = None valid_replace = re.compile(r'^\S+$', re.UNICODE) replace_page = property( lambda self: self.env.config.get('replace', 'page', 'KeywordReplace')) def __init__(self): self._update_replace() def _update_replace(self): self.env.log.debug('Updating replace database') page = WikiPage(self.env, self.replace_page) self.replace = {} if not page.exists: return for line in page.text.splitlines(): self.env.log.warning(line) line = line.rstrip() if line.startswith('||') and line.endswith( '||') and line[3] != "'": try: a, d = ([i.strip() for i in line.strip('||').split('||')] + ['', ''])[0:2] assert self.valid_replace.match( a), "Invalid replaces %s" % a self.replace[a] = (escape(d)) except Exception, d: self.env.log.warning("Invalid replaces line: %s", line) keys = reversed(sorted(self.replace.keys(), key=lambda a: len(a))) self.compiled_replace = \ r'''\b(?P<replaces>%s)\b''' % '|'.join(keys) # XXX Very ugly, but only "reliable" way? from trac.wiki.parser import WikiParser WikiParser(self.env)._compiled_rules = None
def test(self, req, author, content): if not self.servers: self.log.warning('No IP blacklist servers configured') return self.log.debug('Checking for IP blacklisting on "%s"' % req.remote_addr) points = 0 servers = [] prefix = '.'.join(reversed(req.remote_addr.split('.'))) + '.' for server in self.servers: try: query(prefix + server.encode('utf-8')) except NXDOMAIN: # not blacklisted on this server continue except (Timeout, NoAnswer, NoNameservers), e: self.log.warning('Error checking IP blacklist server "%s" for ' 'IP "%s": %s' % (server, req.remote_addr, e)) else: points -= abs(self.karma_points) servers.append(server)
def _post_process_request(self, req, template=None, content_type=None): for f in reversed(self.filters): template, content_type = f.post_process_request( req, template, content_type) return template, content_type
def _reverse(): for event in reversed(stack): if event[0] is START: yield END, event[1][0], event[2] else: yield END_NS, event[1][0], event[2]
def _post_process_request(self, req, template=None, content_type=None): for f in reversed(self.filters): template, content_type = f.post_process_request(req, template, content_type) return template, content_type