def _upload_files(args, identifier, local_file, upload_kwargs): verbose = True if args['--quiet'] is False else False config = {} if not args['--log'] else {'logging': {'level': 'INFO'}} item = get_item(identifier, config=config) if verbose: sys.stdout.write('{0}:\n'.format(item.identifier)) response = item.upload(local_file, **upload_kwargs) if args['--debug']: for i, r in enumerate(response): if i != 0: sys.stdout.write('---\n') headers = '\n'.join( [' {0}: {1}'.format(k, v) for (k, v) in r.headers.items()] ) sys.stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) sys.stdout.write('HTTP Headers:\n{0}\n'.format(headers)) else: for resp in response: if not resp: continue if resp.status_code == 200: continue error = parseString(resp.content) code = get_xml_text(error.getElementsByTagName('Code')) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write( 'error "{0}" ({1}): {2}\n'.format(code, resp.status_code, msg) ) sys.exit(1)
def _upload_files(args, identifier, local_file, upload_kwargs, prev_identifier=None): verbose = True if args['--quiet'] is False else False config = {} if not args['--log'] else {'logging': {'level': 'INFO'}} item = get_item(identifier, config=config) if (verbose) and (prev_identifier != identifier): sys.stdout.write('{0}:\n'.format(item.identifier)) try: if args['--remote-name']: files = {args['--remote-name']: local_file} else: files = local_file response = item.upload(files, **upload_kwargs) except HTTPError as exc: response = [exc.response] if not response[0]: sys.exit(1) if response[0].status_code == 403: if (not item.session.access_key) and (not item.session.secret_key): sys.stderr.write('\nIAS3 Authentication failed. Please set your IAS3 ' 'access key and secret key \nvia the environment ' 'variables `IAS3_ACCESS_KEY` and `IAS3_SECRET_KEY`, ' 'or \nrun `ia configure` to add your IAS3 keys to your ' 'ia config file. You can \nobtain your IAS3 keys at the ' 'following URL:\n\n\t' 'https://archive.org/account/s3.php\n\n') else: sys.stderr.write('\nIAS3 Authentication failed. It appears the keyset ' '"{0}:{1}" \ndoes not have permission to upload ' 'to the given item or ' 'collection.\n\n'.format(item.session.access_key, item.session.secret_key)) sys.exit(1) if args['--debug']: for i, r in enumerate(response): if i != 0: sys.stdout.write('---\n') headers = '\n'.join( [' {0}: {1}'.format(k, v) for (k, v) in r.headers.items()] ) sys.stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) sys.stdout.write('HTTP Headers:\n{0}\n'.format(headers)) else: for resp in response: if not resp: continue if (resp.status_code == 200) or (not resp.status_code): continue error = parseString(resp.content) code = get_xml_text(error.getElementsByTagName('Code')) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write( 'error "{0}" ({1}): {2}\n'.format(code, resp.status_code, msg) ) sys.exit(1)
def main(argv): args = docopt(__doc__, argv=argv) verbose = True if args['--quiet'] is False else False if verbose is not False: sys.stdout.write('getting item: {0}\n'.format(args['<identifier>'])) headers = get_args_dict(args['--header']) if args['--size-hint']: headers['x-archive-size-hint'] = args['--size-hint'] upload_kwargs = dict( metadata=get_args_dict(args['--metadata']), headers=headers, debug=args['--debug'], queue_derive=True if args['--no-derive'] is False else False, ignore_preexisting_bucket=args['--ignore-bucket'], verbose=verbose, delete=args['--delete']) # Upload stdin. if args['<file>'] == ['-'] and not args['-']: sys.stderr.write('--remote-name is required when uploading from stdin.\n') call(['ia', 'upload', '--help']) sys.exit(1) if args['-']: local_file = TemporaryFile() local_file.write(sys.stdin.read()) local_file.seek(0) upload_kwargs['key'] = args['--remote-name'] # Upload files. else: local_file = args['<file>'] config = {} if not args['--log'] else {'logging': {'level': 'INFO'}} item = get_item(args['<identifier>'], config=config) response = item.upload(local_file, **upload_kwargs) if args['--debug']: for i, r in enumerate(response): if i != 0: sys.stdout.write('---\n') headers = '\n'.join([' {0}: {1}'.format(k, v) for (k, v) in r.headers.items()]) sys.stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) sys.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')) sys.stderr.write('error "{0}" ({1}): {2}\n'.format(code, resp.status_code, msg)) sys.exit(1)
def _upload_files(args, identifier, local_file, upload_kwargs): verbose = True if args['--quiet'] is False else False config = {} if not args['--log'] else {'logging': {'level': 'INFO'}} item = get_item(identifier, config=config) if verbose: sys.stdout.write('{0}:\n'.format(item.identifier)) try: response = item.upload(local_file, **upload_kwargs) except HTTPError as exc: response = [exc.response] if not response[0]: sys.exit(1) if response[0].status_code == 403: if (not item.session.access_key) and (not item.session.secret_key): sys.stderr.write('\nIAS3 Authentication failed. Please set your IAS3 ' 'access key and secret key \nvia the environment ' 'variables `IAS3_ACCESS_KEY` and `IAS3_SECRET_KEY`, ' 'or \nrun `ia configure` to add your IAS3 keys to your ' 'ia config file. You can \nobtain your IAS3 keys at the ' 'following URL:\n\n\t' 'https://archive.org/account/s3.php\n\n') else: sys.stderr.write('\nIAS3 Authentication failed. It appears the keyset ' '"{0}:{1}" \ndoes not have permission to upload ' 'to the given item or ' 'collection.\n\n'.format(item.session.access_key, item.session.secret_key)) sys.exit(1) if args['--debug']: for i, r in enumerate(response): if i != 0: sys.stdout.write('---\n') headers = '\n'.join( [' {0}: {1}'.format(k, v) for (k, v) in r.headers.items()] ) sys.stdout.write('Endpoint:\n {0}\n\n'.format(r.url)) sys.stdout.write('HTTP Headers:\n{0}\n'.format(headers)) else: for resp in response: if not resp: continue if resp.status_code == 200: continue error = parseString(resp.content) code = get_xml_text(error.getElementsByTagName('Code')) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write( 'error "{0}" ({1}): {2}\n'.format(code, resp.status_code, msg) ) sys.exit(1)
def main(argv): args = docopt(__doc__, argv=argv) verbose = args['--verbose'] item = get_item(args['<identifier>']) # Files that cannot be deleted via S3. no_delete = ['_meta.xml', '_files.xml', '_meta.sqlite'] if verbose: sys.stdout.write('Deleting files from {0}\n'.format(item.identifier)) if args['--all']: files = [f for f in item.iter_files()] args['--cacade'] = True else: files = [item.get_file(f) for f in args['<file>']] for f in files: if not f: if verbose: sys.stderr.write(' error: "{0}" does not exist\n'.format(f.name)) sys.exit(1) if any(f.name.endswith(s) for s in no_delete): continue resp = f.delete(verbose=args['--verbose'], cascade_delete=args['--cascade']) if resp.status_code != 204: error = parseString(resp.content) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write(' error: {0} ({1})\n'.format(msg, resp.status_code)) sys.exit(1)
def main(argv): args = docopt(__doc__, argv=argv) verbose = True if not args['--quiet'] else False item = get_item(args['<identifier>']) # Files that cannot be deleted via S3. no_delete = ['_meta.xml', '_files.xml', '_meta.sqlite'] if verbose: sys.stdout.write('Deleting files from {0}\n'.format(item.identifier)) if args['--all']: files = [f for f in item.iter_files()] args['--cacade'] = True elif args['--glob']: files = item.get_files(glob_pattern=args['--glob']) else: fnames = [] if args['<file>'] == ['-']: fnames = [f.strip().decode('utf-8') for f in sys.stdin] else: fnames = [f.strip().decode('utf-8') for f in args['<file>']] files = [f for f in [item.get_file(f) for f in fnames] if f] if not files: sys.stderr.write(' warning: no files found, nothing deleted.\n') sys.exit(1) for f in files: if not f: if verbose: sys.stderr.write(' error: "{0}" does not exist\n'.format( f.name)) sys.exit(1) if any(f.name.endswith(s) for s in no_delete): continue if args['--dry-run']: sys.stdout.write(' will delete: {0}/{1}\n'.format( item.identifier, f.name.encode('utf-8'))) continue resp = f.delete(verbose=verbose, cascade_delete=args['--cascade']) if resp.status_code != 204: error = parseString(resp.content) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write(' error: {0} ({1})\n'.format( msg, resp.status_code)) sys.exit(1)
def main(argv): args = docopt(__doc__, argv=argv) verbose = True if not args['--quiet'] else False item = get_item(args['<identifier>']) # Files that cannot be deleted via S3. no_delete = ['_meta.xml', '_files.xml', '_meta.sqlite'] if verbose: sys.stdout.write('Deleting files from {0}\n'.format(item.identifier)) if args['--all']: files = [f for f in item.iter_files()] args['--cacade'] = True elif args['--glob']: files = item.get_files(glob_pattern=args['--glob']) elif args['--format']: files = item.get_files(formats=args['--format']) else: fnames = [] if args['<file>'] == ['-']: fnames = [f.strip().decode('utf-8') for f in sys.stdin] else: fnames = [f.strip().decode('utf-8') for f in args['<file>']] files = [f for f in [item.get_file(f) for f in fnames] if f] if not files: sys.stderr.write(' warning: no files found, nothing deleted.\n') sys.exit(1) for f in files: if not f: if verbose: sys.stderr.write(' error: "{0}" does not exist\n'.format(f.name)) sys.exit(1) if any(f.name.endswith(s) for s in no_delete): continue if args['--dry-run']: sys.stdout.write(' will delete: {0}/{1}\n'.format(item.identifier, f.name.encode('utf-8'))) continue resp = f.delete(verbose=verbose, cascade_delete=args['--cascade']) if resp.status_code != 204: error = parseString(resp.content) msg = get_xml_text(error.getElementsByTagName('Message')) sys.stderr.write(' error: {0} ({1})\n'.format(msg, resp.status_code)) sys.exit(1)