""" Manage your Anaconda repository channels. """ from __future__ import unicode_literals, print_function from binstar_client.utils import get_server_api import functools import logging import argparse logger = logging.getLogger('binstar.channel') def main(args, name, deprecated=False): aserver_api = get_server_api(args.token, args.site) if args.organization: owner = args.organization else: current_user = aserver_api.user() owner = current_user['login'] if deprecated: logger.warning('channel command is deprecated in favor of label') if args.copy: aserver_api.copy_channel(args.copy[0], owner, args.copy[1]) logger.info("Copied {} {} to {}".format(name, *tuple(args.copy))) elif args.remove: aserver_api.remove_channel(args.remove, owner) logger.info("Removed {} {}".format(name, args.remove)) elif args.list: logger.info('{}s'.format(name.title())) for channel, info in aserver_api.list_channels(owner).items(): if isinstance(info, int): # OLD API logger.info((' + %s ' % channel)) else: logger.info((' + %s ' % channel) + ('[locked]' if info['is_locked'] else '')) elif args.show: info = aserver_api.show_channel(args.show, owner) logger.info('{} {} {}'.format( name.title(), args.show, ('[locked]' if info['is_locked'] else '') )) for f in info['files']: logger.info(' + %(full_name)s' % f) elif args.lock: aserver_api.lock_channel(args.lock, owner) logger.info("{} {} is now locked".format(name.title(), args.lock)) elif args.unlock: aserver_api.unlock_channel(args.unlock, owner) logger.info("{} {} is now unlocked".format(name.title(), args.unlock)) else: raise NotImplementedError() def _add_parser(subparsers, name, deprecated=False): deprecated_warn = "" if deprecated: deprecated_warn = "[DEPRECATED in favor of label] \n" subparser = subparsers.add_parser( name, help='{}Manage your Anaconda repository {}s'.format(deprecated_warn, name), formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__) subparser.add_argument('-o', '--organization', help="Manage an organizations {}s".format(name)) group = subparser.add_mutually_exclusive_group(required=True) group.add_argument('--copy', nargs=2, metavar=name.upper()) group.add_argument( '--list', action='store_true', help="{}list all {}s for a user".format(deprecated_warn, name) ) group.add_argument( '--show', metavar=name.upper(), help="{}Show all of the files in a {}".format(deprecated_warn, name) ) group.add_argument( '--lock', metavar=name.upper(), help="{}Lock a {}".format(deprecated_warn, name)) group.add_argument( '--unlock', metavar=name.upper(), help="{}Unlock a {}".format(deprecated_warn, name) ) group.add_argument( '--remove', metavar=name.upper(), help="{}Remove a {}".format(deprecated_warn, name) ) subparser.set_defaults(main=functools.partial(main, name=name, deprecated=deprecated)) def add_parser(subparsers): _add_parser(subparsers, name="label") _add_parser(subparsers, name="channel", deprecated=True)