Commit a199470d8e7c74eb6b1a492a41c16e25a862fc61
Merge remote-tracking branch 'selurvedu/pin_versions'
Merging into the fork point of branches 'master' and 'eauction-master'.
Showing
3 changed files
with
74 additions
and
22 deletions
| ... | ... | @@ -71,7 +71,13 @@ robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.b |
| 71 | 71 | |
| 72 | 72 | [versions] |
| 73 | 73 | fake-factory = 0.5.3 |
| 74 | +mr.developer = 1.34 | |
| 74 | 75 | restkit = 4.2.2.op1 |
| 75 | 76 | rfc6266 = 0.0.6.op1 |
| 76 | 77 | robotframework = 3.0.0 |
| 78 | +robotframework-debuglibrary = 0.8 | |
| 79 | +robotframework-lint = 0.7 | |
| 77 | 80 | robotframework-selenium2library = 1.7.4 |
| 81 | +setuptools = 18.3.2 | |
| 82 | +zc.buildout = 2.5.3 | |
| 83 | +zc.recipe.egg = 2.0.3 | ... | ... |
| ... | ... | @@ -3,6 +3,8 @@ |
| 3 | 3 | """ |
| 4 | 4 | Setuptools bootstrapping installer. |
| 5 | 5 | |
| 6 | +Maintained at https://github.com/pypa/setuptools/tree/bootstrap. | |
| 7 | + | |
| 6 | 8 | Run this script to install or upgrade setuptools. |
| 7 | 9 | """ |
| 8 | 10 | |
| ... | ... | @@ -16,24 +18,30 @@ import subprocess |
| 16 | 18 | import platform |
| 17 | 19 | import textwrap |
| 18 | 20 | import contextlib |
| 19 | -import warnings | |
| 21 | +import json | |
| 22 | +import codecs | |
| 20 | 23 | |
| 21 | 24 | from distutils import log |
| 22 | 25 | |
| 23 | 26 | try: |
| 24 | 27 | from urllib.request import urlopen |
| 28 | + from urllib.parse import urljoin | |
| 25 | 29 | except ImportError: |
| 26 | 30 | from urllib2 import urlopen |
| 31 | + from urlparse import urljoin | |
| 27 | 32 | |
| 28 | 33 | try: |
| 29 | 34 | from site import USER_SITE |
| 30 | 35 | except ImportError: |
| 31 | 36 | USER_SITE = None |
| 32 | 37 | |
| 38 | +LATEST = object() | |
| 33 | 39 | DEFAULT_VERSION = "18.3.2" |
| 34 | -DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" | |
| 40 | +DEFAULT_URL = "https://pypi.io/packages/source/s/setuptools/" | |
| 35 | 41 | DEFAULT_SAVE_DIR = os.curdir |
| 36 | 42 | |
| 43 | +MEANINGFUL_INVALID_ZIP_ERR_MSG = 'Maybe {0} is corrupted, delete it and try again.' | |
| 44 | + | |
| 37 | 45 | |
| 38 | 46 | def _python_cmd(*args): |
| 39 | 47 | """ |
| ... | ... | @@ -98,8 +106,16 @@ def archive_context(filename): |
| 98 | 106 | old_wd = os.getcwd() |
| 99 | 107 | try: |
| 100 | 108 | os.chdir(tmpdir) |
| 101 | - with ContextualZipFile(filename) as archive: | |
| 102 | - archive.extractall() | |
| 109 | + try: | |
| 110 | + with ContextualZipFile(filename) as archive: | |
| 111 | + archive.extractall() | |
| 112 | + except zipfile.BadZipfile as err: | |
| 113 | + if not err.args: | |
| 114 | + err.args = ('', ) | |
| 115 | + err.args = err.args + ( | |
| 116 | + MEANINGFUL_INVALID_ZIP_ERR_MSG.format(filename), | |
| 117 | + ) | |
| 118 | + raise | |
| 103 | 119 | |
| 104 | 120 | # going in the directory |
| 105 | 121 | subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) |
| ... | ... | @@ -114,18 +130,19 @@ def archive_context(filename): |
| 114 | 130 | |
| 115 | 131 | def _do_download(version, download_base, to_dir, download_delay): |
| 116 | 132 | """Download Setuptools.""" |
| 117 | - egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' | |
| 118 | - % (version, sys.version_info[0], sys.version_info[1])) | |
| 133 | + py_desig = 'py{sys.version_info[0]}.{sys.version_info[1]}'.format(sys=sys) | |
| 134 | + tp = 'setuptools-{version}-{py_desig}.egg' | |
| 135 | + egg = os.path.join(to_dir, tp.format(**locals())) | |
| 119 | 136 | if not os.path.exists(egg): |
| 120 | 137 | archive = download_setuptools(version, download_base, |
| 121 | - to_dir, download_delay) | |
| 138 | + to_dir, download_delay) | |
| 122 | 139 | _build_egg(egg, archive, to_dir) |
| 123 | 140 | sys.path.insert(0, egg) |
| 124 | 141 | |
| 125 | 142 | # Remove previously-imported pkg_resources if present (see |
| 126 | 143 | # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). |
| 127 | 144 | if 'pkg_resources' in sys.modules: |
| 128 | - del sys.modules['pkg_resources'] | |
| 145 | + _unload_pkg_resources() | |
| 129 | 146 | |
| 130 | 147 | import setuptools |
| 131 | 148 | setuptools.bootstrap_install_from = egg |
| ... | ... | @@ -140,6 +157,7 @@ def use_setuptools( |
| 140 | 157 | Return None. Raise SystemExit if the requested version |
| 141 | 158 | or later cannot be installed. |
| 142 | 159 | """ |
| 160 | + version = _resolve_version(version) | |
| 143 | 161 | to_dir = os.path.abspath(to_dir) |
| 144 | 162 | |
| 145 | 163 | # prior to importing, capture the module state for |
| ... | ... | @@ -189,6 +207,11 @@ def _conflict_bail(VC_err, version): |
| 189 | 207 | |
| 190 | 208 | |
| 191 | 209 | def _unload_pkg_resources(): |
| 210 | + sys.meta_path = [ | |
| 211 | + importer | |
| 212 | + for importer in sys.meta_path | |
| 213 | + if importer.__class__.__module__ != 'pkg_resources.extern' | |
| 214 | + ] | |
| 192 | 215 | del_modules = [ |
| 193 | 216 | name for name in sys.modules |
| 194 | 217 | if name.startswith('pkg_resources') |
| ... | ... | @@ -222,8 +245,8 @@ def download_file_powershell(url, target): |
| 222 | 245 | ps_cmd = ( |
| 223 | 246 | "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " |
| 224 | 247 | "[System.Net.CredentialCache]::DefaultCredentials; " |
| 225 | - "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" | |
| 226 | - % vars() | |
| 248 | + '(new-object System.Net.WebClient).DownloadFile("%(url)s", "%(target)s")' | |
| 249 | + % locals() | |
| 227 | 250 | ) |
| 228 | 251 | cmd = [ |
| 229 | 252 | 'powershell', |
| ... | ... | @@ -248,7 +271,7 @@ download_file_powershell.viable = has_powershell |
| 248 | 271 | |
| 249 | 272 | |
| 250 | 273 | def download_file_curl(url, target): |
| 251 | - cmd = ['curl', url, '--silent', '--output', target] | |
| 274 | + cmd = ['curl', url, '--location', '--silent', '--output', target] | |
| 252 | 275 | _clean_check(cmd, target) |
| 253 | 276 | |
| 254 | 277 | |
| ... | ... | @@ -321,6 +344,7 @@ def download_setuptools( |
| 321 | 344 | ``downloader_factory`` should be a function taking no arguments and |
| 322 | 345 | returning a function for downloading a URL to a target. |
| 323 | 346 | """ |
| 347 | + version = _resolve_version(version) | |
| 324 | 348 | # making sure we use the absolute path |
| 325 | 349 | to_dir = os.path.abspath(to_dir) |
| 326 | 350 | zip_name = "setuptools-%s.zip" % version |
| ... | ... | @@ -333,6 +357,27 @@ def download_setuptools( |
| 333 | 357 | return os.path.realpath(saveto) |
| 334 | 358 | |
| 335 | 359 | |
| 360 | +def _resolve_version(version): | |
| 361 | + """ | |
| 362 | + Resolve LATEST version | |
| 363 | + """ | |
| 364 | + if version is not LATEST: | |
| 365 | + return version | |
| 366 | + | |
| 367 | + meta_url = urljoin(DEFAULT_URL, '/pypi/setuptools/json') | |
| 368 | + resp = urlopen(meta_url) | |
| 369 | + with contextlib.closing(resp): | |
| 370 | + try: | |
| 371 | + charset = resp.info().get_content_charset() | |
| 372 | + except Exception: | |
| 373 | + # Python 2 compat; assume UTF-8 | |
| 374 | + charset = 'UTF-8' | |
| 375 | + reader = codecs.getreader(charset) | |
| 376 | + doc = json.load(reader(resp)) | |
| 377 | + | |
| 378 | + return str(doc['info']['version']) | |
| 379 | + | |
| 380 | + | |
| 336 | 381 | def _build_install_args(options): |
| 337 | 382 | """ |
| 338 | 383 | Build the arguments to 'python setup.py install' on the setuptools package. |
| ... | ... | @@ -347,7 +392,7 @@ def _parse_args(): |
| 347 | 392 | parser = optparse.OptionParser() |
| 348 | 393 | parser.add_option( |
| 349 | 394 | '--user', dest='user_install', action='store_true', default=False, |
| 350 | - help='install in user site package (requires Python 2.6 or later)') | |
| 395 | + help='install in user site package') | |
| 351 | 396 | parser.add_option( |
| 352 | 397 | '--download-base', dest='download_base', metavar="URL", |
| 353 | 398 | default=DEFAULT_URL, |
| ... | ... | @@ -362,9 +407,9 @@ def _parse_args(): |
| 362 | 407 | default=DEFAULT_VERSION, |
| 363 | 408 | ) |
| 364 | 409 | parser.add_option( |
| 365 | - '--to-dir', | |
| 366 | - help="Directory to save (and re-use) package", | |
| 367 | - default=DEFAULT_SAVE_DIR, | |
| 410 | + '--to-dir', | |
| 411 | + help="Directory to save (and re-use) package", | |
| 412 | + default=DEFAULT_SAVE_DIR, | |
| 368 | 413 | ) |
| 369 | 414 | options, args = parser.parse_args() |
| 370 | 415 | # positional arguments are ignored |
| ... | ... | @@ -372,13 +417,13 @@ def _parse_args(): |
| 372 | 417 | |
| 373 | 418 | |
| 374 | 419 | def _download_args(options): |
| 375 | - """Return args for download_setuptools function from cmdline args.""" | |
| 376 | - return dict( | |
| 377 | - version=options.version, | |
| 378 | - download_base=options.download_base, | |
| 379 | - downloader_factory=options.downloader_factory, | |
| 380 | - to_dir=options.to_dir, | |
| 381 | - ) | |
| 420 | + """Return args for download_setuptools function from cmdline args.""" | |
| 421 | + return dict( | |
| 422 | + version=options.version, | |
| 423 | + download_base=options.download_base, | |
| 424 | + downloader_factory=options.downloader_factory, | |
| 425 | + to_dir=options.to_dir, | |
| 426 | + ) | |
| 382 | 427 | |
| 383 | 428 | |
| 384 | 429 | def main(): | ... | ... |
Please
register
or
login
to post a comment