示例#1
0
 def test_wrap(self):
     container = Div()
     new = A().wrap(container)
     self.assertTrue(new in container)
     with self.assertRaises(TagError):
         A().wrap(Div()(P()))
     container = Div()
     to_wrap = Div()
     outermost = Div()
     outermost(to_wrap)
     to_wrap.wrap(container)
     self.assertTrue(to_wrap in container)
     self.assertTrue(container in outermost)
示例#2
0
    def test_render(self):
        css = Css(self.css_dict)
        rendered_css = css.render()
        expected_counter = Counter(
            '<style> {} html { background-color: lightblue; } h1 { color: white; text-align: center; } </style>'
        )
        # We count chars occurrence 'cause in python < 3.6 kwargs is not an OrderedDict'
        self.assertEqual(Counter(rendered_css), expected_counter)

        link = A()
        link_with_id = A(id='ex_a')
        link_with_class = A(klass='cl_a')
        css_complex = Css({
            'html': {
                'body': {
                    'color': 'red',
                    Div: {
                        'color': 'green',
                        'border': '1px'
                    },
                    link: {
                        'color': 'grey'
                    },
                    link_with_class: {
                        'color': 'grey'
                    },
                    A: {
                        'color': 'blue'
                    }
                }
            },
            '#myid': {
                'color': 'purple'
            },
            link_with_id: {
                'color': 'grey'
            },
            'td, tr': {
                'color': 'pink'
            }
        })
        rendered_css = css_complex.render()
        expected_css = '<style>{ } html { } #myid { color: purple; } #ex_a { color: grey; }' \
                       ' td, tr { color: pink; } html body { color: red; } ' \
                       'html body div { color: green; border: 1px; } html body #89602992 { color: grey; }' \
                       ' html body .cl_a { color: grey; } html body a { color: yellow; } </style>'
        expected_counter = Counter(x for x in expected_css if not x.isdigit())
        self.assertEqual(Counter(x for x in rendered_css if not x.isdigit()),
                         expected_counter)
示例#3
0
    def test_page(self):
        self.maxDiff = None
        expected = '<!DOCTYPE HTML><html><head><meta charset="utf-8"/><link href="my.css" type="text/css" ' \
                   'rel="stylesheet"/><title>test_title</title></head><body><div class="linkBox"><a href="www.' \
                   'foo.com">www.foo.com</a></div><p>This is foo</p><p>This is Bar</p><p>Have you met my friend Baz?' \
                   '</p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</body></html>'
        my_text_list = [
            'This is foo', 'This is Bar', 'Have you met my friend Baz?'
        ]
        another_list = [
            'Lorem ipsum ', 'dolor sit amet, ', 'consectetur adipiscing elit'
        ]

        page = Html(
        )(  # add tags inside the one you created calling the parent
            Head()(  # add multiple tags in one call
                Meta(
                    charset='utf-8'
                ),  # add tag attributes using kwargs in tag initialization
                Link(href="my.css", typ="text/css", rel="stylesheet"),
                Title('test_title')),
            body=Body()
            (  # give them a name so you can navigate the DOM with those names
                Div(klass='linkBox')(A(href='www.foo.com')),
                (P()(text)
                 for text in my_text_list),  # tag insertion accepts generators
                another_list  # add text from a list, str.join is used in rendering
            ))
        self.assertEqual(Counter(page.render()), Counter(expected))
示例#4
0
    def test_find(self):
        tag = Div()(A(), A(), Pre(), Br(), Div()(A()), foo=Br())
        result = tag.find()  # will return a generator yielding all the children -> (A(),A(),Pre(),Br(),Div(),A(),Br())
        self.assertEqual(len(result), 7)

        result = tag.find(names='foo')  # will return a generator yielding all the children named foo -> (Br())
        self.assertEqual(len(result), 1)

        result = tag.find(A)  # will return a generator yielding all the children instances of A -> (A(),A(),A())
        self.assertEqual(len(result), 3)

        result = tag.find('Pre')  # will return a generator yielding all the children instances of Pre -> (Pre())
        self.assertEqual(len(result), 1)

        result = tag.find('Br', names='foo')  # will return foo -> (Br())
        self.assertEqual(len(result), 1)
示例#5
0
    def test_inside_places(self):
        class Obj:
            foo = 'foo'
            bar = 'bar'

            class TestA(InsideDiv):
                def repr(self):
                    self(self.bar)

            class A(InsideSpan):
                def repr(self):
                    self(self.foo + 'test')

            class Test2(InsideP):
                def repr(self):
                    self(self.bar + 'test')

        inst = Obj()
        self.assertEqual(Span()(A()(inst)).render(),
                         '<span><a>footest</a></span>')

        inst = Obj()
        self.assertEqual(Div()(Div()(inst)).render(),
                         '<div><div>bar</div></div>')

        inst = Obj()
        self.assertEqual(P()(T.CustomTag()(inst)).render(),
                         '<p><customtag>bartest</customtag></p>')
