Example #1
0
 def test_serialize_backend(self):
     become_trusted()
     testparams = [
         (u'foo3', 0, dict(m1=u"m1r0foo3"), 'bar1'),
         (u'foo4', 0, dict(m1=u"m1r0foo4"), 'bar2'),
         (u'foo4', 1, dict(m1=u"m1r1foo4"), 'baz2'),
     ]
     for params in testparams:
         update_item(*params)
     xmlfile = StringIO()
     serialize(flaskg.storage, xmlfile)
     xml = xmlfile.getvalue()
     assert xml.startswith(XML_DECL + '<backend>')
     assert xml.endswith('</backend>\n')
     # this is not very precise testing:
     assert '<item name="foo3"><meta></meta>' in xml
     assert '<revision revno="0"><meta>' in xml
     assert '<entry key="mimetype"><str>application/octet-stream</str>\n</entry>' in xml
     assert '<entry key="m1"><str>m1r0foo3</str>\n</entry>' in xml
     assert '<entry key="name"><str>foo3</str>\n</entry>' in xml
     assert '<data coding="base64"><chunk>YmFyMQ==</chunk>\n</data>' in xml
     assert '<item name="foo4"><meta></meta>' in xml
     assert '<entry key="m1"><str>m1r0foo4</str>\n</entry>' in xml
     assert '<entry key="name"><str>foo4</str>\n</entry>' in xml
     assert '<data coding="base64"><chunk>YmFyMg==</chunk>\n</data>' in xml
     assert '<revision revno="1"><meta>' in xml
     assert '<entry key="m1"><str>m1r1foo4</str>\n</entry>' in xml
     assert '<entry key="name"><str>foo4</str>\n</entry>' in xml
     assert '<data coding="base64"><chunk>YmF6Mg==</chunk>\n</data>' in xml
Example #2
0
def import_export_xml(app):
    # If the content was already pumped into the backend, we don't want
    # to do that again. (Works only until the server is restarted.)
    xmlfile = app.cfg.load_xml
    if xmlfile:
        app.cfg.load_xml = None
        tmp_backend = router.RouterBackend([('/', memory.MemoryBackend())],
                                           index_uri='sqlite://')
        unserialize(tmp_backend, xmlfile)
        # TODO optimize this, maybe unserialize could count items it processed
        item_count = 0
        for item in tmp_backend.iteritems():
            item_count += 1
        logging.debug("loaded xml into tmp_backend: %s, %d items" %
                      (xmlfile, item_count))
        try:
            # In case the server was restarted we cannot know whether
            # the xml data already exists in the target backend.
            # Hence we check the existence of the items before we unserialize
            # them to the backend.
            backend = app.unprotected_storage
            for item in tmp_backend.iteritems():
                item = backend.get_item(item.name)
        except StorageError:
            # if there is some exception, we assume that backend needs to be filled
            # we need to use it as unserialization target so that update mode of
            # unserialization creates the correct item revisions
            logging.debug("unserialize xml file %s into %r" %
                          (xmlfile, backend))
            unserialize(backend, xmlfile)
    else:
        item_count = 0

    # XXX wrong place / name - this is a generic preload functionality, not just for tests
    # To make some tests happy
    app.cfg.test_num_pages = item_count

    xmlfile = app.cfg.save_xml
    if xmlfile:
        app.cfg.save_xml = None
        backend = app.unprotected_storage
        serialize(backend, xmlfile)
Example #3
0
 def test_serialize_rev(self):
     become_trusted()
     params = (u'foo1', 0, dict(m1=u"m1"), 'bar1')
     item = update_item(*params)
     rev = item.get_revision(0)
     xmlfile = StringIO()
     serialize(rev, xmlfile)
     xml = xmlfile.getvalue()
     expected = (
         XML_DECL + '<revision revno="0">'
         '<meta>'
         '<entry key="mimetype"><str>application/octet-stream</str>\n</entry>\n'
         '<entry key="sha1"><str>763675d6a1d8d0a3a28deca62bb68abd8baf86f3</str>\n</entry>\n'
         '<entry key="m1"><str>m1</str>\n</entry>\n'
         '<entry key="name"><str>foo1</str>\n</entry>\n'
         '<entry key="uuid"><str>foo1</str>\n</entry>\n'
         '</meta>\n'
         '<data coding="base64"><chunk>YmFyMQ==</chunk>\n</data>\n'
         '</revision>\n')
     assert expected == xml
Example #4
0
 def test_Values(self):
     test_data = [
         ('bar', '<bytes>bar</bytes>\n'),
         (u'bar', '<str>bar</str>\n'),
         (42, '<int>42</int>\n'),
         (True, '<bool>True</bool>\n'),
         (23.42, '<float>23.42</float>\n'),
         (complex(1.2, 2.3), '<complex>(1.2+2.3j)</complex>\n'),
         ((1, 2), '<tuple><int>1</int>\n<int>2</int>\n</tuple>\n'),
         ((1, u'bar'), '<tuple><int>1</int>\n<str>bar</str>\n</tuple>\n'),
         ((1, (u'bar', u'baz')),
          '<tuple><int>1</int>\n<tuple><str>bar</str>\n<str>baz</str>\n</tuple>\n</tuple>\n'
          ),
     ]
     for v, expected_xml in test_data:
         v = create_value_object(v)
         xmlfile = StringIO()
         serialize(v, xmlfile)
         xml = xmlfile.getvalue()
         assert xml == XML_DECL + expected_xml
Example #5
0
    def test_Entry(self):
        test_data = [
            ('foo', 'bar', '<entry key="foo"><bytes>bar</bytes>\n</entry>\n'),
            (u'foo', u'bar', '<entry key="foo"><str>bar</str>\n</entry>\n'),
            ('''<"a"&'b'>''', '<c&d>',
             '''<entry key="&lt;&quot;a&quot;&amp;'b'&gt;"><bytes>&lt;c&amp;d&gt;</bytes>\n</entry>\n'''
             ),
        ]
        for k, v, expected_xml in test_data:
            e = Entry(k, v)
            xmlfile = StringIO()
            serialize(e, xmlfile)
            xml = xmlfile.getvalue()
            assert xml == XML_DECL + expected_xml

        for expected_k, expected_v, xml in test_data:
            xmlfile = StringIO(xml)
            result = {}
            unserialize(Entry(attrs={'key': expected_k}, rev_or_item=result),
                        xmlfile)
            assert expected_k in result
            assert result[expected_k] == expected_v
Example #6
0
 def test_serialize_item(self):
     become_trusted()
     testparams = [
         (u'foo2', 0, dict(m1=u"m1r0"), 'bar2'),
         (u'foo2', 1, dict(m1=u"m1r1"), 'baz2'),
     ]
     for params in testparams:
         item = update_item(*params)
     xmlfile = StringIO()
     serialize(item, xmlfile)
     xml = xmlfile.getvalue()
     expected = (
         XML_DECL + '<item name="foo2">'
         '<meta></meta>\n'
         '<revision revno="0">'
         '<meta>'
         '<entry key="mimetype"><str>application/octet-stream</str>\n</entry>\n'
         '<entry key="sha1"><str>033c4846b506a4a48e32cdf54515c91d3499adb3</str>\n</entry>\n'
         '<entry key="m1"><str>m1r0</str>\n</entry>\n'
         '<entry key="name"><str>foo2</str>\n</entry>\n'
         '<entry key="uuid"><str>foo2</str>\n</entry>\n'
         '</meta>\n'
         '<data coding="base64"><chunk>YmFyMg==</chunk>\n</data>\n'
         '</revision>\n'
         '<revision revno="1">'
         '<meta>'
         '<entry key="mimetype"><str>application/octet-stream</str>\n</entry>\n'
         '<entry key="sha1"><str>f91d8fc20a5de853e62105cc1ee0bf47fd7ded0f</str>\n</entry>\n'
         '<entry key="m1"><str>m1r1</str>\n</entry>\n'
         '<entry key="name"><str>foo2</str>\n</entry>\n'
         '<entry key="uuid"><str>foo2</str>\n</entry>\n'
         '</meta>\n'
         '<data coding="base64"><chunk>YmF6Mg==</chunk>\n</data>\n'
         '</revision>\n'
         '</item>\n')
     assert expected == xml
Example #7
0
    def mainloop(self):
        load = self.options.load
        save = self.options.save
        xml_file = self.options.xml_file

        if load == save:  # either both True or both False
            fatal("You need to give either --load or --save!")
        if not xml_file:
            if load:
                xml_file = sys.stdin
            elif save:
                xml_file = sys.stdout

        self.init_request()
        request = self.request
        init_unprotected_backends(request)
        storage = flaskg.unprotected_storage

        ndays = self.options.ndays
        exceptndays = self.options.exceptndays
        nhours = self.options.nhours
        exceptnhours = self.options.exceptnhours
        now = time.time()

        sincetime = 0
        sincetime_invert = False
        if ndays:
            sincetime = now - ndays * 24 * 3600
        elif nhours:
            sincetime = now - nhours * 3600
        elif exceptndays:
            sincetime = now - exceptndays * 24 * 3600
            sincetime_invert = True
        elif exceptnhours:
            sincetime = now - exceptnhours * 3600
            sincetime_invert = True

        nrevs = self.options.nrevs
        nrevs_invert = False
        exceptnrevs = self.options.exceptnrevs
        if exceptnrevs:
            nrevs = exceptnrevs
            nrevs_invert = True

        if load:
            unserialize(storage, xml_file)
        elif save:
            if nrevs:
                serialize(storage, xml_file, NLastRevs, nrevs, nrevs_invert)
            elif sincetime:
                serialize(storage, xml_file, SinceTime, sincetime,
                          sincetime_invert)
            else:
                serialize(storage, xml_file)