Commit 749ebc02 by Sébastien Eustace

Update get-poetry.py script to work with Python 2.7

parent f05d2951
...@@ -25,9 +25,14 @@ import subprocess ...@@ -25,9 +25,14 @@ import subprocess
import sys import sys
import tempfile import tempfile
from contextlib import contextmanager
from email.parser import Parser from email.parser import Parser
from pathlib import Path from glob import glob
from urllib.request import urlopen
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
FOREGROUND_COLORS = { FOREGROUND_COLORS = {
...@@ -97,6 +102,20 @@ def colorize(style, text): ...@@ -97,6 +102,20 @@ def colorize(style, text):
return '{}{}\033[0m'.format(STYLES[style], text) return '{}{}\033[0m'.format(STYLES[style], text)
@contextmanager
def temporary_directory(*args, **kwargs):
try:
from tempfile import TemporaryDirectory
with TemporaryDirectory(*args, **kwargs) as name:
yield name
except ImportError:
name = tempfile.mkdtemp(*args, **kwargs)
yield name
shutil.rmtree(name)
class Installer: class Installer:
...@@ -120,8 +139,10 @@ class Installer: ...@@ -120,8 +139,10 @@ class Installer:
def run(self): def run(self):
print(colorize('info', 'Retrieving metadata')) print(colorize('info', 'Retrieving metadata'))
with urlopen(self.METADATA_URL) as r:
metadata = json.loads(r.read().decode()) r = urlopen(self.METADATA_URL)
metadata = json.loads(r.read().decode())
r.close()
print('') print('')
releases = sorted( releases = sorted(
...@@ -172,36 +193,37 @@ class Installer: ...@@ -172,36 +193,37 @@ class Installer:
def install(self, version): def install(self, version):
# Most of the work will be delegated to pip # Most of the work will be delegated to pip
with tempfile.TemporaryDirectory(prefix='poetry-installer-') as dir: with temporary_directory(prefix='poetry-installer-') as dir:
dir = Path(dir) dist = os.path.join(dir, 'dist')
dist = dir / 'dist'
print(' - Getting dependencies') print(' - Getting dependencies')
self.call( self.call(
'pip', 'install', 'poetry=={}'.format(version), 'pip', 'install', 'poetry=={}'.format(version),
'--target', str(dist) '--target', dist
) )
print(' - Vendorizing dependencies') print(' - Vendorizing dependencies')
poetry_dir = dist / 'poetry' poetry_dir = os.path.join(dist, 'poetry')
vendor_dir = poetry_dir / '_vendor' vendor_dir = os.path.join(poetry_dir, '_vendor')
# Everything, except poetry itself, should # Everything, except poetry itself, should
# be put in the _vendor directory # be put in the _vendor directory
for file in dist.glob('*'): for file in glob(os.path.join(dist, '*')):
if file.name.startswith('poetry'): if os.path.basename(file).startswith('poetry'):
continue continue
dest = vendor_dir / file.name dest = os.path.join(vendor_dir, os.path.basename(file))
if file.is_dir(): if os.path.isdir(file):
shutil.copytree(str(file), str(dest)) shutil.copytree(file, dest)
shutil.rmtree(str(file)) shutil.rmtree(file)
else: else:
shutil.copy(str(file), str(dest)) shutil.copy(file, dest)
os.unlink(str(file)) os.unlink(file)
wheel_data = dist / 'poetry-{}.dist-info'.format(version) / 'WHEEL' wheel_data = os.path.join(
with wheel_data.open() as f: dist, 'poetry-{}.dist-info'.format(version), 'WHEEL'
)
with open(wheel_data) as f:
wheel_data = Parser().parsestr(f.read()) wheel_data = Parser().parsestr(f.read())
tag = wheel_data['Tag'] tag = wheel_data['Tag']
...@@ -210,21 +232,21 @@ class Installer: ...@@ -210,21 +232,21 @@ class Installer:
print(' - Installing {}'.format(colorize('info', 'poetry'))) print(' - Installing {}'.format(colorize('info', 'poetry')))
shutil.make_archive( shutil.make_archive(
str(dir / 'poetry-{}-{}'.format(version, tag)), os.path.join(dir, 'poetry-{}-{}'.format(version, tag)),
format='zip', format='zip',
root_dir=str(dist) root_dir=str(dist)
) )
os.rename( os.rename(
str(dir / 'poetry-{}-{}.zip'.format(version, tag)), os.path.join(dir, 'poetry-{}-{}.zip'.format(version, tag)),
str(dir / 'poetry-{}-{}.whl'.format(version, tag)), os.path.join(dir, 'poetry-{}-{}.whl'.format(version, tag))
) )
self.call( self.call(
'pip', 'install', 'pip', 'install',
'--upgrade', '--upgrade',
'--no-deps', '--no-deps',
str(dir / 'poetry-{}-{}.whl'.format(version, tag)) os.path.join(dir, 'poetry-{}-{}.whl'.format(version, tag))
) )
print('') print('')
......
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