diff options
Diffstat (limited to 'baserockimport')
-rwxr-xr-x | baserockimport/exts/python.to_lorry | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/baserockimport/exts/python.to_lorry b/baserockimport/exts/python.to_lorry index accc9dc..06ee31d 100755 --- a/baserockimport/exts/python.to_lorry +++ b/baserockimport/exts/python.to_lorry @@ -28,7 +28,7 @@ import shutil import tempfile import xmlrpclib import logging -import select +import yaml import pkg_resources @@ -109,9 +109,8 @@ def get_compression(url): return None # Assumption: url passed to this function must have a 'standard' tar extension -def make_tarball_lorry(package_name, url): - # TODO: this prefix probably shouldn't be hardcoded here either - name = 'python-packages/%s' % package_name.lower() +def make_tarball_lorry(lorry_prefix, package_name, url): + name = '%s/%s' % (lorry_prefix, package_name.lower()) lorry = {'type': 'tarball', 'url': url} compression = get_compression(url) @@ -138,7 +137,7 @@ def get_releases(client, requirement): return releases -def generate_tarball_lorry(client, requirement): +def generate_tarball_lorry(lorry_prefix, client, requirement): releases = get_releases(client, requirement) if len(releases) == 0: @@ -178,43 +177,53 @@ def generate_tarball_lorry(client, requirement): url = urls[0]['url'] - return make_tarball_lorry(requirement.project_name, url) + return make_tarball_lorry(lorry_prefix, requirement.project_name, url) -def str_repo_lorry(package_name, repo_type, url): - # TODO: this prefix probably shouldn't be hardcoded here - name = 'python-packages/%s' % package_name.lower() +def str_repo_lorry(lorry_prefix, package_name, repo_type, url): + name = '%s/%s' % (lorry_prefix, package_name.lower()) return json.dumps({name: {'type': repo_type, 'url': url}}, indent=4, sort_keys=True) -def main(): - 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) - sys.exit(1) +class PythonLorryExtension(ImportExtension): - client = xmlrpclib.ServerProxy(PYPI_URL) + def __init__(self): + super(PythonLorryExtension, self).__init__() - req = pkg_resources.parse_requirements(sys.argv[1]).next() + 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) + sys.exit(1) - new_proj_name = name_or_closest(client, req.project_name) + client = xmlrpclib.ServerProxy(PYPI_URL) - if new_proj_name == None: - error("Couldn't find any project with name '%s'" % req.project_name) + req = pkg_resources.parse_requirements(sys.argv[1]).next() - logging.debug('Treating %s as %s' % (req.project_name, new_proj_name)) - req.project_name = new_proj_name + with open(self.local_data_path('python.yaml')) as f: + lorry_prefix = yaml.load(f)['lorry-prefix'] - metadata = fetch_package_metadata(req.project_name) - info = metadata['info'] + new_proj_name = name_or_closest(client, req.project_name) - repo_type = (find_repo_type(info['home_page']) - if 'home_page' in info else None) + if new_proj_name == None: + error("Couldn't find any project with name '%s'" % req.project_name) - print(str_repo_lorry(req.project_name, repo_type, info['home_page']) - if repo_type else generate_tarball_lorry(client, req)) + logging.debug('Treating %s as %s' % (req.project_name, new_proj_name)) + req.project_name = new_proj_name + + metadata = fetch_package_metadata(req.project_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, + repo_type, info['home_page'])) + else: + print(generate_tarball_lorry(lorry_prefix, client, req)) if __name__ == '__main__': - PythonExtension().run() + PythonLorryExtension().run() |