Heartsync/toss-hwp
0
1#!python2"""Bootstrap setuptools installation3 4If you want to use setuptools in your package's setup.py, just include this5file in the same directory with it, and add this to the top of your setup.py::6 7 from ez_setup import use_setuptools8 use_setuptools()9 10If you want to require a specific version of setuptools, set a download11mirror, or use an alternate download directory, you can do so by supplying12the appropriate options to ``use_setuptools()``.13 14This file can also be run as a script to install or upgrade setuptools.15"""16import sys17DEFAULT_VERSION = "0.6c11"18DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3]19 20md5_data = {21 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',22 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',23 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',24 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',25 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',26 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',27 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',28 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',29 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',30 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',31 'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090',32 'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4',33 'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7',34 'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5',35 'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de',36 'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b',37 'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2',38 'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086',39 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',40 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',41 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',42 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',43 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',44 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',45 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',46 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',47 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',48 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',49 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',50 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20',51 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab',52 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53',53 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2',54 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e',55 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372',56 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902',57 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de',58 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b',59 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03',60 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a',61 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6',62 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a',63}64 65import sys, os66try: from hashlib import md567except ImportError: from md5 import md568 69def _validate_md5(egg_name, data):70 if egg_name in md5_data:71 digest = md5(data).hexdigest()72 if digest != md5_data[egg_name]:73 print >>sys.stderr, (74 "md5 validation of %s failed! (Possible download problem?)"75 % egg_name76 )77 sys.exit(2)78 return data79 80def use_setuptools(81 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,82 download_delay=1583):84 """Automatically find/download setuptools and make it available on sys.path85 86 `version` should be a valid setuptools version number that is available87 as an egg for download under the `download_base` URL (which should end with88 a '/'). `to_dir` is the directory where setuptools will be downloaded, if89 it is not already available. If `download_delay` is specified, it should90 be the number of seconds that will be paused before initiating a download,91 should one be required. If an older version of setuptools is installed,92 this routine will print a message to ``sys.stderr`` and raise SystemExit in93 an attempt to abort the calling script.94 """95 was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules96 def do_download():97 egg = download_setuptools(version, download_base, to_dir, download_delay)98 sys.path.insert(0, egg)99 import setuptools; setuptools.bootstrap_install_from = egg100 try:101 import pkg_resources102 except ImportError:103 return do_download() 104 try:105 pkg_resources.require("setuptools>="+version); return106 except pkg_resources.VersionConflict, e:107 if was_imported:108 print >>sys.stderr, (109 "The required version of setuptools (>=%s) is not available, and\n"110 "can't be installed while this script is running. Please install\n"111 " a more recent version first, using 'easy_install -U setuptools'."112 "\n\n(Currently using %r)"113 ) % (version, e.args[0])114 sys.exit(2)115 except pkg_resources.DistributionNotFound:116 pass117 118 del pkg_resources, sys.modules['pkg_resources'] # reload ok119 return do_download()120 121def download_setuptools(122 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,123 delay = 15124):125 """Download setuptools from a specified location and return its filename126 127 `version` should be a valid setuptools version number that is available128 as an egg for download under the `download_base` URL (which should end129 with a '/'). `to_dir` is the directory where the egg will be downloaded.130 `delay` is the number of seconds to pause before an actual download attempt.131 """132 import urllib2, shutil133 egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])134 url = download_base + egg_name135 saveto = os.path.join(to_dir, egg_name)136 src = dst = None137 if not os.path.exists(saveto): # Avoid repeated downloads138 try:139 from distutils import log140 if delay:141 log.warn("""142---------------------------------------------------------------------------143This script requires setuptools version %s to run (even to display144help). I will attempt to download it for you (from145%s), but146you may need to enable firewall access for this script first.147I will start the download in %d seconds.148 149(Note: if this machine does not have network access, please obtain the file150 151 %s152 153and place it in this directory before rerunning this script.)154---------------------------------------------------------------------------""",155 version, download_base, delay, url156 ); from time import sleep; sleep(delay)157 log.warn("Downloading %s", url)158 src = urllib2.urlopen(url)159 # Read/write all in one block, so we don't create a corrupt file160 # if the download is interrupted.161 data = _validate_md5(egg_name, src.read())162 dst = open(saveto,"wb"); dst.write(data)163 finally:164 if src: src.close()165 if dst: dst.close()166 return os.path.realpath(saveto)167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203def main(argv, version=DEFAULT_VERSION):204 """Install or upgrade setuptools and EasyInstall"""205 try:206 import setuptools207 except ImportError:208 egg = None209 try:210 egg = download_setuptools(version, delay=0)211 sys.path.insert(0,egg)212 from setuptools.command.easy_install import main213 return main(list(argv)+[egg]) # we're done here214 finally:215 if egg and os.path.exists(egg):216 os.unlink(egg)217 else:218 if setuptools.__version__ == '0.0.1':219 print >>sys.stderr, (220 "You have an obsolete version of setuptools installed. Please\n"221 "remove it from your system entirely before rerunning this script."222 )223 sys.exit(2)224 225 req = "setuptools>="+version226 import pkg_resources227 try:228 pkg_resources.require(req)229 except pkg_resources.VersionConflict:230 try:231 from setuptools.command.easy_install import main232 except ImportError:233 from easy_install import main234 main(list(argv)+[download_setuptools(delay=0)])235 sys.exit(0) # try to force an exit236 else:237 if argv:238 from setuptools.command.easy_install import main239 main(argv)240 else:241 print "Setuptools version",version,"or greater has been installed."242 print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'243 244def update_md5(filenames):245 """Update our built-in md5 registry"""246 247 import re248 249 for name in filenames:250 base = os.path.basename(name)251 f = open(name,'rb')252 md5_data[base] = md5(f.read()).hexdigest()253 f.close()254 255 data = [" %r: %r,\n" % it for it in md5_data.items()]256 data.sort()257 repl = "".join(data)258 259 import inspect260 srcfile = inspect.getsourcefile(sys.modules[__name__])261 f = open(srcfile, 'rb'); src = f.read(); f.close()262 263 match = re.search("\nmd5_data = {\n([^}]+)}", src)264 if not match:265 print >>sys.stderr, "Internal error!"266 sys.exit(2)267 268 src = src[:match.start(1)] + repl + src[match.end(1):]269 f = open(srcfile,'w')270 f.write(src)271 f.close()272 273 274if __name__=='__main__':275 if len(sys.argv)>2 and sys.argv[1]=='--md5update':276 update_md5(sys.argv[2:])277 else:278 main(sys.argv[1:])279 280 281 282 283 284 285 