Revision: 120523 https://trac.macports.org/changeset/120523 Author: gaurav@macports.org Date: 2014-05-31 10:17:58 -0700 (Sat, 31 May 2014) Log Message: ----------- Compiled with fetch and updated to remove traceback Modified Paths: -------------- branches/gsoc14-pip2port/tester.py Modified: branches/gsoc14-pip2port/tester.py =================================================================== --- branches/gsoc14-pip2port/tester.py 2014-05-31 10:03:32 UTC (rev 120522) +++ branches/gsoc14-pip2port/tester.py 2014-05-31 17:17:58 UTC (rev 120523) @@ -7,12 +7,11 @@ # -*- coding: utf-8 -*- #! /usr/bin/env python -import urllib2 -#import urllib -import hashlib import argparse import sys import os +import urllib2 +import hashlib import zipfile from progressbar import * try: @@ -35,42 +34,29 @@ print key,'-->',value[key] print "\n" -def data(pkg_name,pkg_versions=None): +def release_data(pkg_name,pkg_version=None): print "\n" - if not pkg_versions: - version = client.search({'name':pkg_name})[0]['version'] - values = client.release_data(pkg_name,version) -# print values - if values: - for key in values.keys(): - print key,'-->',values[key] - else: - print "No such package found." - print "Please specify the exact package name." + values = client.release_data(pkg_name,pkg_version) + if values: + for key in values.keys(): + print key,'-->',values[key] else: - for version in pkg_versions: - values = client.release_data(pkg_name,version) -# print values - if values: - for key in values.keys(): - print key,'-->',values[key] - else: - print "No such package found." - print "Please specify the exact package name." + print "No such package found." + print "Please specify the exact package name." print "\n" -def fetch(pkg_name,url): - checksum_md5 = url.split('#')[-1].split('=')[-1] - parent_dir = './sources/' - src_dir = parent_dir + "/"+pkg_name+"/" +def fetch(pkg_name,dict): + checksum_md5 = dict['md5_digest'] + parent_dir = './sources' + src_dir = parent_dir + '/' + pkg_name if not os.path.exists(parent_dir): os.makedirs(parent_dir) if not os.path.exists(src_dir): os.makedirs(src_dir) - file_name = src_dir + url.split('/')[-1].split('#')[0] + url = dict['url'] + file_name = src_dir + '/' + dict['filename'] -# urllib.urlretrieve(url,file_name) u = urllib2.urlopen(url) f = open(file_name,'wb') meta = u.info() @@ -96,64 +82,16 @@ f.close() checksum_md5_calc = hashlib.md5(open(file_name).read()).hexdigest() - if str(checksum_md5_calc) == str(checksum_md5): + if str(checksum_md5) == str(checksum_md5_calc): print 'Successfully fetched\n' - else: - print 'Aborting due to inconsistency on checksums\n' - try: - os.remove(file_name) - except OSError, e: - print "Error: %s - %s." % (e.filename,e.strerror) + ext = file_name.split('.')[-1] + if ext == 'egg': + zip = zipfile.ZipFile(file_name) + for name in zip.namelist(): + if name.split("/")[0] == "EGG-INFO": +# print name + zip.extract(name,src_dir) - - -def fetch_egg(url): - checksum_md5 = url.split('#')[-1].split('=')[-1] - parent_dir = './sources/' - pkg_name = url.split('/')[-2] - src_dir = parent_dir +pkg_name+"/" - if not os.path.exists(parent_dir): - os.makedirs(parent_dir) - if not os.path.exists(src_dir): - os.makedirs(src_dir) - - file_name = src_dir + url.split('/')[-1].split('#')[0] - print file_name - - - u = urllib2.urlopen(url) - f = open(file_name,'wb') - meta = u.info() - file_size = int(meta.getheaders("Content-Length")[0]) - - widgets = ['Fetching: ', Percentage(), ' ', Bar(marker=RotatingMarker(),left='[',right=']'), ' ', ETA(), ' ', FileTransferSpeed()] - pbar = ProgressBar(widgets=widgets, maxval=int(file_size)) - pbar.start() - - file_size_dl = 0 - block_sz = 1024 - while True: - buffer = u.read(block_sz) - if not buffer: - break - - file_size_dl += len(buffer) - f.write(buffer) - pbar.update(file_size_dl) - - pbar.finish() - print - f.close() - - checksum_md5_calc = hashlib.md5(open(file_name).read()).hexdigest() - if str(checksum_md5_calc) == str(checksum_md5): - print 'Successfully fetched\n' - zip = zipfile.ZipFile(file_name) - for name in zip.namelist(): - if name.split("/")[0] == "EGG-INFO": - print name - zip.extract(name,src_dir) - else: print 'Aborting due to inconsistency on checksums\n' try: @@ -161,90 +99,64 @@ except OSError, e: print "Error: %s - %s." % (e.filename,e.strerror) - return +def fetch_url(pkg_name,pkg_version=None): + print "\n" + values = client.release_urls(pkg_name,pkg_version) + for value in values: + fetch(pkg_name,value) + print "\n" -def main(): - parser = argparse.ArgumentParser(description='pip2port tester script.') - - parser.add_argument('package_name', - metavar='package_name', type=str, nargs='?', - help='Package_Name') -# parser.add_argument('package_version', -# metavar='package_version', type=str, nargs='*', -# help='Package_Version(s)') - parser.add_argument('package_url', - metavar='package_url', type=str, nargs='?', - help='Package_Url') - parser.add_argument('-l', '--list_packages', action='store_const', - dest='action', const='list_packages', required=False, - help='List all packages') - parser.add_argument('-s', '--search', action='store_const', - dest='action', const='search', required=False, - help='Search for a package by <package_name>') - parser.add_argument('-d', '--data', action='store_const', - dest='action', const='data', required=False, - help='Releases data for a package by <package_name>') - parser.add_argument('-f', '--fetch', action='store_const', - dest='action', const='fetch', required=False, - help='Fetches distfile for a package by <package_url>') - parser.add_argument('-fe', '--fetch_egg', action='store_const', - dest='action', const='fetch_egg', required=False, - help='Fetches distfile for a package by <package_url>') - - - options=parser.parse_args() +def main(argv): + parser = argparse.ArgumentParser(description="Pypi2Port Tester") + parser.add_argument('-l', '--list', action='store_true', dest='list', + default=False, required=False, + help='List all packages') + parser.add_argument('-s', '--search', action='store', type=str, + dest='packages_search', nargs='*', required=False, + help='Search for a package by <package_name>') + parser.add_argument('-d', '--data', action='store', + dest='packages_data', nargs='*', type=str, + help='Releases data for a package by <package_name>') + parser.add_argument('-f', '--fetch', action='store', type=str, + dest='package_fetch', nargs=2, required=False, + help='Fetches distfiles for a package by <package_name> and <package_version>') + options = parser.parse_args() # print options - if options.action == 'list_packages': + if options.list == True: list_all() return - if options.action == 'search': - if options.package_name == None: - parser.error("No package name specified") - else: - search(options.package_name) + if options.packages_search: + for pkg_name in options.packages_search: + search(pkg_name) return - if options.action == 'data': - if options.package_name == None: - parser.error("No package name specified") + if options.packages_data: + pkg_name = options.packages_data[0] + if len(options.packages_data) > 1: + pkg_version = options.packages_data[1] else: -# if options.package_version == None: -# data(options.package_name) -# else: -# data(options.package_name,options.package_version) - data(options.package_name) + if client.package_releases(pkg_name): + pkg_version = client.package_releases(pkg_name)[0] + release_data(pkg_name,pkg_version) return - if options.action == 'fetch': -# print options,"\n" - if options.package_name == None: - if options.package_url == None: - parser.error("No package name and url specified") - else: - parser.error("No package name specified") - elif options.package_url == None: - parser.error("No url specified") + if options.package_fetch: + pkg_name = options.package_fetch[0] + if len(options.package_fetch) > 1: + pkg_version = options.package_fetch[1] + fetch_url(pkg_name,pkg_version) else: -# print options - fetch(options.package_name,options.package_url) + if client.package_releases(pkg_name): + pkg_version = client.packages_releases(pkg_name)[0] + fetch_url(pkg_name,pkg_version) return - if options.action == 'fetch_egg': -# print options,"\n" - if options.package_name == None: - parser.error("No <package>.egg url specified") - else: -# print options - fetch_egg(options.package_name) - return - else: - parser.print_help() - parser.error("No input specified") + parser.print_help() + parser.error("No input specified") - if __name__ == "__main__": - main() + main(sys.argv[1:])