示例#6
0
文件: test_t.py 项目: zeus911/TemPy
    def test_dump(self):
        # Test T dumping a Tempy object to a file
        result = """# -*- coding: utf-8 -*-
from tempy import T
from tempy.tags import *
Div(klass="cssClass", bool_attr="True")(A(href=\"\"\"www.foo.bar\"\"\")(\"\"\"non-tempy content\"\"\"), T.CustomTag(numb_attr=9), Br(), Doctype("html"), Comment("test comment"), T.Void.TestVoid())"""
        filename = 'test.py'
        tempy_tree = [
            Div(klass='cssClass',
                bool_attr=bool)(A(href='www.foo.bar')('non-tempy content'),
                                T.CustomTag(numb_attr=9), Br(),
                                Doctype('html'), Comment('test comment'),
                                T.Void.TestVoid()),
        ]
        T.dump(tempy_tree, filename)
        with open(filename, 'r') as f:
            self.assertEqual(Counter(f.read()), Counter(result))
        os.remove(filename)

        T.dump(tempy_tree, 'test')
        os.remove(filename)

        with self.assertRaises(ValueError):
            T.dump(tempy_tree, 'test.jpg')

        with self.assertRaises(ValueError):
            T.dump(tempy_tree, None)
示例#7
0
 def test_wrap_inner(self):
     d1, p, a = Div(), P(), A()
     d1(a)
     d1.wrap_inner(p)
     self.assertFalse(a in d1)
     self.assertTrue(a in p)
     self.assertTrue(p in d1)
示例#8
0
 def test_isub(self):
     a = A()
     div = Div()
     div(a)
     div -= a
     self.assertFalse(a in div)
     with self.assertRaises(ValueError):
         div -= P()
示例#9
0
 def init(self):
     self(Div(klass='pageTitle')('Contatti'))
     self(
         "Ekidna è uno spazio aperto ad ogni proposta, se hai una band e ti piacerebbe suonare da noi, se sei un'agenzia e vuoi proporci il tuo rooster, se hai un'idea che vorresti realizzare in Ekidna, scrivici!", Br(),
         "Cerchiamo di rispondere a tutti, e di dare spazio a tutti.", Br(),
         "Scrivici a ", A(href='mailto:[email protected]')('*****@*****.**'), Br(),
         "Oppure su ", A(href='http://www.facebook.com/associazioneekidna')('Facebook'), Br(),
         "Ma il modo migliore per proporci qualcosa è (se sei della zona) venire alle nostre riunioni settimanali (di solito il martedì, ma può variare)"
     )
     self(Div(klass='pageTitle')('Social'))
     self(
         Img(klass='socialIcon', src=url_for('static', filename='img/social/facebook.png')), A(href='http://www.facebook.com/associazioneekidna')('Facebook'),
         Img(klass='socialIcon', src=url_for('static', filename='img/social/blogspot.png')), A(href='http://associazioneekidna.blogspot.it/')('Blogspot'),
         Img(klass='socialIcon', src=url_for('static', filename='img/social/twitter.png')), A(href='http://twitter.com/ekidnacarpi')('Twitter'),
         Img(klass='socialIcon', src=url_for('static', filename='img/social/youtube.png')), A(href='http://www.youtube.com/channel/UC9URlWUKYelFlTBrFvc7Nyw')('YouTube'),
     )
     self(self._get_analytics())
示例#10
0
 def test_imul_zero(self):
     a = A()
     div = Div()
     div(P(), a, P())
     self.assertEqual(len(div), 3)
     a *= 0
     self.assertEqual(len(div), 2)
     self.assertIsInstance(div[1], P)
示例#11
0
 def test_move_childs(self):
     childs = [A(), P(), 'test', 0]
     d1 = Div()(childs)
     d2 = Div()
     d1.move_childs(d2)
     self.assertFalse(d1.childs)
     self.assertTrue(d2.childs)
     self.assertEqual(childs[0].parent, d2)
示例#12
0
    def test_clear(self):
        link = A()
        css = Css({
            'html': {
                'body': {
                    'color': 'red',
                    Div: {
                        'color': 'green',
                        'border': '1px'
                    },
                    link: {
                        'color': 'purple'
                    },
                    A: {
                        'color': 'yellow'
                    }
                }
            },
            '#myid': {
                'color': 'yellow'
            }
        })

        css_values = {
            'html': {
                'body': {
                    'color': 'red',
                    Div: {
                        'color': 'green',
                        'border': '1px'
                    },
                    link: {
                        'color': 'purple'
                    },
                    A: {
                        'color': 'yellow'
                    }
                }
            }
        }

        css.clear(['#myid'])
        self.assertEqual(css_values, css.attrs['css_attrs'])

        # failed to find
        css.clear(['myid'])
        self.assertEqual(css_values, css.attrs['css_attrs'])
        with self.assertRaises(AttrNotFoundError):
            css.clear(['myid'], ignore_error=False)

        # wrong args type
        css.clear('')
        self.assertEqual(css_values, css.attrs['css_attrs'])
        with self.assertRaises(WrongArgsError):
            css.clear('', ignore_error=False)

        css.clear()
        self.assertEqual({}, css.attrs['css_attrs'])
示例#13
0
 def test_add(self):
     a = A()
     div = Div()
     result = div + a
     self.assertTrue(a in result)
     self.assertFalse(a in div)
     self.assertEqual(result[0], a)
     self.assertIsNot(div, result)
     same_check = div.clone()(a)
     self.assertEqual(same_check, result)
示例#14
0
 def test_sub(self):
     a = A()
     div = Div()
     div(a)
     result = div - a
     self.assertFalse(a in result)
     self.assertTrue(a in div)
     self.assertIsNot(div, result)
     with self.assertRaises(ValueError):
         _ = div - P()
示例#15
0
    def test_wrap_many(self):
        def flatten(cnt):
            res = []
            for el in cnt:
                if isinstance(el, DOMElement):
                    res.append(el)
                else:
                    res.extend(el)
            return res

        def test_return_values(inp, outp):
            self.assertEqual(len(inp), len(outp))
            for _ in range(len(inp)):
                t1, t2 = type(inp[_]), type(outp[_])
                self.assertTrue(t1 == t2 or issubclass(t1, DOMElement)
                                and issubclass(t2, DOMElement))

        def test_correctly_wrapped(child, parent):
            self.assertTrue(child in parent)
            self.assertTrue(child.get_parent() == parent)

        # check if it works correct with correct arguments
        args = (Div(), [Div(), Div()], (Div(), Div()))
        new = A().wrap_many(*args)
        test_return_values(args, new)
        for c, p in zip(flatten(new), flatten(args)):
            test_correctly_wrapped(c, p)

        # check if it raises TagError with strict and returns None without
        args = (Div()(A()), (Div(), Div()))
        with self.assertRaisesRegex(TagError, r'^.+arguments 0$'):
            A().wrap_many(*args, strict=True)
        new = A().wrap_many(*args)
        self.assertIs(new[0].get_parent(), None)

        args = (Div()(A()), (Div(), Div()(A())))
        with self.assertRaisesRegex(TagError, r'^.+arguments 0, \[1\] of 1'):
            A().wrap_many(*args, strict=True)
        new = A().wrap_many(*args)
        self.assertIs(new[0].get_parent(), None)
        self.assertIs(new[1][1].get_parent(), None)

        # check if it raises WrongArgsError
        args = (Div(), '')
        with self.assertRaises(WrongArgsError):
            A().wrap_many(*args)
示例#16
0
 def test_imul(self):
     a = A()
     div = Div()
     div(P(), a, P())
     self.assertEqual(len(div), 3)
     a *= 2
     self.assertTrue(a in div)
     self.assertEqual(len(div), 4)
     self.assertIsInstance(div[2], A)
     b = Div()
     b *= 2
     self.assertEqual(b, [Div(), Div()])
示例#17
0
    def init(self):
        self(
            Center()(Img(src=url_for('static', filename='img/ekidna.png'))), Br(),
            Div(klass='pageTitle')(Center()('Chi Siamo')),
            Pre(klass='preText')("""Fondata nel 1998, l'Associazione Culturale Ekidna si occupa di costruire uno spazio/cantiere aperto alle realtà culturali ed artistiche della zona (ma non solo) che necessitano di spazi di creazione e di visibilità, in un sistema che tende a schiacciare e a rendere pressocchè invisibile tutto ciò che non è commerciabile con alto profitto.

Nel 2002 il progetto si è concretizzato nelle Ex-Scuole Ernesta Bertesi, di San Martino sul Secchia (nelle campagne carpigiane), concesse in comodato d'uso dal Comune di Carpi, dopo lunghe vicissitudini burocratiche.

La struttura fu consegnata in stato di totale abbandono e, da allora, la scelta di Ekidna è stata quella di fornire lavoro volontario ed investire i proventi delle iniziative nella ristrutturazione dello stabile, perchè i progetti artistici possano avere un luogo dove nascere e crescere.

Ekidna è un centro autogestito, completamente slegato da qualsiasi partito o potere politico, che deve quindi auto-finanziarsi completamente, con iniziative di vario genere, legate alle varie discipline artistiche e ad attività culturali."""),
        )
        self(Div(klass='pdf')(A(target='_blank', href=url_for('static', filename='files/chisiamo/%s' % file))(Img(klass='socialIcon', src=url_for('static', filename='img/pdf.png')), file.title()[:-4])) for file in self._data['files'])
        self(self._get_analytics())
示例#18
0
    def test_pop(self):
        new = Div().append_to(self.page)
        self.page.pop(0)
        self.assertTrue(new not in self.page)
        new2 = Div().append_to(self.page)
        self.page.pop()
        self.assertTrue(new2 not in self.page)
        new3 = Div()
        self.page(child_foo=new3)
        self.page.pop('child_foo')
        self.assertTrue(new3 not in self.page)
        new4, new5 = Div(), Div()
        self.page(child_foo_1=new4)
        self.page(child_foo_2=new4)
        self.page.pop(['child_foo_1', 'child_foo_2'])
        self.assertTrue(new4 not in self.page and new5 not in self.page)

        with self.assertRaises(DOMModByKeyError):
            test = Div()(test_key=A())
            test.pop('nonexistentkey')

        with self.assertRaises(DOMModByIndexError):
            test = Div()(A(), P())
            test.pop(2)
示例#19
0
 def init(self):
     self.body.main.container.attr(klass="album py-5 bg-light")
     self.body.main.container(
         Div(klass="container")(Div(klass='row')(persons=[
             Div(klass='col-md-4')(Div(klass='card mb-4 shadow-sm')(A(
                 href=f'person/{person.person_id}')(Div(
                     klass='card-body'
                 )(P(klass='card-text')
                   (f'{person.name.title()} {person.second_name.title()}'),
                   contacts=[
                       Div(klass='contactIcon')(I(klass=CONTACTS_ICONS.get(
                           contact.contact_type, 'noIcon')))
                       for contact in person.contacts
                   ])))) for person in self.content_data['people']
         ])))
示例#20
0
    def test_root(self):
        class Obj:
            foo = 'foo'
            bar = 'bar'

            class Div(TempyREPR):
                def repr(self):
                    self(self.bar)

            class Pre(TempyREPR):
                def repr(self):
                    self(self.foo + 'test')

        inst = Obj()
        self.assertEqual(Pre()(Span()(A()(inst))).render(),
                         '<pre><span><a>footest</a></span></pre>')
示例#21
0
    def test_after_places(self):
        class Obj:
            foo = 'foo'
            bar = 'bar'

            class TestA(AfterDiv):
                def repr(self):
                    self(self.bar)

            class A(AfterSpan):
                def repr(self):
                    self(self.foo + 'test')

        inst = Obj()
        self.assertEqual(Pre()(Span(), A()(inst)).render(),
                         '<pre><span></span><a>footest</a></pre>')
        self.assertEqual(Pre()(Div(), Div()(inst)).render(),
                         '<pre><div></div><div>bar</div></pre>')
示例#22
0
    def test_near_places(self):
        class Obj:
            foo = 'foo'
            bar = 'bar'

            class TestA(NearDiv):
                def repr(self):
                    self(self.bar)

            class TestB(NearSpan):
                def repr(self):
                    self(self.foo + 'test')

        inst = Obj()
        self.assertEqual(Pre()(Span(), A()(inst)).render(),
                         '<pre><span></span><a>footest</a></pre>')
        self.assertEqual(Pre()(T.Custom()(inst), Div()).render(),
                         '<pre><custom>bar</custom><div></div></pre>')
示例#23
0
    def init(self):
        self(Div(klass='pageTitle')('Rottura Del Silenzio'))
        self(
            Pre(klass='preText')("""
Dal 1998 Associazione Ekidna organizza la Rottura Del Silenzio, un festival diy (do it yourself).
Dopo 20 anni non sappiamo più cosa dire per raccontarla, quindi lo lasciamo fare agli altri:"""
            ),
            Blockquote()(Pre(klass='preText')("""Succede che in Emilia, qui dalle nostre parti, finita la primavera, ci viene una certa voglia di stare seduti su un prato tutti rivolti verso un palco, con uno sguazzone  in mano (acqua frizzante con vino bianco scadente), andando a tempo di musica con la testa. Il bello di queste cose è che iniziano al venerdì sera e vanno avanti fino alla domenica. Un’altra cosa bella è che solitamente si entra a offerta libera;: lasci quello che vuoi, se lo vuoi.

Entri in questi posti e sei circondato tutto il giorno dalla musica di gruppi di cui non conosci manco il nome ma dentro di te pensi: “Cazzo! Questi spaccano!” e avvicinandoti ad una tizia chiedi il nome di chi ha appena suonato così te li puoi andare a riascoltare su Spotify, scoprendo poi che sono meglio dal vivo. Ti chiedi anche se la conversazione con la tizia citata sopra avrà un epilogo felice, ma scopri con grosso dispiacere che è lesbica e che quindi, forse, è meglio tornare con i tuoi amici a fumare e a prendere l’ennesimo sguazzone. Girando scopri anche che ci sono un sacco di banchetti. Ce n’è uno di un’etichetta indipendente che crede ancora nel fare musica DOITYOURSELF, come dovrebbe essere. Poi ce n’è un altro di una rivista, che stampa giornaletti e li dà via a gratis! Cioè veramente, tu puoi prenderne quanti ne vuoi, per amici, parenti, morose, basta che si leggano. Guarda questi! Scrivono per il puro piacere di scrivere, per il puro piacere di raccontare. Sempre DOITYOURSELF, sia chiaro! Poi ce n’è un altro che vende braccialetti DOITYOURSELF di cui sicuramente la tua ex-morosa fricchettona-ma-anche-no, ne sarebbe stata entusiasta. Poi ragioni un po’ sul DOITYOURSELF, ma veramente questa gente si sbatte per fare qualcosa? Ti guardi intorno e vedi che sono tutti felici e sorridenti, come dovrebbe essere. Capisci che queste persone si sbattono perchè lo vogliono, per l’amore di fare, per lo stare insieme, per la musica e per divertirsi. E pensi che questo posto è proprio un bel posto.

Uno di questi si chiama Ekidna, un circolo alle porte di Carpi (San Martino Scuole), a cui piace molto fare le cose (e le fanno veramente bene). In estate organizza questo festival che si chiama ROTTURA DEL SILENZIO; ora mai sono arrivati alla diciannovesima edizione. Quest’anno si svolgerà il 17-18-19 giugno e noi di Mumble: siamo felicissimi di farne parte. Per tutti i tre giorni ci suoneranno un sacco di gruppi, banchetti, cibo e sguazzoni. Il tutto è ad offerta libera e consigliamo veramente la presenza, non per tutte le cose citate sopra, ma perchè, in realtà, questi ragazzi hanno un Idromele (DOITYOURSELF) che è la fine del mondo."""
            )),
            "Giacomo Malaguti - ", A(href="http://www.mumbleduepunti.it/")('MUMBLE:'), Br(), Br(),
            "Per proporvi con banchetti, per dare una mano, per seperne qualcosa di più o solo per dire che ti piace: ", A(href="https://www.facebook.com/rotturadelsilenzio/")('facebook.com/rotturadelsilenzio')
        )
        self(Br(), Br())
        self(Div(id='photos')(
                Img(src=url_for('static', filename='img/rottura/%s' % pic)) for pic in sorted(self._data.get('locandine',[]), reverse=True)
            )
        )
        self(self._get_analytics())
示例#24
0
 def test_iter_reversed(self):
     d = Div()
     childs = [A(), P(), P(), Div(), 'test', 1]
     d(childs)
     for t_child, child in zip(reversed(childs), reversed(d)):
         self.assertEqual(t_child, child)
示例#25
0
 def test_next_childs(self):
     d = Div()
     childs = [A(), P(), P(), Div(), 'test', 1]
     d(childs)
     self.assertEqual(childs[0], next(d))
示例#26
0
 def test_iter_chidls(self):
     d = Div()
     childs = [A(), P(), P(), Div(), 'test', 1]
     d(childs)
     for i, child in enumerate(d):
         self.assertEqual(childs[i], child)
示例#27
0
 def test_childs_index(self):
     div = Div()
     a = A()
     div(P(), P(), a)
     self.assertEqual(div[2], a)
示例#28
0
 def test_contents(self):
     test = [A(), Div(), P()]
     div = Div()(test)
     self.assertEqual(div.contents(), test)
示例#29
0
 def test_iadd(self):
     a = A()
     div = Div()
     div += a
     self.assertTrue(a in div)
     self.assertEqual(div[0], a)
示例#30
0
 def test_children(self):
     test = [A(), Div(), P(), 'test']
     div = Div()(test)
     self.assertEqual(list(div.children()), test[:-1])