Bug 1070710 - dnf.Base.read_comps() fails in Python3, works ok in Python2
Summary: dnf.Base.read_comps() fails in Python3, works ok in Python2
Alias: None
Product: Fedora
Classification: Fedora
Component: dnf
Version: 20
Hardware: Unspecified
OS: Unspecified
Target Milestone: ---
Assignee: Packaging Maintenance Team
QA Contact: Fedora Extras Quality Assurance
Depends On:
Blocks: 1066869
TreeView+ depends on / blocked
Reported: 2014-02-27 12:13 UTC by Tim Lauridsen
Modified: 2014-03-08 03:35 UTC (History)
4 users (show)

Clone Of:
Last Closed: 2014-03-08 03:35:30 UTC

Attachments (Terms of Use)
This simple patch fixes the issue by open the output file in binary mode (635 bytes, patch)
2014-02-27 17:29 UTC, Tim Lauridsen
no flags Details | Diff

Description Tim Lauridsen 2014-02-27 12:13:56 UTC
Description of problem:

using the dnf.Base.read_comps(), fails if called in Python3
works fine in Python2

Version-Release number of selected component (if applicable):

How reproducible:
every time

Steps to Reproduce:
1. get https://github.com/timlau/dnf-apiex/blob/master/dnf-groups.py
2. python3 dnf-groups.py

Actual results:
Traceback (most recent call last):
  File "dnf-groups.py", line 21, in <module>
    de = DnfExample()
  File "dnf-groups.py", line 17, in __init__
  File "/usr/lib/python3.3/site-packages/dnf/base.py", line 406, in read_comps
    decompressed = misc.repo_gen_decompress(comps_fn, 'groups.xml')
  File "/usr/lib/python3.3/site-packages/dnf/yum/misc.py", line 1071, in repo_gen_decompress
    return decompress(filename, dest=dest, check_timestamps=True,fn_only=cached)
  File "/usr/lib/python3.3/site-packages/dnf/yum/misc.py", line 1056, in decompress
    _decompress_chunked(filename, out, ztype)
  File "/usr/lib/python3.3/site-packages/dnf/yum/misc.py", line 732, in _decompress_chunked
TypeError: must be str, not bytes

Expected results:
No trace back

Additional info:

works fine if run with just :

python dnf-groups.py

Comment 1 Tim Lauridsen 2014-02-27 13:26:31 UTC
Look like a the common <str> vs <unicode> issue

def _decompress_chunked(source, dest, ztype):

    while True:
            data = s_fn.read(1024000)
        except IOError:

        if not data: break

        except (OSError, IOError) as e:
            msg = "Error writing to file %s: %s" % (dest, str(e))
            raise dnf.exceptions.MiscError(msg)

data is always bytes
destination.write(data)needs unicode in python3

Comment 2 Radek Holy 2014-02-27 14:10:26 UTC
Hello, thank you for the report. We'll fix it.

Comment 3 Tim Lauridsen 2014-02-27 17:29:39 UTC
Created attachment 868667 [details]
This simple patch fixes the issue by open the output file in binary mode

Comment 4 Tim Lauridsen 2014-02-28 09:59:50 UTC
Made a pull request here:

Comment 5 Radek Holy 2014-02-28 10:43:17 UTC
Great, thank you!

Comment 6 Tim Lauridsen 2014-03-04 15:58:16 UTC
fixed upstream

Comment 7 Fedora Update System 2014-03-05 12:57:27 UTC
dnf-0.4.17-1.fc20 has been submitted as an update for Fedora 20.

Comment 8 Fedora Update System 2014-03-06 08:14:15 UTC
Package dnf-0.4.17-1.fc20:
* should fix your issue,
* was pushed to the Fedora 20 testing repository,
* should be available at your local mirror within two days.
Update it with:
# su -c 'yum update --enablerepo=updates-testing dnf-0.4.17-1.fc20'
as soon as you are able to.
Please go to the following url:
then log in and leave karma (feedback).

Comment 9 Tim Lauridsen 2014-03-07 07:56:26 UTC
tested in 0.4.17 and it works fine

Comment 10 Fedora Update System 2014-03-08 03:35:30 UTC
dnf-0.4.17-1.fc20 has been pushed to the Fedora 20 stable repository.  If problems still persist, please make note of it in this bug report.

Note You need to log in before you can comment on or make changes to this bug.