Exemple #1
0
 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)))
Exemple #2
0
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
Exemple #3
0
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)
Exemple #5
0
 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
Exemple #6
0
 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]
Exemple #7
0
 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