diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-07-10 16:26:24 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-07-10 16:55:05 -0700 |
commit | 8cc8d12a674ab6271183e5c35202263a36497279 (patch) | |
tree | 22365e2c613d04151a2d2da5ff3e25e37f84c554 /pym/_emerge | |
parent | 906b62b24d8a845356d59abc5acd39db2174ce0f (diff) | |
download | portage-8cc8d12a674ab6271183e5c35202263a36497279.tar.gz portage-8cc8d12a674ab6271183e5c35202263a36497279.tar.bz2 portage-8cc8d12a674ab6271183e5c35202263a36497279.zip |
Migrate from codecs.open() to io.open().
The io.open() function is the same as the built-in open() function in
python3, and its implementation is optimized in python-2.7 and later.
In addition to the possible performance improvement, this also allows
us to avoid any future compatibility issues with codecs.open() that
may arise if it is delegated to the built-in open() function as
discussed in PEP 400.
The main caveat involved with io.open() is that TextIOWrapper.write()
raises TypeError if given raw bytes, unlike the streams returned from
codecs.open(). This is mainly an issue for python2 since literal
strings are raw bytes. We handle this by wrapping TextIOWrapper.write()
arguments with our _unicode_decode() function. Also, the
atomic_ofstream class overrides the write() method in python2 so that
it performs automatic coercion to unicode when necessary.
Diffstat (limited to 'pym/_emerge')
-rw-r--r-- | pym/_emerge/Binpkg.py | 15 | ||||
-rw-r--r-- | pym/_emerge/EbuildFetcher.py | 13 | ||||
-rw-r--r-- | pym/_emerge/EbuildMetadataPhase.py | 4 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 5 | ||||
-rw-r--r-- | pym/_emerge/emergelog.py | 8 | ||||
-rw-r--r-- | pym/_emerge/resolver/output_helpers.py | 4 |
6 files changed, 27 insertions, 22 deletions
diff --git a/pym/_emerge/Binpkg.py b/pym/_emerge/Binpkg.py index 84eda21ba..b83341941 100644 --- a/pym/_emerge/Binpkg.py +++ b/pym/_emerge/Binpkg.py @@ -14,8 +14,9 @@ from portage.util import writemsg import portage from portage import os from portage import _encodings +from portage import _unicode_decode from portage import _unicode_encode -import codecs +import io import logging from portage.output import colorize @@ -239,20 +240,22 @@ class Binpkg(CompositeTask): else: continue - f = codecs.open(_unicode_encode(os.path.join(infloc, k), + f = io.open(_unicode_encode(os.path.join(infloc, k), encoding=_encodings['fs'], errors='strict'), - mode='w', encoding=_encodings['content'], errors='replace') + mode='w', encoding=_encodings['content'], + errors='backslashreplace') try: - f.write(v + "\n") + f.write(_unicode_decode(v + "\n")) finally: f.close() # Store the md5sum in the vdb. - f = codecs.open(_unicode_encode(os.path.join(infloc, 'BINPKGMD5'), + f = io.open(_unicode_encode(os.path.join(infloc, 'BINPKGMD5'), encoding=_encodings['fs'], errors='strict'), mode='w', encoding=_encodings['content'], errors='strict') try: - f.write(str(portage.checksum.perform_md5(pkg_path)) + "\n") + f.write(_unicode_decode( + str(portage.checksum.perform_md5(pkg_path)) + "\n")) finally: f.close() diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py index 215024165..51d2f5a10 100644 --- a/pym/_emerge/EbuildFetcher.py +++ b/pym/_emerge/EbuildFetcher.py @@ -1,10 +1,11 @@ -# Copyright 1999-2010 Gentoo Foundation +# Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import traceback from _emerge.SpawnProcess import SpawnProcess import copy +import io import signal import sys import portage @@ -12,7 +13,6 @@ from portage import os from portage import _encodings from portage import _unicode_encode from portage import _unicode_decode -import codecs from portage.elog.messages import eerror from portage.package.ebuild.fetch import fetch from portage.util._pty import _create_pty_or_pipe @@ -160,12 +160,13 @@ class EbuildFetcher(SpawnProcess): # fetch code will be skipped, so we need to generate equivalent # output here. if self.logfile is not None: - f = codecs.open(_unicode_encode(self.logfile, + f = io.open(_unicode_encode(self.logfile, encoding=_encodings['fs'], errors='strict'), - mode='a', encoding=_encodings['content'], errors='replace') + mode='a', encoding=_encodings['content'], + errors='backslashreplace') for filename in uri_map: - f.write((' * %s size ;-) ...' % \ - filename).ljust(73) + '[ ok ]\n') + f.write(_unicode_decode((' * %s size ;-) ...' % \ + filename).ljust(73) + '[ ok ]\n')) f.close() return True diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py index 284622d69..e53298bae 100644 --- a/pym/_emerge/EbuildMetadataPhase.py +++ b/pym/_emerge/EbuildMetadataPhase.py @@ -11,7 +11,7 @@ from portage import _encodings from portage import _unicode_decode from portage import _unicode_encode import fcntl -import codecs +import io class EbuildMetadataPhase(SubProcess): @@ -37,7 +37,7 @@ class EbuildMetadataPhase(SubProcess): if eapi is None and \ 'parse-eapi-ebuild-head' in settings.features: eapi = portage._parse_eapi_ebuild_head( - codecs.open(_unicode_encode(ebuild_path, + io.open(_unicode_encode(ebuild_path, encoding=_encodings['fs'], errors='strict'), mode='r', encoding=_encodings['repo.content'], errors='replace')) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index d5971d1ba..d0b8fb722 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -3,10 +3,9 @@ from __future__ import print_function -import codecs import difflib import errno -import gc +import io import logging import re import stat @@ -5937,7 +5936,7 @@ class depgraph(object): def write_changes(root, changes, file_to_write_to): file_contents = None try: - file_contents = codecs.open( + file_contents = io.open( _unicode_encode(file_to_write_to, encoding=_encodings['fs'], errors='strict'), mode='r', encoding=_encodings['content'], diff --git a/pym/_emerge/emergelog.py b/pym/_emerge/emergelog.py index 9cac3b222..a195c6f84 100644 --- a/pym/_emerge/emergelog.py +++ b/pym/_emerge/emergelog.py @@ -3,12 +3,13 @@ from __future__ import print_function -import codecs +import io import sys import time import portage from portage import os from portage import _encodings +from portage import _unicode_decode from portage import _unicode_encode from portage.data import secpass from portage.output import xtermTitle @@ -36,7 +37,7 @@ def emergelog(xterm_titles, mystr, short_msg=None): try: file_path = os.path.join(_emerge_log_dir, 'emerge.log') existing_log = os.path.isfile(file_path) - mylogfile = codecs.open(_unicode_encode(file_path, + mylogfile = io.open(_unicode_encode(file_path, encoding=_encodings['fs'], errors='strict'), mode='a', encoding=_encodings['content'], errors='backslashreplace') @@ -50,7 +51,8 @@ def emergelog(xterm_titles, mystr, short_msg=None): # seek because we may have gotten held up by the lock. # if so, we may not be positioned at the end of the file. mylogfile.seek(0, 2) - mylogfile.write(str(time.time())[:10]+": "+mystr+"\n") + mylogfile.write(_unicode_decode( + str(time.time())[:10]+": "+mystr+"\n")) mylogfile.flush() finally: if mylock: diff --git a/pym/_emerge/resolver/output_helpers.py b/pym/_emerge/resolver/output_helpers.py index 874660f69..b7e73766c 100644 --- a/pym/_emerge/resolver/output_helpers.py +++ b/pym/_emerge/resolver/output_helpers.py @@ -7,7 +7,7 @@ in output.py __all__ = ( ) -import codecs +import io import re import sys @@ -502,7 +502,7 @@ def _calc_changelog(ebuildpath,current,next): next = next[:-3] changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog') try: - changelog = codecs.open(_unicode_encode(changelogpath, + changelog = io.open(_unicode_encode(changelogpath, encoding=_encodings['fs'], errors='strict'), mode='r', encoding=_encodings['repo.content'], errors='replace' ).read() |