Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
setuptools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
setuptools
Commits
337ea160
Commit
337ea160
authored
Jan 07, 2016
by
Steve Kowalik
Browse files
Options
Browse Files
Download
Plain Diff
Merge from default.
parents
3bd5118e
d49c41c6
Changes
36
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
1139 additions
and
240 deletions
+1139
-240
.hgtags
.hgtags
+1
-0
CHANGES.txt
CHANGES.txt
+7
-0
MANIFEST.in
MANIFEST.in
+1
-0
pkg_resources/_vendor/six.py
pkg_resources/_vendor/six.py
+868
-0
pkg_resources/extern/__init__.py
pkg_resources/extern/__init__.py
+71
-0
pkg_resources/tests/test_resources.py
pkg_resources/tests/test_resources.py
+4
-6
pytest.ini
pytest.ini
+1
-1
setuptools/__init__.py
setuptools/__init__.py
+2
-1
setuptools/command/bdist_egg.py
setuptools/command/bdist_egg.py
+3
-2
setuptools/command/develop.py
setuptools/command/develop.py
+3
-2
setuptools/command/easy_install.py
setuptools/command/easy_install.py
+13
-15
setuptools/command/egg_info.py
setuptools/command/egg_info.py
+6
-6
setuptools/command/rotate.py
setuptools/command/rotate.py
+3
-2
setuptools/command/sdist.py
setuptools/command/sdist.py
+3
-2
setuptools/command/setopt.py
setuptools/command/setopt.py
+2
-2
setuptools/command/test.py
setuptools/command/test.py
+4
-3
setuptools/command/upload_docs.py
setuptools/command/upload_docs.py
+10
-8
setuptools/compat.py
setuptools/compat.py
+0
-70
setuptools/depends.py
setuptools/depends.py
+4
-2
setuptools/dist.py
setuptools/dist.py
+5
-5
setuptools/extern/__init__.py
setuptools/extern/__init__.py
+5
-0
setuptools/package_index.py
setuptools/package_index.py
+52
-45
setuptools/py26compat.py
setuptools/py26compat.py
+4
-1
setuptools/sandbox.py
setuptools/sandbox.py
+4
-4
setuptools/ssl_support.py
setuptools/ssl_support.py
+8
-13
setuptools/tests/__init__.py
setuptools/tests/__init__.py
+2
-2
setuptools/tests/contexts.py
setuptools/tests/contexts.py
+3
-3
setuptools/tests/server.py
setuptools/tests/server.py
+11
-8
setuptools/tests/test_develop.py
setuptools/tests/test_develop.py
+3
-2
setuptools/tests/test_easy_install.py
setuptools/tests/test_easy_install.py
+7
-10
setuptools/tests/test_integration.py
setuptools/tests/test_integration.py
+2
-2
setuptools/tests/test_packageindex.py
setuptools/tests/test_packageindex.py
+8
-7
setuptools/tests/test_sdist.py
setuptools/tests/test_sdist.py
+12
-11
setuptools/tests/test_test.py
setuptools/tests/test_test.py
+1
-0
setuptools/unicode_utils.py
setuptools/unicode_utils.py
+3
-3
tests/manual_test.py
tests/manual_test.py
+3
-2
No files found.
.hgtags
View file @
337ea160
...
...
@@ -233,3 +233,4 @@ cc41477ecf92f221c113736fac2830bf8079d40c 19.0
834782ce49154e9744e499e00eb392c347f9e034 19.1
0a2a3d89416e1642cf6f41d22dbc07b3d3c15a4d 19.1.1
5d24cf9d1ced76c406ab3c4a94c25d1fe79b94bc 19.2
66fa131a0d77a1b0e6f89ccb76b254cfb07d3da3 19.3b1
CHANGES.txt
View file @
337ea160
...
...
@@ -2,6 +2,13 @@
CHANGES
=======
----
19.3
----
* Issue #229: Implement new technique for readily incorporating
dependencies conditionally from vendored copies or primary
locations. Adds a new dependency on six.
----
19.3
...
...
MANIFEST.in
View file @
337ea160
...
...
@@ -3,6 +3,7 @@ recursive-include tests *.py
recursive-include setuptools/tests *.html
recursive-include docs *.py *.txt *.conf *.css *.css_t Makefile indexsidebar.html
recursive-include _markerlib *.py
recursive-include setuptools/_vendor *
recursive-include pkg_resources *.py *.txt
include *.py
include *.txt
...
...
pkg_resources/_vendor/six.py
0 → 100644
View file @
337ea160
This diff is collapsed.
Click to expand it.
pkg_resources/extern/__init__.py
0 → 100644
View file @
337ea160
import
sys
class
VendorImporter
:
"""
A PEP 302 meta path importer for finding optionally-vendored
or otherwise naturally-installed packages from root_name.
"""
def
__init__
(
self
,
root_name
,
vendored_names
=
(),
vendor_pkg
=
None
):
self
.
root_name
=
root_name
self
.
vendored_names
=
set
(
vendored_names
)
self
.
vendor_pkg
=
vendor_pkg
or
root_name
.
replace
(
'extern'
,
'_vendor'
)
@
property
def
search_path
(
self
):
"""
Search first the vendor package then as a natural package.
"""
yield
self
.
vendor_pkg
+
'.'
yield
''
def
find_module
(
self
,
fullname
,
path
=
None
):
"""
Return self when fullname starts with root_name and the
target module is one vendored through this importer.
"""
root
,
base
,
target
=
fullname
.
partition
(
self
.
root_name
+
'.'
)
if
root
:
return
if
not
any
(
map
(
target
.
startswith
,
self
.
vendored_names
)):
return
return
self
def
load_module
(
self
,
fullname
):
"""
Iterate over the search path to locate and load fullname.
"""
root
,
base
,
target
=
fullname
.
partition
(
self
.
root_name
+
'.'
)
for
prefix
in
self
.
search_path
:
try
:
extant
=
prefix
+
target
__import__
(
extant
)
mod
=
sys
.
modules
[
extant
]
sys
.
modules
[
fullname
]
=
mod
# mysterious hack:
# Remove the reference to the extant package/module
# on later Python versions to cause relative imports
# in the vendor package to resolve the same modules
# as those going through this importer.
if
sys
.
version_info
>
(
3
,
3
):
del
sys
.
modules
[
extant
]
return
mod
except
ImportError
:
pass
else
:
raise
ImportError
(
"The '{target}' package is required; "
"normally this is bundled with this package so if you get "
"this warning, consult the packager of your "
"distribution."
.
format
(
**
locals
())
)
def
install
(
self
):
"""
Install this importer into sys.meta_path if not already present.
"""
if
self
not
in
sys
.
meta_path
:
sys
.
meta_path
.
append
(
self
)
names
=
'packaging'
,
'six'
VendorImporter
(
__name__
,
names
).
install
()
pkg_resources/tests/test_resources.py
View file @
337ea160
...
...
@@ -5,14 +5,13 @@ import shutil
import
string
import
pytest
from
pkg_resources.extern
import
packaging
import
pkg_resources
from
pkg_resources
import
(
parse_requirements
,
VersionConflict
,
parse_version
,
Distribution
,
EntryPoint
,
Requirement
,
safe_version
,
safe_name
,
WorkingSet
)
packaging
=
pkg_resources
.
packaging
def
safe_repr
(
obj
,
short
=
False
):
""" copied from Python2.7"""
...
...
@@ -245,9 +244,8 @@ class TestWorkingSet:
with
pytest
.
raises
(
VersionConflict
)
as
vc
:
ws
.
resolve
(
parse_requirements
(
"Foo
\
n
Bar
\
n
"
))
msg
=
"Baz 1.0 is installed but Baz==2.0 is required by {'Bar'}"
if
pkg_resources
.
PY2
:
msg
=
msg
.
replace
(
"{'Bar'}"
,
"set(['Bar'])"
)
msg
=
"Baz 1.0 is installed but Baz==2.0 is required by "
msg
+=
repr
(
set
([
'Bar'
]))
assert
vc
.
value
.
report
()
==
msg
...
...
@@ -313,7 +311,7 @@ class TestEntryPoints:
def
checkSubMap
(
self
,
m
):
assert
len
(
m
)
==
len
(
self
.
submap_expect
)
for
key
,
ep
in
pkg_resources
.
iteritems
(
self
.
submap_expect
):
for
key
,
ep
in
self
.
submap_expect
.
items
(
):
assert
repr
(
m
.
get
(
key
))
==
repr
(
ep
)
submap_expect
=
dict
(
...
...
pytest.ini
View file @
337ea160
[pytest]
addopts
=
--doctest-modules --ignore release.py --ignore setuptools/lib2to3_ex.py --ignore tests/manual_test.py --ignore tests/shlib_test --doctest-glob=pkg_resources/api_tests.txt --ignore scripts/upload-old-releases-as-zip.py
norecursedirs
=
dist build *.egg
norecursedirs
=
dist build *.egg
setuptools/extern pkg_resources/extern
setuptools/__init__.py
View file @
337ea160
...
...
@@ -8,11 +8,12 @@ from distutils.core import Command as _Command
from
distutils.util
import
convert_path
from
fnmatch
import
fnmatchcase
from
setuptools.extern.six.moves
import
filterfalse
import
setuptools.version
from
setuptools.extension
import
Extension
from
setuptools.dist
import
Distribution
,
Feature
,
_get_unpatched
from
setuptools.depends
import
Require
from
setuptools.compat
import
filterfalse
__all__
=
[
'setup'
,
'Distribution'
,
'Feature'
,
'Command'
,
'Extension'
,
'Require'
,
...
...
setuptools/command/bdist_egg.py
View file @
337ea160
...
...
@@ -11,9 +11,10 @@ import os
import
marshal
import
textwrap
from
setuptools.extern
import
six
from
pkg_resources
import
get_build_platform
,
Distribution
,
ensure_directory
from
pkg_resources
import
EntryPoint
from
setuptools.compat
import
basestring
from
setuptools.extension
import
Library
from
setuptools
import
Command
...
...
@@ -413,7 +414,7 @@ def iter_symbols(code):
for
name
in
code
.
co_names
:
yield
name
for
const
in
code
.
co_consts
:
if
isinstance
(
const
,
basestring
):
if
isinstance
(
const
,
six
.
string_types
):
yield
const
elif
isinstance
(
const
,
CodeType
):
for
name
in
iter_symbols
(
const
):
...
...
setuptools/command/develop.py
View file @
337ea160
...
...
@@ -5,9 +5,10 @@ import os
import
glob
import
io
from
setuptools.extern
import
six
from
pkg_resources
import
Distribution
,
PathMetadata
,
normalize_path
from
setuptools.command.easy_install
import
easy_install
from
setuptools.compat
import
PY3
import
setuptools
...
...
@@ -87,7 +88,7 @@ class develop(easy_install):
" installation directory"
,
p
,
normalize_path
(
os
.
curdir
))
def
install_for_development
(
self
):
if
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
):
if
six
.
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
):
# If we run 2to3 we can not do this inplace:
# Ensure metadata is up-to-date
...
...
setuptools/command/easy_install.py
View file @
337ea160
...
...
@@ -40,6 +40,9 @@ import subprocess
import
shlex
import
io
from
setuptools.extern
import
six
from
setuptools.extern.six.moves
import
configparser
from
setuptools
import
Command
from
setuptools.sandbox
import
run_setup
from
setuptools.py31compat
import
get_path
,
get_config_vars
...
...
@@ -48,8 +51,6 @@ from setuptools.archive_util import unpack_archive
from
setuptools.package_index
import
PackageIndex
from
setuptools.package_index
import
URL_SCHEME
from
setuptools.command
import
bdist_egg
,
egg_info
from
setuptools.compat
import
(
iteritems
,
maxsize
,
basestring
,
unicode
,
reraise
,
PY2
,
PY3
)
from
pkg_resources
import
(
yield_lines
,
normalize_path
,
resource_string
,
ensure_directory
,
get_distribution
,
find_distributions
,
Environment
,
Requirement
,
...
...
@@ -82,13 +83,13 @@ def samefile(p1, p2):
return
norm_p1
==
norm_p2
if
PY2
:
if
six
.
PY2
:
def
_to_ascii
(
s
):
return
s
def
isascii
(
s
):
try
:
unicod
e
(
s
,
'ascii'
)
six
.
text_typ
e
(
s
,
'ascii'
)
return
True
except
UnicodeError
:
return
False
...
...
@@ -320,7 +321,7 @@ class easy_install(Command):
self
.
local_index
=
Environment
(
self
.
shadow_path
+
sys
.
path
)
if
self
.
find_links
is
not
None
:
if
isinstance
(
self
.
find_links
,
basestring
):
if
isinstance
(
self
.
find_links
,
six
.
string_types
):
self
.
find_links
=
self
.
find_links
.
split
()
else
:
self
.
find_links
=
[]
...
...
@@ -413,7 +414,7 @@ class easy_install(Command):
try
:
pid
=
os
.
getpid
()
except
:
pid
=
random
.
randint
(
0
,
maxsize
)
pid
=
random
.
randint
(
0
,
sys
.
maxsize
)
return
os
.
path
.
join
(
self
.
install_dir
,
"test-easy-install-%s"
%
pid
)
def
warn_deprecated_options
(
self
):
...
...
@@ -1245,7 +1246,7 @@ class easy_install(Command):
f
=
open
(
sitepy
,
'rb'
)
current
=
f
.
read
()
# we want str, not bytes
if
PY3
:
if
six
.
PY3
:
current
=
current
.
decode
()
f
.
close
()
...
...
@@ -1271,7 +1272,7 @@ class easy_install(Command):
if
not
self
.
user
:
return
home
=
convert_path
(
os
.
path
.
expanduser
(
"~"
))
for
name
,
path
in
iteritems
(
self
.
config_vars
):
for
name
,
path
in
six
.
iteritems
(
self
.
config_vars
):
if
path
.
startswith
(
home
)
and
not
os
.
path
.
isdir
(
path
):
self
.
debug_print
(
"os.makedirs('%s', 0o700)"
%
path
)
os
.
makedirs
(
path
,
0o700
)
...
...
@@ -1415,9 +1416,6 @@ def extract_wininst_cfg(dist_filename):
return
None
f
.
seek
(
prepended
-
12
)
from
setuptools.compat
import
StringIO
,
configparser
import
struct
tag
,
cfglen
,
bmlen
=
struct
.
unpack
(
"<iii"
,
f
.
read
(
12
))
if
tag
not
in
(
0x1234567A
,
0x1234567B
):
return
None
# not a valid tag
...
...
@@ -1432,7 +1430,7 @@ def extract_wininst_cfg(dist_filename):
# Now the config is in bytes, but for RawConfigParser, it should
# be text, so decode it.
config
=
config
.
decode
(
sys
.
getfilesystemencoding
())
cfg
.
readfp
(
StringIO
(
config
))
cfg
.
readfp
(
six
.
StringIO
(
config
))
except
configparser
.
Error
:
return
None
if
not
cfg
.
has_section
(
'metadata'
)
or
not
cfg
.
has_section
(
'Setup'
):
...
...
@@ -1467,7 +1465,7 @@ def get_exe_prefixes(exe_filename):
continue
if
parts
[
0
].
upper
()
in
(
'PURELIB'
,
'PLATLIB'
):
contents
=
z
.
read
(
name
)
if
PY3
:
if
six
.
PY3
:
contents
=
contents
.
decode
()
for
pth
in
yield_lines
(
contents
):
pth
=
pth
.
strip
().
replace
(
'
\
\
'
,
'/'
)
...
...
@@ -1643,7 +1641,7 @@ def auto_chmod(func, arg, exc):
chmod
(
arg
,
stat
.
S_IWRITE
)
return
func
(
arg
)
et
,
ev
,
_
=
sys
.
exc_info
()
reraise
(
et
,
(
ev
[
0
],
ev
[
1
]
+
(
" %s %s"
%
(
func
,
arg
))))
six
.
reraise
(
et
,
(
ev
[
0
],
ev
[
1
]
+
(
" %s %s"
%
(
func
,
arg
))))
def
update_dist_caches
(
dist_path
,
fix_zipimporter_caches
):
...
...
@@ -2209,7 +2207,7 @@ def get_win_launcher(type):
def
load_launcher_manifest
(
name
):
manifest
=
pkg_resources
.
resource_string
(
__name__
,
'launcher manifest.xml'
)
if
PY2
:
if
six
.
PY2
:
return
manifest
%
vars
()
else
:
return
manifest
.
decode
(
'utf-8'
)
%
vars
()
...
...
setuptools/command/egg_info.py
View file @
337ea160
...
...
@@ -14,7 +14,7 @@ import io
import
warnings
import
time
from
setuptools.
compat
import
basestring
,
PY3
,
StringIO
from
setuptools.
extern
import
six
from
setuptools
import
Command
from
setuptools.command.sdist
import
sdist
...
...
@@ -26,7 +26,7 @@ from pkg_resources import (
safe_version
,
yield_lines
,
EntryPoint
,
iter_entry_points
,
to_filename
)
import
setuptools.unicode_utils
as
unicode_utils
from
pkg_resources
import
packaging
from
pkg_resources
.extern
import
packaging
try
:
from
setuptools_svn
import
svn_utils
...
...
@@ -148,7 +148,7 @@ class egg_info(Command):
to the file.
"""
log
.
info
(
"writing %s to %s"
,
what
,
filename
)
if
PY3
:
if
six
.
PY3
:
data
=
data
.
encode
(
"utf-8"
)
if
not
self
.
dry_run
:
f
=
open
(
filename
,
'wb'
)
...
...
@@ -412,7 +412,7 @@ def _write_requirements(stream, reqs):
def
write_requirements
(
cmd
,
basename
,
filename
):
dist
=
cmd
.
distribution
data
=
StringIO
()
data
=
six
.
StringIO
()
_write_requirements
(
data
,
dist
.
install_requires
)
extras_require
=
dist
.
extras_require
or
{}
for
extra
in
sorted
(
extras_require
):
...
...
@@ -452,12 +452,12 @@ def write_arg(cmd, basename, filename, force=False):
def
write_entries
(
cmd
,
basename
,
filename
):
ep
=
cmd
.
distribution
.
entry_points
if
isinstance
(
ep
,
basestring
)
or
ep
is
None
:
if
isinstance
(
ep
,
six
.
string_types
)
or
ep
is
None
:
data
=
ep
elif
ep
is
not
None
:
data
=
[]
for
section
,
contents
in
sorted
(
ep
.
items
()):
if
not
isinstance
(
contents
,
basestring
):
if
not
isinstance
(
contents
,
six
.
string_types
):
contents
=
EntryPoint
.
parse_group
(
section
,
contents
)
contents
=
'
\
n
'
.
join
(
sorted
(
map
(
str
,
contents
.
values
())))
data
.
append
(
'[%s]
\
n
%s
\
n
\
n
'
%
(
section
,
contents
))
...
...
setuptools/command/rotate.py
View file @
337ea160
...
...
@@ -3,8 +3,9 @@ from distutils import log
from
distutils.errors
import
DistutilsOptionError
import
os
from
setuptools.extern
import
six
from
setuptools
import
Command
from
setuptools.compat
import
basestring
class
rotate
(
Command
):
...
...
@@ -36,7 +37,7 @@ class rotate(Command):
self
.
keep
=
int
(
self
.
keep
)
except
ValueError
:
raise
DistutilsOptionError
(
"--keep must be an integer"
)
if
isinstance
(
self
.
match
,
basestring
):
if
isinstance
(
self
.
match
,
six
.
string_types
):
self
.
match
=
[
convert_path
(
p
.
strip
())
for
p
in
self
.
match
.
split
(
','
)
]
...
...
setuptools/command/sdist.py
View file @
337ea160
...
...
@@ -5,7 +5,8 @@ import os
import
sys
import
io
from
setuptools.compat
import
PY3
from
setuptools.extern
import
six
from
setuptools.utils
import
cs_path_exists
import
pkg_resources
...
...
@@ -181,7 +182,7 @@ class sdist(orig.sdist):
manifest
=
open
(
self
.
manifest
,
'rbU'
)
for
line
in
manifest
:
# The manifest must contain UTF-8. See #303.
if
PY3
:
if
six
.
PY3
:
try
:
line
=
line
.
decode
(
'UTF-8'
)
except
UnicodeDecodeError
:
...
...
setuptools/command/setopt.py
View file @
337ea160
...
...
@@ -4,6 +4,8 @@ from distutils.errors import DistutilsOptionError
import
distutils
import
os
from
setuptools.extern.six.moves
import
configparser
from
setuptools
import
Command
...
...
@@ -37,8 +39,6 @@ def edit_config(filename, settings, dry_run=False):
while a dictionary lists settings to be changed or deleted in that section.
A setting of ``None`` means to delete that setting.
"""
from
setuptools.compat
import
configparser
log
.
debug
(
"Reading configuration from %s"
,
filename
)
opts
=
configparser
.
RawConfigParser
()
opts
.
read
([
filename
])
...
...
setuptools/command/test.py
View file @
337ea160
...
...
@@ -2,11 +2,12 @@ from distutils.errors import DistutilsOptionError
from
unittest
import
TestLoader
import
sys
from
setuptools.extern
import
six
from
pkg_resources
import
(
resource_listdir
,
resource_exists
,
normalize_path
,
working_set
,
_namespace_packages
,
add_activation_listener
,
require
,
EntryPoint
)
from
setuptools
import
Command
from
setuptools.compat
import
PY3
from
setuptools.py31compat
import
unittest_main
...
...
@@ -100,7 +101,7 @@ class test(Command):
yield
self
.
test_suite
def
with_project_on_sys_path
(
self
,
func
):
with_2to3
=
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
)
with_2to3
=
six
.
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
)
if
with_2to3
:
# If we run 2to3 we can not do this inplace:
...
...
@@ -160,7 +161,7 @@ class test(Command):
# Purge modules under test from sys.modules. The test loader will
# re-import them from the build location. Required when 2to3 is used
# with namespace packages.
if
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
):
if
six
.
PY3
and
getattr
(
self
.
distribution
,
'use_2to3'
,
False
):
module
=
self
.
test_suite
.
split
(
'.'
)[
0
]
if
module
in
_namespace_packages
:
del_modules
=
[]
...
...
setuptools/command/upload_docs.py
View file @
337ea160
...
...
@@ -16,17 +16,19 @@ import tempfile
import
sys
import
shutil
from
setuptools.compat
import
httplib
,
urlparse
,
unicode
,
iteritems
,
PY3
from
setuptools.extern
import
six
from
setuptools.extern.six.moves
import
http_client
,
urllib
from
pkg_resources
import
iter_entry_points
errors
=
'surrogateescape'
if
PY3
else
'strict'
errors
=
'surrogateescape'
if
six
.
PY3
else
'strict'
# This is not just a replacement for byte literals
# but works as a general purpose encoder
def
b
(
s
,
encoding
=
'utf-8'
):
if
isinstance
(
s
,
unicod
e
):
if
isinstance
(
s
,
six
.
text_typ
e
):
return
s
.
encode
(
encoding
,
errors
)
return
s
...
...
@@ -113,7 +115,7 @@ class upload_docs(upload):
# set up the authentication
credentials
=
b
(
self
.
username
+
':'
+
self
.
password
)
credentials
=
standard_b64encode
(
credentials
)
if
PY3
:
if
six
.
PY3
:
credentials
=
credentials
.
decode
(
'ascii'
)
auth
=
"Basic "
+
credentials
...
...
@@ -122,7 +124,7 @@ class upload_docs(upload):
sep_boundary
=
b
(
'
\
n
--'
)
+
b
(
boundary
)
end_boundary
=
sep_boundary
+
b
(
'--'
)
body
=
[]
for
key
,
values
in
iteritems
(
data
):
for
key
,
values
in
six
.
iteritems
(
data
):
title
=
'
\
n
Content-Disposition: form-data; name="%s"'
%
key
# handle multiple entries for the same name
if
not
isinstance
(
values
,
list
):
...
...
@@ -150,12 +152,12 @@ class upload_docs(upload):
# We can't use urllib2 since we need to send the Basic
# auth right with the first request
schema
,
netloc
,
url
,
params
,
query
,
fragments
=
\
urlparse
(
self
.
repository
)
url
lib
.
parse
.
url
parse
(
self
.
repository
)
assert
not
params
and
not
query
and
not
fragments
if
schema
==
'http'
:
conn
=
http
lib
.
HTTPConnection
(
netloc
)
conn
=
http
_client
.
HTTPConnection
(
netloc
)
elif
schema
==
'https'
:
conn
=
http
lib
.
HTTPSConnection
(
netloc
)
conn
=
http
_client
.
HTTPSConnection
(
netloc
)
else
:
raise
AssertionError
(
"unsupported schema "
+
schema
)
...
...
setuptools/compat.py
deleted
100644 → 0
View file @
3bd5118e
import
sys
import
itertools
PY3
=
sys
.
version_info
>=
(
3
,)
PY2
=
not
PY3
if
PY2
:
basestring
=
basestring
import
__builtin__
as
builtins
import
ConfigParser
as
configparser
from
StringIO
import
StringIO
BytesIO
=
StringIO
func_code
=
lambda
o
:
o
.
func_code
func_globals
=
lambda
o
:
o
.
func_globals
im_func
=
lambda
o
:
o
.
im_func
from
htmlentitydefs
import
name2codepoint
import
httplib
from
BaseHTTPServer
import
HTTPServer
from
SimpleHTTPServer
import
SimpleHTTPRequestHandler
from
BaseHTTPServer
import
BaseHTTPRequestHandler
iteritems
=
lambda
o
:
o
.
iteritems
()
long_type
=
long
maxsize
=
sys
.
maxint
unichr
=
unichr
unicode
=
unicode
bytes
=
str
from
urllib
import
url2pathname
,
splittag
,
pathname2url
import
urllib2
from
urllib2
import
urlopen
,
HTTPError
,
URLError
,
unquote
,
splituser
from
urlparse
import
urlparse
,
urlunparse
,
urljoin
,
urlsplit
,
urlunsplit
filterfalse
=
itertools
.
ifilterfalse
filter
=
itertools
.
ifilter
map
=
itertools
.
imap
exec
(
"""def reraise(tp, value, tb=None):
raise tp, value, tb"""
)
if
PY3
:
basestring
=
str
import
builtins
import
configparser
from
io
import
StringIO
,
BytesIO
func_code
=
lambda
o
:
o
.
__code__
func_globals
=
lambda
o
:
o
.
__globals__
im_func
=
lambda
o
:
o
.
__func__
from
html.entities
import
name2codepoint
import
http.client
as
httplib
from
http.server
import
HTTPServer
,
SimpleHTTPRequestHandler
from
http.server
import
BaseHTTPRequestHandler
iteritems
=
lambda
o
:
o
.
items
()
long_type
=
int
maxsize
=
sys
.
maxsize
unichr
=
chr
unicode
=
str
bytes
=
bytes
from
urllib.error
import
HTTPError
,
URLError
import
urllib.request
as
urllib2
from
urllib.request
import
urlopen
,
url2pathname
,
pathname2url
from
urllib.parse
import
(
urlparse
,
urlunparse
,
unquote
,
splituser
,
urljoin
,
urlsplit
,
urlunsplit
,
splittag
,
)
filterfalse
=
itertools
.
filterfalse
filter
=
filter
map
=
map
def
reraise
(
tp
,
value
,
tb
=
None
):
if
value
.
__traceback__
is
not
tb
:
raise
value
.
with_traceback
(
tb
)
raise
value
setuptools/depends.py
View file @
337ea160
...
...
@@ -3,7 +3,8 @@ import imp
import
marshal
from
imp
import
PKG_DIRECTORY
,
PY_COMPILED
,
PY_SOURCE
,
PY_FROZEN
from
distutils.version
import
StrictVersion
from
setuptools
import
compat
from
setuptools.extern
import
six
__all__
=
[
'Require'
,
'find_module'
,
'get_module_constant'
,
'extract_constant'
...
...
@@ -99,7 +100,8 @@ def _iter_code(code):
ptr
+=
3
if
op
==
EXTENDED_ARG
:
extended_arg
=
arg
*
compat
.
long_type
(
65536
)
long_type
=
six
.
integer_types
[
-
1
]
extended_arg
=
arg
*
long_type
(
65536
)
continue
else
:
...
...
setuptools/dist.py
View file @
337ea160
...
...
@@ -13,13 +13,13 @@ from distutils.core import Distribution as _Distribution
from
distutils.errors
import
(
DistutilsOptionError
,
DistutilsPlatformError
,
DistutilsSetupError
)
from
setuptools.extern
import
six
from
pkg_resources.extern
import
packaging
from
setuptools.depends
import
Require
from
setuptools.compat
import
basestring
,
PY2
from
setuptools
import
windows_support
import
pkg_resources
packaging
=
pkg_resources
.
packaging
def
_get_unpatched
(
cls
):
"""Protect against re-patching the distutils if reloaded
...
...
@@ -138,7 +138,7 @@ def check_entry_points(dist, attr, value):
raise
DistutilsSetupError
(
e
)
def
check_test_suite
(
dist
,
attr
,
value
):
if
not
isinstance
(
value
,
basestring
):
if
not
isinstance
(
value
,
six
.
string_types
):
raise
DistutilsSetupError
(
"test_suite must be a string"
)
def
check_package_data
(
dist
,
attr
,
value
):
...
...
@@ -682,7 +682,7 @@ class Distribution(_Distribution):
"""
import
sys
if
PY2
or
self
.
help_commands
:
if
six
.
PY2
or
self
.
help_commands
:
return
_Distribution
.
handle_display_options
(
self
,
option_order
)
# Stdout may be StringIO (e.g. in tests)
...
...
setuptools/extern/__init__.py
0 → 100644
View file @
337ea160
from
pkg_resources.extern
import
VendorImporter
names
=
'six'
,
VendorImporter
(
__name__
,
names
,
'pkg_resources._vendor'
).
install
()
setuptools/package_index.py
View file @
337ea160
This diff is collapsed.
Click to expand it.
setuptools/py26compat.py
View file @
337ea160
...
...
@@ -4,7 +4,10 @@ Compatibility Support for Python 2.6 and earlier
import
sys
from
setuptools.compat
import
splittag
try
:
from
urllib.parse
import
splittag
except
ImportError
:
from
urllib
import
splittag
def
strip_fragment
(
url
):
"""
...
...
setuptools/sandbox.py
View file @
337ea160
...
...
@@ -8,6 +8,9 @@ import re
import
contextlib
import
pickle
from
setuptools.extern
import
six
from
setuptools.extern.six.moves
import
builtins
import
pkg_resources
if
sys
.
platform
.
startswith
(
'java'
):
...
...
@@ -22,9 +25,6 @@ _open = open
from
distutils.errors
import
DistutilsError
from
pkg_resources
import
working_set
from
setuptools
import
compat
from
setuptools.compat
import
builtins
__all__
=
[
"AbstractSandbox"
,
"DirectorySandbox"
,
"SandboxViolation"
,
"run_setup"
,
]
...
...
@@ -138,7 +138,7 @@ class ExceptionSaver:
return
type
,
exc
=
map
(
pickle
.
loads
,
self
.
_saved
)
compat
.
reraise
(
type
,
exc
,
self
.
_tb
)
six
.
reraise
(
type
,
exc
,
self
.
_tb
)
@
contextlib
.
contextmanager
...
...
setuptools/ssl_support.py
View file @
337ea160
...
...
@@ -3,9 +3,10 @@ import socket
import
atexit
import
re
from
setuptools.extern.six.moves
import
urllib
,
http_client
import
pkg_resources
from
pkg_resources
import
ResolutionError
,
ExtractionError
from
setuptools.compat
import
urllib2
try
:
import
ssl
...
...
@@ -27,17 +28,11 @@ cert_paths = """
"""
.
strip
().
split
()
HTTPSHandler
=
HTTPSConnection
=
object
for
what
,
where
in
(
(
'HTTPSHandler'
,
[
'urllib2'
,
'urllib.request'
]),
(
'HTTPSConnection'
,
[
'httplib'
,
'http.client'
]),
):
for
module
in
where
:
try
:
exec
(
"from %s import %s"
%
(
module
,
what
))
except
ImportError
:
pass
try
:
HTTPSHandler
=
urllib
.
request
.
HTTPSHandler
HTTPSConnection
=
http_client
.
HTTPSConnection
except
AttributeError
:
HTTPSHandler
=
HTTPSConnection
=
object
is_available
=
ssl
is
not
None
and
object
not
in
(
HTTPSHandler
,
HTTPSConnection
)
...
...
@@ -198,7 +193,7 @@ class VerifyingHTTPSConn(HTTPSConnection):
def opener_for(ca_bundle=None):
"""Get a urlopen() replacement that uses ca_bundle for verification"""
return urllib
2
.build_opener(
return urllib
.request
.build_opener(
VerifyingHTTPSHandler(ca_bundle or find_ca_bundle())
).open
...
...
setuptools/tests/__init__.py
View file @
337ea160
...
...
@@ -7,8 +7,8 @@ from distutils.errors import DistutilsOptionError, DistutilsPlatformError
from
distutils.errors
import
DistutilsSetupError
from
distutils.core
import
Extension
from
distutils.version
import
LooseVersion
from
setuptools.compat
import
func_code
from
setuptools.extern
import
six
import
pytest
import
setuptools.dist
...
...
@@ -52,7 +52,7 @@ class TestDepends:
x
=
"test"
y
=
z
fc
=
func
_code
(
f1
)
fc
=
six
.
get_function
_code
(
f1
)
# unrecognized name
assert
dep
.
extract_constant
(
fc
,
'q'
,
-
1
)
is
None
...
...
setuptools/tests/contexts.py
View file @
337ea160
...
...
@@ -5,7 +5,7 @@ import sys
import
contextlib
import
site
from
..compat
import
StringIO
from
setuptools.extern
import
six
@
contextlib
.
contextmanager
...
...
@@ -57,8 +57,8 @@ def quiet():
old_stdout
=
sys
.
stdout
old_stderr
=
sys
.
stderr
new_stdout
=
sys
.
stdout
=
StringIO
()
new_stderr
=
sys
.
stderr
=
StringIO
()
new_stdout
=
sys
.
stdout
=
six
.
StringIO
()
new_stderr
=
sys
.
stderr
=
six
.
StringIO
()
try
:
yield
new_stdout
,
new_stderr
finally
:
...
...
setuptools/tests/server.py
View file @
337ea160
...
...
@@ -3,10 +3,11 @@
import
time
import
threading
from
setuptools.compat
import
BaseHTTPRequestHandler
from
setuptools.compat
import
HTTPServer
,
SimpleHTTPRequestHandler
class
IndexServer
(
HTTPServer
):
from
setuptools.extern.six.moves
import
BaseHTTPServer
,
SimpleHTTPServer
class
IndexServer
(
BaseHTTPServer
.
HTTPServer
):
"""Basic single-threaded http server simulating a package index
You can use this server in unittest like this::
...
...
@@ -18,8 +19,9 @@ class IndexServer(HTTPServer):
s.stop()
"""
def
__init__
(
self
,
server_address
=
(
''
,
0
),
RequestHandlerClass
=
SimpleHTTPRequestHandler
):
HTTPServer
.
__init__
(
self
,
server_address
,
RequestHandlerClass
)
RequestHandlerClass
=
SimpleHTTPServer
.
SimpleHTTPRequestHandler
):
BaseHTTPServer
.
HTTPServer
.
__init__
(
self
,
server_address
,
RequestHandlerClass
)
self
.
_run
=
True
def
start
(
self
):
...
...
@@ -40,19 +42,20 @@ class IndexServer(HTTPServer):
port
=
self
.
server_port
return
'http://127.0.0.1:%s/setuptools/tests/indexes/'
%
port
class
RequestRecorder
(
BaseHTTPRequestHandler
):
class
RequestRecorder
(
BaseHTTP
Server
.
BaseHTTP
RequestHandler
):
def
do_GET
(
self
):
requests
=
vars
(
self
.
server
).
setdefault
(
'requests'
,
[])
requests
.
append
(
self
)
self
.
send_response
(
200
,
'OK'
)
class
MockServer
(
HTTPServer
,
threading
.
Thread
):
class
MockServer
(
BaseHTTPServer
.
HTTPServer
,
threading
.
Thread
):
"""
A simple HTTP Server that records the requests made to it.
"""
def
__init__
(
self
,
server_address
=
(
''
,
0
),
RequestHandlerClass
=
RequestRecorder
):
HTTPServer
.
__init__
(
self
,
server_address
,
RequestHandlerClass
)
BaseHTTPServer
.
HTTPServer
.
__init__
(
self
,
server_address
,
RequestHandlerClass
)
threading
.
Thread
.
__init__
(
self
)
self
.
setDaemon
(
True
)
self
.
requests
=
[]
...
...
setuptools/tests/test_develop.py
View file @
337ea160
...
...
@@ -5,12 +5,13 @@ import site
import
sys
import
io
from
setuptools.extern
import
six
import
pytest
from
setuptools.command.develop
import
develop
from
setuptools.dist
import
Distribution
from
.
import
contexts
from
setuptools.compat
import
PY3
SETUP_PY
=
"""
\
...
...
@@ -85,7 +86,7 @@ class TestDevelop:
with
io
.
open
(
fn
)
as
init_file
:
init
=
init_file
.
read
().
strip
()
expected
=
'print("foo")'
if
PY3
else
'print "foo"'
expected
=
'print("foo")'
if
six
.
PY3
else
'print "foo"'
assert
init
==
expected
def
test_console_scripts
(
self
,
tmpdir
):
...
...
setuptools/tests/test_easy_install.py
View file @
337ea160
...
...
@@ -14,6 +14,10 @@ import tarfile
import
logging
import
itertools
import
distutils.errors
import
io
from
setuptools.extern
import
six
from
setuptools.extern.six.moves
import
urllib
import
pytest
try
:
...
...
@@ -22,8 +26,6 @@ except ImportError:
import
mock
from
setuptools
import
sandbox
from
setuptools
import
compat
from
setuptools.compat
import
StringIO
,
BytesIO
,
urlparse
from
setuptools.sandbox
import
run_setup
import
setuptools.command.easy_install
as
ei
from
setuptools.command.easy_install
import
PthDistributions
...
...
@@ -272,7 +274,7 @@ class TestSetupRequires:
p_index
=
setuptools
.
tests
.
server
.
MockServer
()
p_index
.
start
()
netloc
=
1
p_index_loc
=
urlparse
(
p_index
.
url
)[
netloc
]
p_index_loc
=
url
lib
.
parse
.
url
parse
(
p_index
.
url
)[
netloc
]
if
p_index_loc
.
endswith
(
':0'
):
# Some platforms (Jython) don't find a port to which to bind,
# so skip this test for them.
...
...
@@ -391,12 +393,7 @@ def make_trivial_sdist(dist_path, setup_py):
"""
setup_py_file
=
tarfile
.
TarInfo
(
name
=
'setup.py'
)
try
:
# Python 3 (StringIO gets converted to io module)
MemFile
=
BytesIO
except
AttributeError
:
MemFile
=
StringIO
setup_py_bytes
=
MemFile
(
setup_py
.
encode
(
'utf-8'
))
setup_py_bytes
=
io
.
BytesIO
(
setup_py
.
encode
(
'utf-8'
))
setup_py_file
.
size
=
len
(
setup_py_bytes
.
getvalue
())
with
tarfile_open
(
dist_path
,
'w:gz'
)
as
dist
:
dist
.
addfile
(
setup_py_file
,
fileobj
=
setup_py_bytes
)
...
...
@@ -431,7 +428,7 @@ class TestScriptHeader:
assert
actual
==
expected
@
pytest
.
mark
.
xfail
(
compat
.
PY3
and
is_ascii
,
six
.
PY3
and
is_ascii
,
reason
=
"Test fails in this locale on Python 3"
)
@
mock
.
patch
.
dict
(
sys
.
modules
,
java
=
mock
.
Mock
(
lang
=
mock
.
Mock
(
System
=
...
...
setuptools/tests/test_integration.py
View file @
337ea160
...
...
@@ -7,12 +7,12 @@ import glob
import
os
import
sys
from
setuptools.extern.six.moves
import
urllib
import
pytest
from
setuptools.command.easy_install
import
easy_install
from
setuptools.command
import
easy_install
as
easy_install_pkg
from
setuptools.dist
import
Distribution
from
setuptools.compat
import
urlopen
def
setup_module
(
module
):
...
...
@@ -26,7 +26,7 @@ def setup_module(module):
pass
try
:
urlopen
(
'https://pypi.python.org/pypi'
)
url
lib
.
request
.
url
open
(
'https://pypi.python.org/pypi'
)
except
Exception
as
exc
:
pytest
.
skip
(
str
(
exc
))
...
...
setuptools/tests/test_packageindex.py
View file @
337ea160
...
...
@@ -4,9 +4,10 @@ import sys
import
os
import
distutils.errors
from
setuptools.
compat
import
httplib
,
HTTPError
,
unicode
,
pathname2url
from
.textwrap
import
DALS
from
setuptools.
extern
import
six
from
setuptools.extern.six.moves
import
urllib
,
http_client
from
.textwrap
import
DALS
import
pkg_resources
import
setuptools.package_index
from
setuptools.tests.server
import
IndexServer
...
...
@@ -22,7 +23,7 @@ class TestPackageIndex:
except
Exception
as
v
:
assert
url
in
str
(
v
)
else
:
assert
isinstance
(
v
,
HTTPError
)
assert
isinstance
(
v
,
urllib
.
error
.
HTTPError
)
def
test_bad_url_typo
(
self
):
# issue 16
...
...
@@ -38,7 +39,7 @@ class TestPackageIndex:
except
Exception
as
v
:
assert
url
in
str
(
v
)
else
:
assert
isinstance
(
v
,
HTTPError
)
assert
isinstance
(
v
,
urllib
.
error
.
HTTPError
)
def
test_bad_url_bad_status_line
(
self
):
index
=
setuptools
.
package_index
.
PackageIndex
(
...
...
@@ -46,7 +47,7 @@ class TestPackageIndex:
)
def
_urlopen
(
*
args
):
raise
http
lib
.
BadStatusLine
(
'line'
)
raise
http
_client
.
BadStatusLine
(
'line'
)
index
.
opener
=
_urlopen
url
=
'http://example.com'
...
...
@@ -70,7 +71,7 @@ class TestPackageIndex:
try
:
index
.
open_url
(
url
)
except
distutils
.
errors
.
DistutilsError
as
error
:
msg
=
unicod
e
(
error
)
msg
=
six
.
text_typ
e
(
error
)
assert
'nonnumeric port'
in
msg
or
'getaddrinfo failed'
in
msg
or
'Name or service not known'
in
msg
return
raise
RuntimeError
(
"Did not raise"
)
...
...
@@ -167,7 +168,7 @@ class TestPackageIndex:
index_file
=
tmpdir
/
'index.html'
with
index_file
.
open
(
'w'
)
as
f
:
f
.
write
(
'<div>content</div>'
)
url
=
'file:'
+
pathname2url
(
str
(
tmpdir
))
+
'/'
url
=
'file:'
+
urllib
.
request
.
pathname2url
(
str
(
tmpdir
))
+
'/'
res
=
setuptools
.
package_index
.
local_open
(
url
)
assert
'content'
in
res
.
read
()
...
...
setuptools/tests/test_sdist.py
View file @
337ea160
...
...
@@ -9,17 +9,18 @@ import unicodedata
import
contextlib
import
io
from
setuptools.extern
import
six
import
pytest
import
pkg_resources
from
setuptools.compat
import
StringIO
,
unicode
,
PY3
,
PY2
from
setuptools.command.sdist
import
sdist
from
setuptools.command.egg_info
import
manifest_maker
from
setuptools.dist
import
Distribution
from
setuptools.tests
import
fail_on_ascii
py3_only
=
pytest
.
mark
.
xfail
(
PY2
,
reason
=
"Test runs on Python 3 only"
)
py3_only
=
pytest
.
mark
.
xfail
(
six
.
PY2
,
reason
=
"Test runs on Python 3 only"
)
SETUP_ATTRS
=
{
...
...
@@ -37,7 +38,7 @@ setup(**%r)
"""
%
SETUP_ATTRS
if
PY3
:
if
six
.
PY3
:
LATIN1_FILENAME
=
'smörbröd.py'
.
encode
(
'latin-1'
)
else
:
LATIN1_FILENAME
=
'sm
\
xf6
rbr
\
xf6
d.py'
...
...
@@ -47,7 +48,7 @@ else:
@
contextlib
.
contextmanager
def
quiet
():
old_stdout
,
old_stderr
=
sys
.
stdout
,
sys
.
stderr
sys
.
stdout
,
sys
.
stderr
=
StringIO
(),
StringIO
()
sys
.
stdout
,
sys
.
stderr
=
six
.
StringIO
(),
six
.
StringIO
()
try
:
yield
finally
:
...
...
@@ -56,14 +57,14 @@ def quiet():
# Fake byte literals for Python <= 2.5
def
b
(
s
,
encoding
=
'utf-8'
):
if
PY3
:
if
six
.
PY3
:
return
s
.
encode
(
encoding
)
return
s
# Convert to POSIX path
def
posix
(
path
):
if
PY3
and
not
isinstance
(
path
,
str
):
if
six
.
PY3
and
not
isinstance
(
path
,
str
):
return
path
.
replace
(
os
.
sep
.
encode
(
'ascii'
),
b
(
'/'
))
else
:
return
path
.
replace
(
os
.
sep
,
'/'
)
...
...
@@ -71,7 +72,7 @@ def posix(path):
# HFS Plus uses decomposed UTF-8
def
decompose
(
path
):
if
isinstance
(
path
,
unicod
e
):
if
isinstance
(
path
,
six
.
text_typ
e
):
return
unicodedata
.
normalize
(
'NFD'
,
path
)
try
:
path
=
path
.
decode
(
'utf-8'
)
...
...
@@ -184,7 +185,7 @@ class TestSdistTest:
u_contents
=
contents
.
decode
(
'UTF-8'
)
# The manifest should contain the UTF-8 filename
if
PY2
:
if
six
.
PY2
:
fs_enc
=
sys
.
getfilesystemencoding
()
filename
=
filename
.
decode
(
fs_enc
)
...
...
@@ -289,7 +290,7 @@ class TestSdistTest:
cmd
.
read_manifest
()
# The filelist should contain the UTF-8 filename
if
PY3
:
if
six
.
PY3
:
filename
=
filename
.
decode
(
'utf-8'
)
assert
filename
in
cmd
.
filelist
.
files
...
...
@@ -342,7 +343,7 @@ class TestSdistTest:
if
sys
.
platform
==
'darwin'
:
filename
=
decompose
(
filename
)
if
PY3
:
if
six
.
PY3
:
fs_enc
=
sys
.
getfilesystemencoding
()
if
sys
.
platform
==
'win32'
:
...
...
@@ -374,7 +375,7 @@ class TestSdistTest:
with
quiet
():
cmd
.
run
()
if
PY3
:
if
six
.
PY3
:
# not all windows systems have a default FS encoding of cp1252
if
sys
.
platform
==
'win32'
:
# Latin-1 is similar to Windows-1252 however
...
...
setuptools/tests/test_test.py
View file @
337ea160
...
...
@@ -4,6 +4,7 @@ from __future__ import unicode_literals
import
os
import
site
from
distutils.errors
import
DistutilsError
import
pytest
...
...
setuptools/unicode_utils.py
View file @
337ea160
import
unicodedata
import
sys
from
setuptools.compat
import
unicode
as
decoded_string
from
setuptools.extern
import
six
# HFS Plus uses decomposed UTF-8
def
decompose
(
path
):
if
isinstance
(
path
,
decoded_string
):
if
isinstance
(
path
,
six
.
text_type
):
return
unicodedata
.
normalize
(
'NFD'
,
path
)
try
:
path
=
path
.
decode
(
'utf-8'
)
...
...
@@ -23,7 +23,7 @@ def filesys_decode(path):
"""
fs_enc
=
sys
.
getfilesystemencoding
()
if
isinstance
(
path
,
decoded_string
):
if
isinstance
(
path
,
six
.
text_type
):
return
path
for
enc
in
(
fs_enc
,
"utf-8"
):
...
...
tests/manual_test.py
View file @
337ea160
...
...
@@ -7,7 +7,8 @@ import tempfile
import
subprocess
from
distutils.command.install
import
INSTALL_SCHEMES
from
string
import
Template
from
setuptools.compat
import
urlopen
from
six.moves
import
urllib
def
_system_call
(
*
args
):
assert
subprocess
.
call
(
args
)
==
0
...
...
@@ -76,7 +77,7 @@ def test_full():
f
.
write
(
SIMPLE_BUILDOUT
)
with
open
(
'bootstrap.py'
,
'w'
)
as
f
:
f
.
write
(
urlopen
(
BOOTSTRAP
).
read
())
f
.
write
(
url
lib
.
request
.
url
open
(
BOOTSTRAP
).
read
())
_system_call
(
'bin/python'
,
'bootstrap.py'
)
_system_call
(
'bin/buildout'
,
'-q'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment