def main(argv): args = docopt(__doc__, argv=argv) if args['--verbose'] and not args['--debug']: stdout.write('getting item: {0}\n'.format(args['<identifier>'])) upload_kwargs = dict(metadata=get_args_dict(args['--metadata']), headers=get_args_dict(args['--header']), debug=args['--debug'], queue_derive=args['--no-derive'], ignore_bucket=args['--ignore-bucket'], verbose=args['--verbose']) # Upload stdin. if args['<file>'] == ['-'] and not args['-']: stderr.write('--remote-name is required when uploading from stdin.\n') call(['ia', 'upload', '--help']) exit(1) if args['-']: local_file = TemporaryFile() local_file.write(stdin.read()) local_file.seek(0) upload_kwargs['remote_name'] = args['--remote-name'] # Upload files. else: local_file = args['<file>'] response = upload(args['<identifier>'], local_file, **upload_kwargs) if args['--debug']: for i, r in enumerate(response): if i != 0: stdout.write('---\n') headers = '\n'.join( [' {0}: {1}'.format(k, v) for (k, v) in r.headers.items()]) stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) stdout.write('HTTP Headers:\n{0}\n'.format(headers)) else: for resp in response: if resp.status_code == 200: continue error = parseString(resp.content) code = get_xml_text(error.getElementsByTagName('Code')) msg = get_xml_text(error.getElementsByTagName('Message')) stderr.write('error "{0}" ({1}): {2}\n'.format( code, resp.status_code, msg)) exit(1)
def main(argv): args = docopt(__doc__, argv=argv) if args['--verbose'] and not args['--debug']: stdout.write('getting item: {0}\n'.format(args['<identifier>'])) upload_kwargs = dict( metadata=get_args_dict(args['--metadata']), headers=get_args_dict(args['--header']), debug=args['--debug'], queue_derive=True if args['--no-derive'] is False else False, ignore_preexisting_bucket=args['--ignore-bucket'], verbose=args['--verbose']) # Upload stdin. if args['<file>'] == ['-'] and not args['-']: stderr.write('--remote-name is required when uploading from stdin.\n') call(['ia', 'upload', '--help']) exit(1) if args['-']: local_file = TemporaryFile() local_file.write(stdin.read()) local_file.seek(0) upload_kwargs['remote_name'] = args['--remote-name'] # Upload files. else: local_file = args['<file>'] response = upload(args['<identifier>'], local_file, **upload_kwargs) if args['--debug']: for i, r in enumerate(response): if i != 0: stdout.write('---\n') headers = '\n'.join([' {0}: {1}'.format(k,v) for (k,v) in r.headers.items()]) stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) stdout.write('HTTP Headers:\n{0}\n'.format(headers)) else: for resp in response: if resp.status_code == 200: continue error = parseString(resp.content) code = get_xml_text(error.getElementsByTagName('Code')) msg = get_xml_text(error.getElementsByTagName('Message')) stderr.write('error "{0}" ({1}): {2}\n'.format(code, resp.status_code, msg)) exit(1)
def main(argv): args = docopt(__doc__, argv=argv) item = get_item(args['<identifier>']) # Check existence of item. if args['--exists']: if item.exists: stdout.write('{0} exists\n'.format(item.identifier)) exit(0) else: stderr.write('{0} does not exist\n'.format(item.identifier)) exit(1) # Modify metadata. elif args['--modify']: metadata = get_args_dict(args['--modify']) response = modify_metadata(args['<identifier>'], metadata) status_code = response['status_code'] if not response['content']['success']: error_msg = response['content']['error'] stderr.write('error: {0} ({1})\n'.format(error_msg, status_code)) exit(1) stdout.write('success: {0}\n'.format(response['content']['log'])) # Get metadata. elif args['--files']: for i, f in enumerate(item.files()): if not args['--target']: files_md = [f.identifier, f.name, f.source, f.format, f.size, f.md5] else: files_md = [f.__dict__.get(k) for k in args['--target']] stdout.write('\t'.join([str(x) for x in files_md]) + '\n') elif args['--formats']: formats = set([f.format for f in item.files()]) stdout.write('\n'.join(formats) + '\n') elif args['--target']: metadata = [] for key in args['--target']: if '/' in key: for i, k in enumerate(key.split('/')): if i == 0: md = item.metadata.get(k) else: if md: md = md.get(k) else: md = item.metadata.get(key) if md: metadata.append(md) stdout.write('\t'.join([str(x) for x in metadata]) + '\n') else: metadata = dumps(item.metadata) stdout.write(metadata + '\n') exit(0)
def main(argv): args = docopt(__doc__, argv=argv) item = internetarchive.Item(args['<identifier>']) # Check existence of item. if args['--exists']: if item.exists: stdout.write('{0} exists\n'.format(item.identifier)) exit(0) else: stderr.write('{0} does not exist\n'.format(item.identifier)) exit(1) # Modify metadata. elif args['--modify']: metadata = get_args_dict(args['--modify']) response = modify_metadata(args['<identifier>'], metadata) status_code = response['status_code'] if not response['content']['success']: error_msg = response['content']['error'] stderr.write('error: {0} ({1})\n'.format(error_msg, status_code)) exit(1) stdout.write('success: {0}\n'.format(response['content']['log'])) # Get metadata. elif args['--files']: for f in item.files(): files_md = [ f.item.identifier, f.name, f.source, f.format, f.size, f.md5 ] stdout.write('\t'.join([str(x) for x in files_md]) + '\n') elif args['--formats']: formats = set([f.format for f in item.files()]) stdout.write('\n'.join(formats) + '\n') elif args['--target']: metadata = [] for key in args['--target']: if '/' in key: for i, k in enumerate(key.split('/')): if i == 0: md = item.metadata.get(k) else: if md: md = md.get(k) else: md = item.metadata.get(key) if md: metadata.append(md) stdout.write('\t'.join([str(x) for x in metadata]) + '\n') else: metadata = dumps(item.metadata) stdout.write(metadata + '\n') exit(0)
def test_get_args_dict(): test_input = [ 'collection:test_collection', "description: Attention: multiple colon's", 'unicode_test:தமிழ்', 'subject:subject1', 'subject:subject2', ] test_output = { 'collection': 'test_collection', 'description': " Attention: multiple colon's", 'unicode_test': '\xe0\xae\xa4\xe0\xae\xae\xe0\xae\xbf\xe0\xae\xb4\xe0\xaf\x8d', 'subject': ['subject1', 'subject2'] } args_dict = get_args_dict(test_input) for key, value in args_dict.items(): assert test_output[key] == value