Source code for repositorytools.cli.commands.repo

from __future__ import print_function

import argparse
import json

from repositorytools.cli.common import CLI

__all__ = ['RepoCLI', 'repo_cli']


[docs]class RepoCLI(CLI): def _get_parser(self): parser = argparse.ArgumentParser(description='A command line tool for working with repositories') subparsers = parser.add_subparsers() # create subparser = subparsers.add_parser('create', help='Creates a repository') subparser.add_argument("-s", "--staging", action="store_true", help='Creates a staging repository with' ' target to given repo') subparser.add_argument("-d", "--description", help='description of staged repo', default='no description') subparser.add_argument("repo_id", help='id of the repository, if used with -s, it is id of staging profile, ' 'usually same as target repo') subparser.set_defaults(func=self.create) # close subparser = subparsers.add_parser('close', help='Closes a staging repository. After closing, no changes can ' 'be made') subparser.add_argument("repo_ids", help='id of the staging repository to be closed', nargs='+') subparser.set_defaults(func=self.close) # release subparser = subparsers.add_parser('release', help='Releases a staging repo. Cannot be used for' ' user-managed repositories') subparser.add_argument("-k", "--keep-metadata", action="store_true", default=False, help="Keep custom maven metadata") subparser.add_argument("repo_ids", help='id of staging repository, e.g. releases-1000', nargs='+') subparser.add_argument("--description", help='Description of the release', default='No description') subparser.set_defaults(func=self.release) # drop subparser = subparsers.add_parser('drop', help='Drops a repository. Use carefully!') subparser.add_argument("-s", "--staging", action="store_true", help='repository is staging') subparser.add_argument("--description", help='Description of the drop', default='No description') subparser.add_argument("repo_ids", help='id of staging repository, e.g. releases-1000', nargs='+') subparser.set_defaults(func=self.drop) # list subparser = subparsers.add_parser('list', help='Lists all reposititories') subparser.add_argument("-s", "--staging", action="store_true", help='List staging repositories instead of normal repositories') subparser.add_argument("--output-format", help='Format of the output list', choices=['json', 'ids']) subparser.add_argument("--filter", help='JSON-serialized dictionary containing filters, for example \'{"description":"foo"}\'') subparser.set_defaults(func=self.list) return parser
[docs] def create(self, args): """ :param args: :return: staging repository id as string """ if args.staging: return self.repository.create_staging_repo(args.repo_id, args.description) else: raise Exception('Creation of normal repositories not supported yet')
[docs] def close(self, args): return self.repository.close_staging_repos(args.repo_ids)
[docs] def release(self, args): for repo_id in args.repo_ids: self.repository.release_staging_repo(repo_id, args.description, keep_metadata=args.keep_metadata)
[docs] def drop(self, args): if args.staging: self.repository.drop_staging_repos(args.repo_ids) else: raise Exception('Drop of normal repositories not supported yet')
[docs] def list(self, args): if args.staging: if args.filter: filter_dict = json.loads(args.filter) else: filter_dict = None repos = self.repository.list_staging_repos(filter_dict) else: # repos = self.repository.list_repos(args.filter) raise Exception('Listing normal repositories not supported yet') if args.output_format == 'json': output = json.dumps(repos) else: output = '\n'.join(repo['repositoryId'] for repo in repos) print(output) return output
repo_cli = RepoCLI() if __name__ == '__main__': repo_cli()