diff options
Diffstat (limited to 'import/rubygems.to_lorry')
-rwxr-xr-x | import/rubygems.to_lorry | 72 |
1 files changed, 21 insertions, 51 deletions
diff --git a/import/rubygems.to_lorry b/import/rubygems.to_lorry index da0fdc05..65f5d260 100755 --- a/import/rubygems.to_lorry +++ b/import/rubygems.to_lorry @@ -28,10 +28,13 @@ import os import sys import urlparse +import importer_base + class GenerateLorryException(Exception): pass + class RubyGemsWebServiceClient(object): def __init__(self): # Save hammering the rubygems.org API: 'requests' API calls are @@ -59,8 +62,10 @@ class RubyGemsWebServiceClient(object): return info -class RubyGemLorryGenerator(object): +class RubyGemLorryGenerator(importer_base.ImportExtension): def __init__(self): + super(importer_base.ImportExtension, self).__init__() + with open('rubygems.yaml', 'r') as f: local_data = yaml.load(f.read()) @@ -69,6 +74,16 @@ class RubyGemLorryGenerator(object): logging.debug( "Loaded %i known source URIs from local metadata.", len(self.known_source_uris)) + def process_args(self, args): + if len(args) != 1: + raise cliapp.AppException( + 'Please call me with the name of a RubyGem as an argument.\n') + + gem_name = args[0] + + lorry = self.generate_lorry_for_gem(gem_name) + self.write_lorry(sys.stdout, lorry) + def find_upstream_repo_for_gem(self, gem_name, gem_info): source_code_uri = gem_info['source_code_uri'] @@ -138,56 +153,11 @@ class RubyGemLorryGenerator(object): return lorry - -def setup_logging(): - '''Direct all logging output to MORPH_LOG_FD, if set. - - This file descriptor is read by Morph and written into its own log - file. - - This overrides cliapp's usual configurable logging setup. - - ''' - log_write_fd = int(os.environ.get('MORPH_LOG_FD', 0)) - - if log_write_fd == 0: - return - - formatter = logging.Formatter('%(message)s') - - handler = logging.StreamHandler(os.fdopen(log_write_fd, 'w')) - handler.setFormatter(formatter) - - logger = logging.getLogger() - logger.addHandler(handler) - logger.setLevel(logging.DEBUG) - - -def write_lorry(stream, lorry): - json.dump(lorry, stream, indent=4) - stream.write('\n') - - -def main(): - if len(sys.argv) != 2: - sys.stderr.write( - 'Please call me with the name of a RubyGem as an argument.\n') - sys.exit(1) - - setup_logging() - - gem_name = sys.argv[1] - - lorry_generator = RubyGemLorryGenerator() - lorry = lorry_generator.generate_lorry_for_gem(gem_name) - - write_lorry(sys.stdout, lorry) + def write_lorry(self, stream, lorry): + json.dump(lorry, stream, indent=4) + # Needed so the morphlib.extensions code will pick up the last line. + stream.write('\n') if __name__ == '__main__': - try: - main() - except GenerateLorryException as e: - sys.stderr.write(e.message) - sys.stderr.write('\n') - sys.exit(1) + RubyGemLorryGenerator().run() |