summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Ipsum <richard.ipsum@codethink.co.uk>2015-01-12 15:40:08 +0000
committerRichard Ipsum <richard.ipsum@codethink.co.uk>2015-01-13 15:40:03 +0000
commit48de25fab7a0d88c1acf0a2a93ff1e98662c8ad1 (patch)
treeecea32db52a15b1417c3b3fccf39637b7669595c
parent4544eb81de6cea8ef0f81d89531bd3c61673586e (diff)
downloadimport-48de25fab7a0d88c1acf0a2a93ff1e98662c8ad1.tar.gz
Fix python.to_lorry to use version passed on cmdline
-rwxr-xr-xbaserockimport/exts/python.to_lorry64
1 files changed, 31 insertions, 33 deletions
diff --git a/baserockimport/exts/python.to_lorry b/baserockimport/exts/python.to_lorry
index cb4e4ec..db33e5f 100755
--- a/baserockimport/exts/python.to_lorry
+++ b/baserockimport/exts/python.to_lorry
@@ -135,36 +135,35 @@ def filter_urls(urls):
return filter(allowed_extension, urls)
-def get_releases(client, requirement):
+def get_releases(client, package_name):
try:
- releases = client.package_releases(requirement.project_name)
+ releases = client.package_releases(package_name)
except Exception as e:
error("Couldn't fetch release data:", e)
return releases
-def generate_tarball_lorry(lorry_prefix, client, requirement):
- releases = get_releases(client, requirement)
+def generate_tarball_lorry(lorry_prefix, client, package_name, version=None):
+ releases = get_releases(client, package_name)
if len(releases) == 0:
- error("Couldn't find any releases for package %s"
- % requirement.project_name)
+ error("Couldn't find any releases for package %s" % package_name)
- releases = [v for v in releases if specs_satisfied(v, requirement.specs)]
+ logging.debug('Found releases: %s', str(releases))
- if len(releases) == 0:
- error("Couldn't find any releases of %s"
- " that satisfy version constraints: %s"
- % (requirement.project_name, requirement.specs))
+ # Use latest release if no version specified
+ version = version or releases[0]
- release_version = releases[0]
+ if version not in releases:
+ error("Couldn't find any releases of %s with version: %s"
+ % (package_name, version))
- logging.debug('Fetching urls for package %s with version %s'
- % (requirement.project_name, release_version))
+ logging.debug('Fetching urls for package %s with version %s',
+ package_name, version)
try:
# Get a list of dicts, the dicts contain the urls.
- urls = client.release_urls(requirement.project_name, release_version)
+ urls = client.release_urls(package_name, version)
except Exception as e:
error("Couldn't fetch release urls:", e)
@@ -178,12 +177,11 @@ def generate_tarball_lorry(lorry_prefix, client, requirement):
warn("\t%s" % url['url'])
error("Cannot proceed")
else:
- error("Couldn't find any download urls for package %s"
- % requirement.project_name)
+ error("Couldn't find any download urls for package %s" % package_name)
url = urls[0]['url']
- return make_tarball_lorry(lorry_prefix, requirement.project_name, url)
+ return make_tarball_lorry(lorry_prefix, package_name, url)
def str_repo_lorry(lorry_prefix, package_name, repo_type, url):
name = '%s/%s' % (lorry_prefix, package_name)
@@ -201,41 +199,41 @@ class PythonLorryExtension(ImportExtension):
super(PythonLorryExtension, self).__init__()
def run(self):
- if len(sys.argv) != 2:
- # TODO explain the format of python requirements
- # warn the user that they probably want to quote their arg
- # > < will be interpreted as redirection by the shell
- print('usage: %s requirement' % sys.argv[0], file=sys.stderr)
+ if len(sys.argv) not in [2, 3]:
+ print('usage: %s NAME [VERSION]' % sys.argv[0], file=sys.stderr)
sys.exit(1)
client = xmlrpclib.ServerProxy(PYPI_URL)
- req = pkg_resources.parse_requirements(sys.argv[1]).next()
+ package_name = sys.argv[1]
+ version = sys.argv[2] if len(sys.argv) == 3 else None
+
+ logging.debug('Looking for package: %s with version %s',
+ package_name, version)
with open(self.local_data_path('python.yaml')) as f:
lorry_prefix = yaml.load(f)['lorry-prefix']
- new_proj_name = name_or_closest(client, req.project_name)
+ new_proj_name = name_or_closest(client, package_name)
if new_proj_name == None:
- error("Couldn't find any project with name '%s'" % req.project_name)
-
- logging.debug('Treating %s as %s' % (req.project_name, new_proj_name))
- req.project_name = new_proj_name
+ error("Couldn't find any project with name '%s'" % package_name)
- logging.debug('Looking for requirement: %s', req)
+ logging.debug('Treating %s as %s' % (package_name, new_proj_name))
+ package_name = new_proj_name
- metadata = fetch_package_metadata(req.project_name)
+ metadata = fetch_package_metadata(package_name)
info = metadata['info']
repo_type = (find_repo_type(info['home_page'])
if 'home_page' in info else None)
if repo_type:
- print(str_repo_lorry(lorry_prefix, req.project_name,
+ print(str_repo_lorry(lorry_prefix, package_name,
repo_type, info['home_page']))
else:
- print(generate_tarball_lorry(lorry_prefix, client, req))
+ print(generate_tarball_lorry(lorry_prefix, client,
+ package_name, version))
if __name__ == '__main__':
PythonLorryExtension().run()