Changeset 407

Show
Ignore:
Timestamp:
Fri Jan 26 00:41:21 2007
Author:
djfroofy
Message:

- bump

Files:

Legend:

Unmodified
Added
Removed
Modified
  • trunk/ez_setup.py

    r175 r407  
    1   #!python  
    2   """Bootstrap setuptools installation  
    3    
    4   If you want to use setuptools in your package's setup.py, just include this  
    5   file in the same directory with it, and add this to the top of your setup.py::  
    6    
    7       from ez_setup import use_setuptools  
    8       use_setuptools()  
    9    
    10   If you want to require a specific version of setuptools, set a download  
    11   mirror, or use an alternate download directory, you can do so by supplying  
    12   the appropriate options to ``use_setuptools()``.  
    13    
    14   This file can also be run as a script to install or upgrade setuptools.  
    15   """  
    16    
    17   DEFAULT_VERSION = "0.5a12"  
    18   DEFAULT_URL     = "http://www.python.org/packages/source/s/setuptools/"  
    19    
    20   import sys, os  
    21    
    22    
    23    
    24    
    25    
    26    
    27    
    28    
    29    
    30    
    31    
    32    
    33    
    34    
    35    
    36    
    37    
    38    
    39    
    40    
    41    
    42   def use_setuptools(  
    43       version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir  
    44   ):  
    45       """Automatically find/download setuptools and make it available on sys.path  
    46    
    47       `version` should be a valid setuptools version number that is available  
    48       as an egg for download under the `download_base` URL (which should end with  
    49       a '/').  `to_dir` is the directory where setuptools will be downloaded, if  
    50       it is not already available.  
    51    
    52       If an older version of setuptools is installed, this will print a message  
    53       to ``sys.stderr`` and raise SystemExit in an attempt to abort the calling  
    54       script.  
    55       """  
    56       try:  
    57           import setuptools  
    58           if setuptools.__version__ == '0.0.1':  
    59               print >>sys.stderr, (  
    60               "You have an obsolete version of setuptools installed.  Please\n"  
    61               "remove it from your system entirely before rerunning this script."  
    62               )  
    63               sys.exit(2)  
    64    
    65       except ImportError:  
    66           egg = download_setuptools(version, download_base, to_dir)  
    67           sys.path.insert(0, egg)  
    68           import setuptools; setuptools.bootstrap_install_from = egg  
    69    
    70       import pkg_resources  
    71       try:  
    72           pkg_resources.require("setuptools>="+version)  
    73    
    74       except pkg_resources.VersionConflict:  
    75           # XXX could we install in a subprocess here?  
    76           print >>sys.stderr, (  
    77               "The required version of setuptools (>=%s) is not available, and\n"  
    78               "can't be installed while this script is running. Please install\n"  
    79               " a more recent version first."  
    80           ) % version  
    81           sys.exit(2)  
    82    
    83   def download_setuptools(  
    84       version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir  
    85   ):  
    86       """Download setuptools from a specified location and return its filename  
    87    
    88       `version` should be a valid setuptools version number that is available  
    89       as an egg for download under the `download_base` URL (which should end  
    90       with a '/'). `to_dir` is the directory where the egg will be downloaded.  
    91       """  
    92       import urllib2, shutil  
    93       egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])  
    94       url = download_base + egg_name + '.zip'  # XXX  
    95       saveto = os.path.join(to_dir, egg_name)  
    96       src = dst = None  
    97    
    98       if not os.path.exists(saveto):  # Avoid repeated downloads  
    99           try:  
    100               from distutils import log  
    101               log.warn("Downloading %s", url)  
    102               src = urllib2.urlopen(url)  
    103               # Read/write all in one block, so we don't create a corrupt file  
    104               # if the download is interrupted.  
    105               data = src.read()  
    106               dst = open(saveto,"wb")  
    107               dst.write(data)  
    108           finally:  
    109               if src: src.close()  
    110               if dst: dst.close()  
    111    
    112       return os.path.realpath(saveto)  
    113    
    114    
    115    
    116    
    117    
    118    
    119    
    120    
    121    
    122    
    123    
    124   def main(argv, version=DEFAULT_VERSION):  
    125       """Install or upgrade setuptools and EasyInstall"""  
    126    
    127       try:  
    128           import setuptools  
    129       except ImportError:  
    130           import tempfile, shutil  
    131           tmpdir = tempfile.mkdtemp(prefix="easy_install-")  
    132           try:  
    133               egg = download_setuptools(version, to_dir=tmpdir)  
    134               sys.path.insert(0,egg)  
    135               from setuptools.command.easy_install import main  
    136               main(list(argv)+[egg])  
    137           finally:  
    138               shutil.rmtree(tmpdir)  
    139       else:  
    140           if setuptools.__version__ == '0.0.1':  
    141               # tell the user to uninstall obsolete version  
    142               use_setuptools(version)  
    143    
    144       req = "setuptools>="+version  
    145       import pkg_resources  
    146       try:  
    147           pkg_resources.require(req)  
    148       except pkg_resources.VersionConflict:  
    149           try:  
    150               from setuptools.command.easy_install import main  
    151           except ImportError:  
    152               from easy_install import main  
    153           main(list(argv)+[download_setuptools()])  
    154           sys.exit(0) # try to force an exit  
    155       else:  
    156           if argv:  
    157               from setuptools.command.easy_install import main  
    158               main(argv)  
    159           else:  
    160               print "Setuptools version",version,"or greater has been installed."  
    161               print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'  
    162   if __name__=='__main__':  
    163       main(sys.argv[1:])  
    164    
      1 #!python  
      2 """Bootstrap setuptools installation  
      3  
      4 If you want to use setuptools in your package's setup.py, just include this  
      5 file in the same directory with it, and add this to the top of your setup.py::  
      6  
      7     from ez_setup import use_setuptools  
      8     use_setuptools()  
      9  
      10 If you want to require a specific version of setuptools, set a download  
      11 mirror, or use an alternate download directory, you can do so by supplying  
      12 the appropriate options to ``use_setuptools()``.  
      13  
      14 This file can also be run as a script to install or upgrade setuptools.  
      15 """  
      16 import sys  
      17 DEFAULT_VERSION = "0.6c5"  
      18 DEFAULT_URL     = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3]  
      19  
      20 md5_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.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',  
      32     'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',  
      33     'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',  
      34     'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',  
      35     'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',  
      36     'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',  
      37     'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',  
      38     'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',  
      39     'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',  
      40     'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',  
      41     'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',  
      42 }  
      43  
      44 import sys, os  
      45  
      46 def _validate_md5(egg_name, data):  
      47     if egg_name in md5_data:  
      48         from md5 import md5  
      49         digest = md5(data).hexdigest()  
      50         if digest != md5_data[egg_name]:  
      51             print >>sys.stderr, (  
      52                 "md5 validation of %s failed!  (Possible download problem?)"  
      53                 % egg_name  
      54             )  
      55             sys.exit(2)  
      56     return data  
      57  
      58  
      59 def use_setuptools(  
      60     version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,  
      61     download_delay=15  
      62 ):  
      63     """Automatically find/download setuptools and make it available on sys.path  
      64  
      65     `version` should be a valid setuptools version number that is available  
      66     as an egg for download under the `download_base` URL (which should end with  
      67     a '/').  `to_dir` is the directory where setuptools will be downloaded, if  
      68     it is not already available.  If `download_delay` is specified, it should  
      69     be the number of seconds that will be paused before initiating a download,  
      70     should one be required.  If an older version of setuptools is installed,  
      71     this routine will print a message to ``sys.stderr`` and raise SystemExit in  
      72     an attempt to abort the calling script.  
      73     """  
      74     try:  
      75         import setuptools  
      76         if setuptools.__version__ == '0.0.1':  
      77             print >>sys.stderr, (  
      78             "You have an obsolete version of setuptools installed.  Please\n"  
      79             "remove it from your system entirely before rerunning this script."  
      80             )  
      81             sys.exit(2)  
      82     except ImportError:  
      83         egg = download_setuptools(version, download_base, to_dir, download_delay)  
      84         sys.path.insert(0, egg)  
      85         import setuptools; setuptools.bootstrap_install_from = egg  
      86  
      87     import pkg_resources  
      88     try:  
      89         pkg_resources.require("setuptools>="+version)  
      90  
      91     except pkg_resources.VersionConflict, e:  
      92         # XXX could we install in a subprocess here?  
      93         print >>sys.stderr, (  
      94             "The required version of setuptools (>=%s) is not available, and\n"  
      95             "can't be installed while this script is running. Please install\n"  
      96             " a more recent version first.\n\n(Currently using %r)"  
      97         ) % (version, e.args[0])  
      98         sys.exit(2)  
      99  
      100 def download_setuptools(  
      101     version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,  
      102     delay = 15  
      103 ):  
      104     """Download setuptools from a specified location and return its filename  
      105  
      106     `version` should be a valid setuptools version number that is available  
      107     as an egg for download under the `download_base` URL (which should end  
      108     with a '/'). `to_dir` is the directory where the egg will be downloaded.  
      109     `delay` is the number of seconds to pause before an actual download attempt.  
      110     """  
      111     import urllib2, shutil  
      112     egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])  
      113     url = download_base + egg_name  
      114     saveto = os.path.join(to_dir, egg_name)  
      115     src = dst = None  
      116     if not os.path.exists(saveto):  # Avoid repeated downloads  
      117         try:  
      118             from distutils import log  
      119             if delay:  
      120                 log.warn("""  
      121 ---------------------------------------------------------------------------  
      122 This script requires setuptools version %s to run (even to display  
      123 help).  I will attempt to download it for you (from  
      124 %s), but  
      125 you may need to enable firewall access for this script first.  
      126 I will start the download in %d seconds.  
      127  
      128 (Note: if this machine does not have network access, please obtain the file  
      129  
      130    %s  
      131  
      132 and place it in this directory before rerunning this script.)  
      133 ---------------------------------------------------------------------------""",  
      134                     version, download_base, delay, url  
      135                 ); from time import sleep; sleep(delay)  
      136             log.warn("Downloading %s", url)  
      137             src = urllib2.urlopen(url)  
      138             # Read/write all in one block, so we don't create a corrupt file  
      139             # if the download is interrupted.  
      140             data = _validate_md5(egg_name, src.read())  
      141             dst = open(saveto,"wb"); dst.write(data)  
      142         finally:  
      143             if src: src.close()  
      144             if dst: dst.close()  
      145     return os.path.realpath(saveto)  
      146  
      147 def main(argv, version=DEFAULT_VERSION):  
      148     """Install or upgrade setuptools and EasyInstall"""  
      149  
      150     try:  
      151         import setuptools  
      152     except ImportError:  
      153         egg = None  
      154         try:  
      155             egg = download_setuptools(version, delay=0)  
      156             sys.path.insert(0,egg)  
      157             from setuptools.command.easy_install import main  
      158             return main(list(argv)+[egg])   # we're done here  
      159         finally:  
      160             if egg and os.path.exists(egg):  
      161                 os.unlink(egg)  
      162     else:  
      163         if setuptools.__version__ == '0.0.1':  
      164             # tell the user to uninstall obsolete version  
      165             use_setuptools(version)  
      166  
      167     req = "setuptools>="+version  
      168     import pkg_resources  
      169     try:  
      170         pkg_resources.require(req)  
      171     except pkg_resources.VersionConflict:  
      172         try:  
      173             from setuptools.command.easy_install import main  
      174         except ImportError:  
      175             from easy_install import main  
      176         main(list(argv)+[download_setuptools(delay=0)])  
      177         sys.exit(0) # try to force an exit  
      178     else:  
      179         if argv:  
      180             from setuptools.command.easy_install import main  
      181             main(argv)  
      182         else:  
      183             print "Setuptools version",version,"or greater has been installed."  
      184             print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'  
      185  
      186  
      187  
      188 def update_md5(filenames):  
      189     """Update our built-in md5 registry"""  
      190  
      191     import re  
      192     from md5 import md5  
      193  
      194     for name in filenames:  
      195         base = os.path.basename(name)  
      196         f = open(name,'rb')  
      197         md5_data[base] = md5(f.read()).hexdigest()  
      198         f.close()  
      199  
      200     data = ["    %r: %r,\n" % it for it in md5_data.items()]  
      201     data.sort()  
      202     repl = "".join(data)  
      203  
      204     import inspect  
      205     srcfile = inspect.getsourcefile(sys.modules[__name__])  
      206     f = open(srcfile, 'rb'); src = f.read(); f.close()  
      207  
      208     match = re.search("\nmd5_data = {\n([^}]+)}", src)  
      209     if not match:  
      210         print >>sys.stderr, "Internal error!"  
      211         sys.exit(2)  
      212  
      213     src = src[:match.start(1)] + repl + src[match.end(1):]  
      214     f = open(srcfile,'w')  
      215     f.write(src)  
      216     f.close()  
      217  
      218  
      219 if __name__=='__main__':  
      220     if len(sys.argv)>2 and sys.argv[1]=='--md5update':  
      221         update_md5(sys.argv[2:])  
      222     else:  
      223         main(sys.argv[1:])  
      224  
      225  
      226  
      227  
      228  
  • trunk/scripts/xix-coverage.py

    r293 r407  
    145 145 def generateIndex(reportdir, source, reportXSLT=None):  
    146 146     report = CoverageReportParser().parse(open('.report'))  
    147       xml = reportToXML(report, tree=True)   
      147     xml = reportToXML(report, tree=True)  
    147 147     if not reportXSLT:  
    148 148         xslt = ET.parse(StringIO(_REPORT_XSLT))  
     
    177 177      
    178 178  
      179 def getrunner(opts, args):  
      180     if os.path.exists(opts.command):  
      181         return opts.command + ' '.join(args)  
      182     else:  
      183         return ' '.join(args)  
      184  
    179 185 if __name__ == '__main__':  
    180 186     parser = OptionParser()  
     
    191 197             help='comma-separated list of directories to exclude in source tree copy.')  
    192 198     parser.add_option('-t', '--test-runner', dest='command', default='runtests.py',  
    193               help='test runner module and arguments')  
      199             help='test runner module')  
    193 199     parser.add_option('-a', '--annotation-xslt', dest='annotation_xslt',  
    194 200             help='xslt source file for generating module coverage annotation html')  
    195 201     parser.add_option('-m', '--report-xslt', dest='report_xslt',  
    196 202             help='xslt source file for generating index.html')  
    197       parser.add_option('-z', '--html-assets', dest='html_assets',   
      203     parser.add_option('-z', '--html-assets', dest='html_assets',  
    197 203             help='comma-separated list of css, image files etc. to copy to report directory')  
    198 204     options, args = parser.parse_args()  
      205     options.command = getrunner(options, args)  
    199 206     options.depends = [ _path(p) for p in options.depends.split(',') ]  
    200 207     options.exclude_dirs = options.exclude_dirs.split(',')  
  • trunk/setup.py

    r402 r407  
    5 5     from setuptools import setup  
    6 6 except:  
    7       from distutils.core import setup  
      7     try:  
      8         from ez_setup import use_setuptools  
      9         use_setuptools()  
      10     except:  
      11         from distutils.core import setup  
    8 12  
    9 13 setup(  
     
    11 15     author_email='drew.smathers@gmail.com',  
    12 16     name='xix-utils',  
    13       version='0.2.1',  
      17     version='0.2.2',  
      18     install_requires=['zope.interface>=3.2.0','lxml>=1.1.2'],  
      19     scripts=['scripts/xix-coverage.py'],  
    14 20     description="""Xix Utils is a drillbit library independent (mostly) of  
    15 21     any framework ... simple reusable tools for python.""",  
     
    17 23     templating / content-publshing framework which is now only those remains - xix.utils.  
    18 24     xix_utils is simply "yet more batteries for python."  Generalized  
    19       concepts and resulting POCs abstracted from other projects become module under  
      25     concepts and resulting POCs abstracted from other projects become modules under  
    19 25     xix.utils. Known unstable modules should signal warnings at runtime.  
      26  
      27     Tested on Python 2.4 and 2.5.  
    20 28      
    21 29     Subversion trunk:  
    22        
    23       svn co http://svn.xix.python-hosting.com/branches/utils XixUtils  
      30      
      31         svn co http://svn.xix.python-hosting.com/trunk Xix  
      32  
      33     Installation:  
      34  
      35         python setup.py install  
      36  
      37     Note to Developers: Please run unit tests and provide feedback.  To run suite:  
      38  
      39         python runtests.py  
    24 40     """,  
    25 41     license='MIT License',