Commit b508f108 authored by Kirill Smelkov's avatar Kirill Smelkov

*: s.decode('hex') -> fromhex(s)

Because on Py3:

        def test_dumpreader():
            in_ = b"""\
        txn 0123456789abcdef " "
        user "my name"
        description "o la-la..."
        extension "zzz123 def"
        obj 0000000000000001 delete
        obj 0000000000000002 from 0123456789abcdee
        obj 0000000000000003 54 adler32:01234567 -
        obj 0000000000000004 4 sha1:9865d483bc5a94f2e30056fc256ed3066af54d04
        ZZZZ
        obj 0000000000000005 9 crc32:52fdeac5
        ABC

        DEF!

        txn 0123456789abcdf0 " "
        user "author2"
        description "zzz"
        extension "qqq"

        """

            r = DumpReader(BytesIO(in_))
            t1 = r.readtxn()
            assert isinstance(t1, Transaction)
    >       assert t1.tid == '0123456789abcdef'.decode('hex')
    E       AttributeError: 'str' object has no attribute 'decode'

    test/test_dump.py:77: AttributeError

Based on patch by Jérome Perrin.
parent 1418c86f
...@@ -23,6 +23,7 @@ from zodbtools.zodbdump import ( ...@@ -23,6 +23,7 @@ from zodbtools.zodbdump import (
zodbdump, DumpReader, Transaction, ObjectDelete, ObjectCopy, zodbdump, DumpReader, Transaction, ObjectDelete, ObjectCopy,
ObjectData, HashOnly ObjectData, HashOnly
) )
from zodbtools.util import fromhex
from ZODB.FileStorage import FileStorage from ZODB.FileStorage import FileStorage
from ZODB.utils import p64 from ZODB.utils import p64
from io import BytesIO from io import BytesIO
...@@ -74,7 +75,7 @@ extension "qqq" ...@@ -74,7 +75,7 @@ extension "qqq"
r = DumpReader(BytesIO(in_)) r = DumpReader(BytesIO(in_))
t1 = r.readtxn() t1 = r.readtxn()
assert isinstance(t1, Transaction) assert isinstance(t1, Transaction)
assert t1.tid == '0123456789abcdef'.decode('hex') assert t1.tid == fromhex('0123456789abcdef')
assert t1.user == b'my name' assert t1.user == b'my name'
assert t1.description == b'o la-la...' assert t1.description == b'o la-la...'
assert t1.extension_bytes == b'zzz123 def' assert t1.extension_bytes == b'zzz123 def'
...@@ -85,29 +86,29 @@ extension "qqq" ...@@ -85,29 +86,29 @@ extension "qqq"
_ = t1.objv[1] _ = t1.objv[1]
assert isinstance(_, ObjectCopy) assert isinstance(_, ObjectCopy)
assert _.oid == p64(2) assert _.oid == p64(2)
assert _.copy_from == '0123456789abcdee'.decode('hex') assert _.copy_from == fromhex('0123456789abcdee')
_ = t1.objv[2] _ = t1.objv[2]
assert isinstance(_, ObjectData) assert isinstance(_, ObjectData)
assert _.oid == p64(3) assert _.oid == p64(3)
assert _.data == HashOnly(54) assert _.data == HashOnly(54)
assert _.hashfunc == 'adler32' assert _.hashfunc == 'adler32'
assert _.hash_ == '01234567'.decode('hex') assert _.hash_ == fromhex('01234567')
_ = t1.objv[3] _ = t1.objv[3]
assert isinstance(_, ObjectData) assert isinstance(_, ObjectData)
assert _.oid == p64(4) assert _.oid == p64(4)
assert _.data == b'ZZZZ' assert _.data == b'ZZZZ'
assert _.hashfunc == 'sha1' assert _.hashfunc == 'sha1'
assert _.hash_ == '9865d483bc5a94f2e30056fc256ed3066af54d04'.decode('hex') assert _.hash_ == fromhex('9865d483bc5a94f2e30056fc256ed3066af54d04')
_ = t1.objv[4] _ = t1.objv[4]
assert isinstance(_, ObjectData) assert isinstance(_, ObjectData)
assert _.oid == p64(5) assert _.oid == p64(5)
assert _.data == b'ABC\n\nDEF!' assert _.data == b'ABC\n\nDEF!'
assert _.hashfunc == 'crc32' assert _.hashfunc == 'crc32'
assert _.hash_ == '52fdeac5'.decode('hex') assert _.hash_ == fromhex('52fdeac5')
t2 = r.readtxn() t2 = r.readtxn()
assert isinstance(t2, Transaction) assert isinstance(t2, Transaction)
assert t2.tid == '0123456789abcdf0'.decode('hex') assert t2.tid == fromhex('0123456789abcdf0')
assert t2.user == b'author2' assert t2.user == b'author2'
assert t2.description == b'zzz' assert t2.description == b'zzz'
assert t2.extension_bytes == b'qqq' assert t2.extension_bytes == b'qqq'
......
# Copyright (C) 2018 Nexedi SA and Contributors. # Copyright (C) 2018-2019 Nexedi SA and Contributors.
# Kirill Smelkov <kirr@nexedi.com> # Kirill Smelkov <kirr@nexedi.com>
# #
# This program is free software: you can Use, Study, Modify and Redistribute # This program is free software: you can Use, Study, Modify and Redistribute
# it under the terms of the GNU General Public License version 3, or (at your # it under the terms of the GNU General Public License version 3, or (at your
...@@ -40,7 +40,7 @@ can query current database head (last_tid) with `zodb info <stor> last_tid`. ...@@ -40,7 +40,7 @@ can query current database head (last_tid) with `zodb info <stor> last_tid`.
from __future__ import print_function from __future__ import print_function
from zodbtools import zodbdump from zodbtools import zodbdump
from zodbtools.util import ashex, storageFromURL from zodbtools.util import ashex, fromhex, storageFromURL
from ZODB.utils import p64, u64, z64 from ZODB.utils import p64, u64, z64
from ZODB.POSException import POSKeyError from ZODB.POSException import POSKeyError
from ZODB._compat import BytesIO from ZODB._compat import BytesIO
...@@ -154,7 +154,7 @@ def main(argv): ...@@ -154,7 +154,7 @@ def main(argv):
sys.exit(2) sys.exit(2)
storurl = argv[0] storurl = argv[0]
at = argv[1].decode('hex') at = fromhex(argv[1])
stor = storageFromURL(storurl) stor = storageFromURL(storurl)
defer(stor.close) defer(stor.close)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment