예제 #1
0
    def federador(self):

        log.debug('Leyendo catalog')
        data_dict = {
            'page': toolkit.request.params.get('page'),
            'modified_since': toolkit.request.params.get('modified_since'),
        }

        try:
            log.debug('Obteniendo datasets para el federador')
            dataset_dict = toolkit.get_action('iaest_federador')({}, data_dict)
            log.debug('Creando extra_vars')
            c = {'c': {'pkg': dataset_dict}}
            log.debug('Creando c %s', c)

            toolkit.response.headers[
                'Content-Type'] = 'application/rdf+xml;charset=UTF-8'
            loader_render = NewTextTemplate(
                "application/rdf+xml; charset=utf-8", True, 'rdf')
            return render('package/federador.rdf',
                          extra_vars=c,
                          loader=loader_render)

        except toolkit.ValidationError, e:
            toolkit.abort(409, str(e))
예제 #2
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_exec_import(self):
     tmpl = NewTextTemplate(u"""{% python from datetime import timedelta %}
     ${timedelta(days=2)}
     """)
     self.assertEqual("""
     2 days, 0:00:00
     """, str(tmpl.generate()))
예제 #3
0
    def notify(self, to, cc=None, subject=None, body=None):
        """
        Provide a direct way to send an email

        :param list to: Email addresses where to send email to
        :param list cc: CC email addresses
        :param str subject: Email subject if not set in init (or want to override it)
        :param str subject: Email body if not set in init (or want to override it)
        :raises: TracError if email sending fails
        """
        self.to = [to] if isinstance(to, basestring) else to
        self.cc = cc or []
        self.subject = subject or self.subject

        # If body msg is set, use it as-is
        if body:
            self.data = {'body':body}
            self.template = NewTextTemplate('${body}')

        # Load non-default template
        elif self.template_name != 'notify.txt':
            # Reload template so that it can be set after for the instance
            self.template = Chrome(self.env).load_template(self.template_name, method='text')

        # Raise possible exceptions (connection, smtp) as unified TracError
        try:
            return super(EmailNotifier, self).notify(None, self.subject)
        except (socket.error, smtplib.SMTPException), e:
            self.env.log.exception('Failed to send email to: %s' % self.to)
            raise TracError(e)
예제 #4
0
    def _format_subj(self, event):
        is_newticket = event.category == 'created'
        ticket = event.target

        summary = ticket['summary']
        if event.changes and 'summary' in event.changes['fields']:
            change = event.changes['fields']['summary']
            summary = "%s (was: %s)" % (change['new'], change['old'])

        prefix = self.config.get('notification', 'smtp_subject_prefix')
        if prefix == '__default__':
            prefix = '[%s]' % self.env.project_name

        data = {
            'prefix': prefix,
            'summary': summary,
            'ticket': ticket,
            'changes': event.changes,
            'env': self.env,
        }

        template = self.config.get('notification', 'ticket_subject_template')
        template = NewTextTemplate(template.encode('utf8'))
        subj = template.generate(**data).render('text', encoding=None).strip()
        if not is_newticket:
            subj = "Re: " + subj
        return subj
예제 #5
0
 def test_exec_import(self):
     tmpl = NewTextTemplate("""{% python from datetime import timedelta %}
     ${timedelta(days=2)}
     """)
     self.assertEqual("""
     2 days, 0:00:00
     """,
                      tmpl.generate().render(encoding=None))
예제 #6
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_exec_with_trailing_space(self):
     """
     Verify that a code block with trailing space does not cause a syntax
     error (see ticket #127).
     """
     NewTextTemplate(u"""
       {% python
         bar = 42
       $}
     """)
예제 #7
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_exec_def(self):
     tmpl = NewTextTemplate(u"""{% python
     def foo():
         return 42
     %}
     ${foo()}
     """)
     self.assertEqual(u"""
     42
     """, str(tmpl.generate()))
예제 #8
0
 def test_exec_def(self):
     tmpl = NewTextTemplate("""{% python
     def foo():
         return 42
     %}
     ${foo()}
     """)
     self.assertEqual("""
     42
     """,
                      tmpl.generate().render(encoding=None))
예제 #9
0
    def _notify_admins(self, permission, email_path, debug='false'):
        is_debug = debug.lower() in ('true', 'yes')

        if permission != 'TRAC_ADMIN':
            raise AdminCommandError('Only TRAC_ADMIN permission is supported')

        # A standard thing to do in IAdminCommandProviders (otherwise,
        # accessing project_identifier would give errors)
        if not hasattr(self.env, 'project_identifier'):
            MultiProjectEnvironmentInit(self.env).environment_needs_upgrade(None)

        env_name = self.env.project_identifier
        if env_name == self.env.config.get('multiproject', 'sys_home_project_name'):
            raise AdminCommandError('Command does not support home project')

        if not os.path.exists(email_path):
            raise AdminCommandError(_("Email template was not found!"))

        project = Project.get(self.env)
        email_template = ''
        try:
            with open(email_path) as fd:
                email_template = fd.read()
        except OSError as e:
            raise AdminCommandError(_("Error with opening file %(path)s: %(error_msg)s",
                path=email_path, error_msg=e))
        except Exception as e:
            raise AdminCommandError(_("Unknown error when parsing file %(path)s: %(error_msg)s",
                path=email_path, error_msg=e))
        email_template = [i.strip() for i in email_template.split('\n', 1) if i]
        if not len(email_template) > 1 or not all(email_template):
            raise AdminCommandError(_("Email template %(path)s was invalid.", path=email_path))

        subject, body = email_template
        text_template = NewTextTemplate(body)
        admins = project.get_admin_email_addresses()

        data = {'env_name': env_name}

        if is_debug:
            printout('## DEBUG MODE - NOT SENDING EMAILS ##')

        printout("project: {0}".format(env_name))
        printout("to: {0}".format(','.join(admins)))
        printout("subject: {0}".format(subject))
        printout("----------------------------")
        printout(text_template.generate(**data))
        printout("----------------------------")

        if not is_debug:
            notifier = EmailNotifier(self.env, subject=subject, data=data)
            notifier.template = text_template
            notifier.notify(admins)
            printout('Emails sent')
예제 #10
0
    def format_subject(self):
        template = self.config.get('fullblog-notification', 'subject_template')
        template = NewTextTemplate(template.encode('utf8'))

        prefix = self.config.get('notification', 'smtp_subject_prefix')
        if prefix == '__default__':
            prefix = '[%s]' % self.config.get('project', 'name')

        action = self.action.strip('post_').replace('_', ' ')

        data = {'blog': self.blog, 'prefix': prefix, 'action': action}
        return template.generate(**data).render('text', encoding=None).strip()
예제 #11
0
파일: text.py 프로젝트: e2pluginss/plexnet
    def test_empty_lines1(self):
        tmpl = NewTextTemplate("""Your items:

{% for item in items %}\
  * ${item}
{% end %}""")
        self.assertEqual("""Your items:

  * 0
  * 1
  * 2
""",
                         tmpl.generate(items=range(3)).render())
예제 #12
0
    def test_empty_lines1_with_crlf(self):
        tmpl = NewTextTemplate('Your items:\r\n'
                               '\r\n'
                               '{% for item in items %}\\\r\n'
                               '  * ${item}\r\n'
                               '{% end %}')

        self.assertEqual(
            'Your items:\r\n'
            '\r\n'
            '  * 0\r\n'
            '  * 1\r\n'
            '  * 2\r\n',
            tmpl.generate(items=range(3)).render(encoding=None))
예제 #13
0
    def format_subject(self, action):
        template = self.config.get('wiki-notification', 'subject_template')
        template = NewTextTemplate(template.encode('utf8'))

        prefix = self.config.get('notification', 'smtp_subject_prefix')
        if prefix == '__default__':
            prefix = '[%s]' % self.config.get('project', 'name')

        data = {
            'pagename': self.old_name or self.page.name,
            'prefix': prefix,
            'action': action,
            'env': self.env,
        }
        return template.generate(**data).render('text', encoding=None).strip()
예제 #14
0
    def format_subj(self, tickets_descr):
        template = self.config.get('notification', 'batch_subject_template')
        template = NewTextTemplate(template.encode('utf8'))

        prefix = self.config.get('notification', 'smtp_subject_prefix')
        if prefix == '__default__':
            prefix = '[%s]' % self.env.project_name

        data = {
            'prefix': prefix,
            'tickets_descr': tickets_descr,
            'env': self.env,
        }
        subj = template.generate(**data).render('text', encoding=None).strip()
        return shorten_line(subj)
예제 #15
0
    def format_subj(self, summary):
        template = self.config.get('notification', 'ticket_subject_template')
        template = NewTextTemplate(template.encode('utf8'))

        prefix = self.config.get('notification', 'smtp_subject_prefix')
        if prefix == '__default__':
            prefix = '[%s]' % self.env.project_name

        data = {
            'prefix': prefix,
            'summary': summary,
            'ticket': self.ticket,
            'env': self.env,
        }

        return template.generate(**data).render('text', encoding=None).strip()
