Ejemplo n.º 1
0
class BasicTemplateTests(unittest.TestCase):

    def setUp(self):
        self.t = PageTemplate()

    def test_if_in_var(self):
        # DTML test 1: if, in, and var:
        pass # for unittest
        """
        %(comment)[ blah %(comment)]
        <html><head><title>Test of documentation templates</title></head>
        <body>
        %(if args)[
        <dl><dt>The arguments to this test program were:<p>
        <dd>
        <ul>
        %(in args)[
          <li>Argument number %(num)d was %(arg)s
        %(in args)]
        </ul></dl><p>
        %(if args)]
        %(else args)[
        No arguments were given.<p>
        %(else args)]
        And thats da trooth.
        </body></html>
        """
        tal = util.read_input('dtml1.html')
        self.t.write(tal)

        aa = util.argv(('one', 'two', 'three', 'cha', 'cha', 'cha'))
        o = self.t(content=aa)
        expect = util.read_output('dtml1a.html')

        util.check_xml(expect, o)

        aa = util.argv(())
        o = self.t(content=aa)
        expect = util.read_output('dtml1b.html')
        util.check_xml(expect, o)

    def test_batches_and_formatting(self):
        # DTML test 3: batches and formatting:
        pass # for unittest
        """
          <html><head><title>Test of documentation templates</title></head>
          <body>
          <!--#if args-->
            The arguments were:
            <!--#in args size=size end=end-->
                <!--#if previous-sequence-->
                   (<!--#var previous-sequence-start-arg-->-
                    <!--#var previous-sequence-end-arg-->)
                <!--#/if previous-sequence-->
                <!--#if sequence-start-->
                   <dl>
                <!--#/if sequence-start-->
                <dt><!--#var sequence-arg-->.</dt>
                <dd>Argument <!--#var num fmt=d--> was <!--#var arg--></dd>
                <!--#if next-sequence-->
                   (<!--#var next-sequence-start-arg-->-
                    <!--#var next-sequence-end-arg-->)
                <!--#/if next-sequence-->
            <!--#/in args-->
            </dl>
          <!--#else args-->
            No arguments were given.<p>
          <!--#/if args-->
          And I\'m 100% sure!
          </body></html>
        """
        tal = util.read_input('dtml3.html')
        self.t.write(tal)

        aa = util.argv(('one', 'two', 'three', 'four', 'five',
                        'six', 'seven', 'eight', 'nine', 'ten',
                        'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',
                        'sixteen', 'seventeen', 'eighteen', 'nineteen',
                        'twenty',
                        ))
        from zope.pagetemplate.tests import batch
        o = self.t(content=aa, batch=batch.batch(aa.args, 5))

        expect = util.read_output('dtml3.html')
        util.check_xml(expect, o)

    def test_on_error_in_slot_filler(self):
        # The `here` isn't defined, so the macro definition is
        # expected to catch the error that gets raised.
        text = '''\
            <div metal:define-macro="foo">
               <div tal:on-error="string:eek">
                  <div metal:define-slot="slot" />
                  cool
               </div>
            </div>

            <div metal:use-macro="template/macros/foo">
               <div metal:fill-slot="slot">
                  <p tal:content="here/xxx" />
               </div>
            </div>
            '''
        self.t.write(text)
        self.t()

    def test_on_error_in_slot_default(self):
        # The `here` isn't defined, so the macro definition is
        # expected to catch the error that gets raised.
        text = '''\
            <div metal:define-macro="foo">
               <div tal:on-error="string:eek">
                  <div metal:define-slot="slot">
                    <div tal:content="here/xxx" />
                  </div>
               </div>
            </div>

            <div metal:use-macro="template/macros/foo">
            </div>
            '''
        self.t.write(text)
        self.t()

    def test_unicode_html(self):
        text = u'<p>\xe4\xf6\xfc\xdf</p>'

        # test with HTML parser
        self.t.pt_edit(text, 'text/html')
        self.assertEquals(self.t().strip(), text)

        # test with XML parser
        self.t.pt_edit(text, 'text/xml')
        self.assertEquals(self.t().strip(), text)
Ejemplo n.º 2
0
    def reportObjekte(self, reportcontext, typ, sort_on, sort_order, filter={}, reportname='Standard', test=False, **templatevars):
        """
        @param reportcontext: context mit dem der Report erzeugt werden soll.
        @param typ: Entityname fuer die Datenbankabfrage zur Bestimmung des Reportumfangs.
        @param sort_on: DB-Sortierattribut
        @param sort_order: DB-Sortierreihenfolge
        @param filter: Moegliche Filterwerte fuer die Abfrage.
        @param reportname: Name des registrierten Reports
        @param test: Attribut zu Testzwecken mit einem echten View-Template
        """
        log('reportObjekte')
        reportReg = _reportConfigReg.get(typ, [])
        reportConfig = None
        #print 'filter ', filter
        REQUEST = self._getRequest()
        
#        print reportReg
#        print reportname
        
        for ec in reportReg:
            if ec[0] == reportname:
                reportConfig = ec[1]
#        print reportConfig
        if reportConfig:
#            print 'reportConfig gefunden'
            reportTemplateName = reportConfig.get('reportTemplateName')
            if reportTemplateName:
#                print 'TemplateName gefunden'
                objekte = []
                objsel = REQUEST.get('objsel', [])
                if objsel:
                    for pks in objsel:
                        pkvals = self.getPKDict(typ, eval(pks))
                        
                        objekte.append(self.objektdatensatz(typ, **pkvals))
                #ansonsten
                else:
                    objekte = self.objekteSuchen(typ, filter, sort_on=sort_on, sort_order=sort_order)
                
                # print len(objekte)
                
                if not templatevars:
                    templatevars = {'objekte':objekte,
                                    'reportcontext':reportcontext}
                else:
                    templatevars['objekte'] = objekte
                    templatevars['reportcontext'] = reportcontext
                
                template_obj = None

                if reportcontext.getField(reportTemplateName):
                    template_obj = PageTemplate()
                    content = reportcontext.getField(reportTemplateName).getRaw(reportcontext)#.read()
#                    print content
                    template_obj.pt_edit(content,'text/html')
                else:
                    if test:
                        return templatevars['objekte']
                    template_obj = getattr(reportcontext, reportTemplateName)
                
#                print template_obj
#                return template_obj(**templatevars)    
                return safe_unicode(template_obj(**templatevars))