Commit 0124f2e0 by Sébastien Eustace

Fix setup.py generation for Python 2.7

parent 2ab69984
from __future__ import unicode_literals # -*- coding: utf-8 -*-
import os import os
import re import re
import tarfile import tarfile
...@@ -15,6 +14,7 @@ from typing import List ...@@ -15,6 +14,7 @@ from typing import List
from poetry.packages import Dependency from poetry.packages import Dependency
from poetry.utils._compat import Path from poetry.utils._compat import Path
from poetry.utils._compat import encode from poetry.utils._compat import encode
from poetry.utils._compat import to_str
from ..utils.helpers import normalize_file_permissions from ..utils.helpers import normalize_file_permissions
...@@ -92,6 +92,7 @@ class SdistBuilder(Builder): ...@@ -92,6 +92,7 @@ class SdistBuilder(Builder):
tar.addfile(tar_info) # Symlinks & ? tar.addfile(tar_info) # Symlinks & ?
setup = self.build_setup() setup = self.build_setup()
print(setup)
tar_info = tarfile.TarInfo(pjoin(tar_dir, 'setup.py')) tar_info = tarfile.TarInfo(pjoin(tar_dir, 'setup.py'))
tar_info.size = len(setup) tar_info.size = len(setup)
tar.addfile(tar_info, BytesIO(setup)) tar.addfile(tar_info, BytesIO(setup))
...@@ -101,8 +102,8 @@ class SdistBuilder(Builder): ...@@ -101,8 +102,8 @@ class SdistBuilder(Builder):
version=self._meta.version, version=self._meta.version,
summary=self._meta.summary, summary=self._meta.summary,
home_page=self._meta.home_page, home_page=self._meta.home_page,
author=self._meta.author, author=to_str(self._meta.author),
author_email=self._meta.author_email, author_email=to_str(self._meta.author_email),
)) ))
tar_info = tarfile.TarInfo(pjoin(tar_dir, 'PKG-INFO')) tar_info = tarfile.TarInfo(pjoin(tar_dir, 'PKG-INFO'))
...@@ -161,13 +162,13 @@ class SdistBuilder(Builder): ...@@ -161,13 +162,13 @@ class SdistBuilder(Builder):
return encode(SETUP.format( return encode(SETUP.format(
before='\n'.join(before), before='\n'.join(before),
name=self._meta.name, name=to_str(self._meta.name),
version=self._meta.version, version=to_str(self._meta.version),
description=self._meta.summary, description=to_str(self._meta.summary),
long_description=self._meta.description, long_description=to_str(self._meta.description),
author=self._meta.author, author=to_str(self._meta.author),
author_email=self._meta.author_email, author_email=to_str(self._meta.author_email),
url=self._meta.home_page, url=to_str(self._meta.home_page),
extra='\n '.join(extra), extra='\n '.join(extra),
after='\n'.join(after) after='\n'.join(after)
)) ))
...@@ -235,7 +236,9 @@ class SdistBuilder(Builder): ...@@ -235,7 +236,9 @@ class SdistBuilder(Builder):
for extra_name, reqs in package.extras.items(): for extra_name, reqs in package.extras.items():
for req in reqs: for req in reqs:
if req.name == dependency.name: if req.name == dependency.name:
requirement = dependency.to_pep_508(with_extras=False) requirement = to_str(
dependency.to_pep_508(with_extras=False)
)
if ';' in requirement: if ';' in requirement:
requirement, conditions = requirement.split(';') requirement, conditions = requirement.split(';')
...@@ -255,7 +258,7 @@ class SdistBuilder(Builder): ...@@ -255,7 +258,7 @@ class SdistBuilder(Builder):
extras[extra_name].append(requirement) extras[extra_name].append(requirement)
continue continue
requirement = dependency.to_pep_508() requirement = to_str(dependency.to_pep_508())
if ';' in requirement: if ';' in requirement:
requirement, conditions = requirement.split(';') requirement, conditions = requirement.split(';')
......
...@@ -54,3 +54,23 @@ def encode(string, encodings=None): ...@@ -54,3 +54,23 @@ def encode(string, encodings=None):
pass pass
return string.encode(encodings[0], errors='ignore') return string.encode(encodings[0], errors='ignore')
def to_str(string):
if isinstance(string, str) or not isinstance(string, (unicode, bytes)):
return string
if PY2:
method = 'encode'
else:
method = 'decode'
encodings = ['utf-8', 'latin1', 'ascii']
for encoding in encodings:
try:
return getattr(string, method)(encoding)
except (UnicodeEncodeError, UnicodeDecodeError):
pass
return getattr(string, method)(encodings[0], errors='ignore')
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