예제 #16
0
    def build_clone_form(self, req, ticket, data):
        fields = {}
        for derivation in self.derived_fields:
            template, new_field = derivation.split('->')
            if new_field in self.excluded_fields:
                continue
            template = NewTextTemplate(
                template.replace("\\n", "\n").encode('utf8'))
            fields[new_field] = template.generate(ticket=ticket).render(
                'text', encoding=None).strip()

        for f in data.get('fields', []):
            name = f['name']
            if name in fields:
                continue
            if name not in self.excluded_fields:
                fields[name] = ticket[name]
        return fields
예제 #17
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_unicode_input(self):
     text = u'$foo\xf6$bar'
     tmpl = NewTextTemplate(text)
     self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
예제 #18
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_latin1_encoded(self):
     text = u'$foo\xf6$bar'.encode('iso-8859-1')
     tmpl = NewTextTemplate(text, encoding='iso-8859-1')
     self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y')))
예제 #19
0
파일: text.py 프로젝트: e2pluginss/plexnet
    def test_end_with_args(self):
        tmpl = NewTextTemplate("""
{% if foo %}
  bar
{% end 'if foo' %}""")
        self.assertEqual('\n', str(tmpl.generate(foo=False)))
예제 #20
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_comment_escaping(self):
     tmpl = NewTextTemplate('\\{# escaped comment #}')
     self.assertEqual('{# escaped comment #}', str(tmpl.generate()))
예제 #21
0
    def test_end_with_args(self):
        tmpl = NewTextTemplate("""
{% if foo %}
  bar
{% end 'if foo' %}""")
        self.assertEqual('\n', tmpl.generate(foo=False).render(encoding=None))
예제 #22
0
 def test_comment(self):
     tmpl = NewTextTemplate('{# a comment #}')
     self.assertEqual('', tmpl.generate().render(encoding=None))
예제 #23
0
 def test_unicode_input(self):
     text = u'$foo\xf6$bar'
     tmpl = NewTextTemplate(text)
     self.assertEqual(u'x\xf6y',
                      tmpl.generate(foo='x', bar='y').render(encoding=None))
예제 #24
0
 def test_latin1_encoded(self):
     text = '$foo\xf6$bar'.encode('iso-8859-1')
     tmpl = NewTextTemplate(text, encoding='iso-8859-1')
     self.assertEqual('x\xf6y',
                      tmpl.generate(foo='x', bar='y').render(encoding=None))
예제 #25
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_escaping(self):
     tmpl = NewTextTemplate('\\{% escaped %}')
     self.assertEqual('{% escaped %}', str(tmpl.generate()))
예제 #26
0
    ("factory3.py", "%s-factory3.py" % name),
    ("factoryMate.py", "%s-factoryMate.py" % name),
    ("panel-applet.template", "org.gnome.applets.%s.panel-applet" % name),
]

for root, dirs, files in walk("templates/debian"):
    for f in files:
        fullpath = join(root, f)[len("templates/"):]
        templates.append((fullpath, fullpath))

for (src, dest) in templates:
    src = join("templates", src)
    dest = join(opts.folder, dest)
    destdir = dirname(dest)
    if destdir != "" and not exists(destdir):
        makedirs(destdir)
    tmpl = NewTextTemplate(open(src).read())
    stream = tmpl.generate(name=opts.name,
                           scriptRoot=scriptRoot,
                           description=opts.description,
                           icon=opts.icon,
                           category=opts.category,
                           lowerName=opts.name.lower(),
                           maintainer=opts.maintainer,
                           email=opts.email,
                           now=now)
    open(dest, "wb").write(stream.render())

    bits = stat(src).st_mode
    chmod(dest, bits)
예제 #27
0
파일: text.py 프로젝트: e2pluginss/plexnet
 def test_comment(self):
     tmpl = NewTextTemplate('{# a comment #}')
     self.assertEqual('', str(tmpl.generate()))
예제 #28
0
def genshiText(indented_string):
    t = NewTextTemplate(trim(indented_string))
    return lambda **kw: t.generate(**kw).render()
예제 #29
0
 def test_comment_escaping(self):
     tmpl = NewTextTemplate('\\{# escaped comment #}')
     self.assertEqual('{# escaped comment #}',
                      tmpl.generate().render(encoding=None))