cros_venv: get it working w/Python3
BUG=chromium:1052692
TEST=CQ passes
Change-Id: I8df7f4a4713c5dc90988c47c3c137baff652ee18
diff --git a/venv/cros_venv/flock.py b/venv/cros_venv/flock.py
index 8b97cc2..af2bbab 100644
--- a/venv/cros_venv/flock.py
+++ b/venv/cros_venv/flock.py
@@ -79,7 +79,7 @@
try:
self._fd = os.open(self._lockfile,
os.O_RDWR | os.O_CREAT,
- 0666)
+ 0o666)
break
except OSError as e: # pragma: no cover
logger.debug('Error opening lock file: %s', e)
diff --git a/venv/cros_venv/test_flock.py b/venv/cros_venv/test_flock.py
index 928a891..9c7e6c9 100644
--- a/venv/cros_venv/test_flock.py
+++ b/venv/cros_venv/test_flock.py
@@ -11,10 +11,15 @@
import fcntl
import logging
import os
+import sys
import unittest
import mock
-import subprocess32
+
+if sys.version_info.major < 3:
+ import subprocess32 as subprocess
+else:
+ import subprocess
from cros_venv import testcases
from cros_venv import flock
@@ -146,9 +151,9 @@
def _lock(filename):
"""Lock a file in another process for testing."""
logger.debug('Grabbing external lock on %s', filename)
- with subprocess32.Popen(
+ with subprocess.Popen(
['python', '-u', '-c', _LOCK_SCRIPT % {'filename': filename}],
- stdout=subprocess32.PIPE) as proc:
+ stdout=subprocess.PIPE) as proc:
logger.debug('Started external lock process for %s', filename)
proc.stdout.readline()
logger.debug('Finished grabbing external lock on %s', filename)
diff --git a/venv/cros_venv/test_venvlib.py b/venv/cros_venv/test_venvlib.py
index f53d6c5..36c8f05 100644
--- a/venv/cros_venv/test_venvlib.py
+++ b/venv/cros_venv/test_venvlib.py
@@ -6,12 +6,13 @@
from __future__ import print_function
from __future__ import unicode_literals
-from cStringIO import StringIO
import os
+import sys
import unittest
import warnings
import mock
+from six.moves import StringIO
from cros_venv import flock
from cros_venv import testcases
@@ -51,8 +52,11 @@
def test_repr(self):
"""Test repr() on VirtualenvMissingError."""
- self.assertEqual(repr(venvlib.VirtualenvMissingError('foo')),
- "VirtualenvMissingError(u'foo')")
+ if sys.version_info.major < 3:
+ exp = "VirtualenvMissingError(u'foo')"
+ else:
+ exp = "VirtualenvMissingError('foo')"
+ self.assertEqual(repr(venvlib.VirtualenvMissingError('foo')), exp)
class VenvlibTmpDirTestCase(testcases.TmpdirTestCase):
@@ -68,10 +72,14 @@
self.fail('OSError raised')
def test__log_check_call(self):
+ if sys.version_info.major < 3:
+ exp = "Running [u'echo', u'hi']\nhi\n"
+ else:
+ exp = "Running ['echo', 'hi']\nhi\n"
with open('tmp', 'w') as f:
venvlib._log_check_call(['echo', 'hi'], logfile=f)
with open('tmp', 'r') as f:
- self.assertEqual(f.read(), "Running [u'echo', u'hi']\nhi\n")
+ self.assertEqual(f.read(), exp)
class VenvPathsTestCase(unittest.TestCase):
@@ -80,8 +88,11 @@
def test_repr(self):
paths = venvlib._VenvPaths('/tmp')
- self.assertEqual(repr(paths),
- "_VenvPaths(u'/tmp')")
+ if sys.version_info.major < 3:
+ exp = "_VenvPaths(u'/tmp')"
+ else:
+ exp = "_VenvPaths('/tmp')"
+ self.assertEqual(repr(paths), exp)
def test_venvdir(self):
"""Test for venvdir attribute."""
diff --git a/venv/cros_venv/venvlib.py b/venv/cros_venv/venvlib.py
index cd6f097..b0eef45 100644
--- a/venv/cros_venv/venvlib.py
+++ b/venv/cros_venv/venvlib.py
@@ -20,11 +20,14 @@
import tempfile
import warnings
+import six
+
from cros_venv import constants
from cros_venv import flock
_PACKAGE_DIR = os.path.join(constants.REPO_DIR, 'pip_packages')
-_VENV_PY = '/usr/bin/python2.7'
+_VENV_PY = ('/usr/bin/python%s.%s' %
+ (sys.version_info.major, sys.version_info.minor))
_VIRTUALENV_COMMAND = 'virtualenv'
# BASE_DEPENDENCIES are pip requirements automatically included in every
@@ -157,7 +160,7 @@
Make sure to check for collisions.
"""
hasher = hashlib.md5()
- hasher.update(spec.reqs)
+ hasher.update(spec.reqs.encode('utf-8'))
return hasher.hexdigest()
@@ -212,7 +215,7 @@
try:
_log_check_call(command, logfile=logfile, env=env)
except OSError as e:
- raise VirtualenvMissingError(e), None, sys.exc_info()[2]
+ six.reraise(VirtualenvMissingError(e), None, sys.exc_info()[2])
class VirtualenvMissingError(Exception):
@@ -264,7 +267,7 @@
def _get_python_version():
"""Return the version string for the current Python."""
- return '.'.join(unicode(part) for part in sys.version_info[:3])
+ return '.'.join(str(part) for part in sys.version_info[:3])
def _get_cache_dir():