def move_object(self,**kwargs): """Custom MoveObject S3 call. Exact copy of boto3 client._make_api_call but added to the params/model. Ref: https://wasabi.com/wp-content/themes/wasabi/docs/API_Guide/index.html#t=topics%2FRenaming_Objects.htm https://wasabi.com/wp-content/themes/wasabi/docs/API_Guide/index.html#t=topics%2FPUT_Object_Copy_Uses_Link.htm """ logger = logging.getLogger(__name__) history_recorder = get_global_history_recorder() operation_name = 'MoveObject' destination = kwargs.pop('NewKey') overwrite = kwargs.pop('Overwrite') quiet = kwargs.pop('Quiet') prefix = kwargs.pop('Prefix') api_params = kwargs api_params['CopySource'] = 'dummy/val' #not needed for move, but required by boto CopyObject that is to be modified operation_model = deepcopy(self._service_model.operation_model('CopyObject')) #steal the copyobject method and modify to be move operation_model.name = operation_name operation_model.http['method'] = 'MOVE' service_name = self._service_model.service_name history_recorder.record('API_CALL', { 'service': service_name, 'operation': operation_name, 'params': api_params, }) if operation_model.deprecated: logger.debug('Warning: %s.%s() is deprecated', service_name, operation_name) request_context = { 'client_region': self.meta.region_name,'client_config': self.meta.config,'has_streaming_input': operation_model.has_streaming_input,'auth_type': operation_model.auth_type,} request_dict = self._convert_to_request_dict(api_params, operation_model, context=request_context) #change the header request_dict['headers'].pop('x-amz-copy-source') request_dict['headers']['Destination'] = destination request_dict['headers']['Overwrite'] = str(overwrite) request_dict['headers']['X-Wasabi-Quiet'] = str(quiet) request_dict['headers']['X-Wasabi-Prefix'] = str(prefix) service_id = self._service_model.service_id.hyphenize() handler, event_response = self.meta.events.emit_until_response('before-call.{service_id}.{operation_name}'.format(service_id=service_id,operation_name=operation_name),model=operation_model, params=request_dict,request_signer=self._request_signer, context=request_context) if event_response is not None: http, parsed_response = event_response else: http, parsed_response = self._endpoint.make_request(operation_model, request_dict) self.meta.events.emit('after-call.{service_id}.{operation_name}'.format(service_id=service_id,operation_name=operation_name),http_response=http, parsed=parsed_response,model=operation_model, context=request_context) return parsed_response
def setUp(self): super(TestRecordStatementsInjections, self).setUp() self.client = self.session.create_client('s3', 'us-west-2') self.s3_response_body = ( '<ListAllMyBucketsResult ' ' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">' ' <Owner>' ' <ID>d41d8cd98f00b204e9800998ecf8427e</ID>' ' <DisplayName>foo</DisplayName>' ' </Owner>' ' <Buckets>' ' <Bucket>' ' <Name>bar</Name>' ' <CreationDate>1912-06-23T22:57:02.000Z</CreationDate>' ' </Bucket>' ' </Buckets>' '</ListAllMyBucketsResult>').encode('utf-8') self.recording_handler = RecordingHandler() history_recorder = get_global_history_recorder() history_recorder.enable() history_recorder.add_handler(self.recording_handler)
def setUp(self): super(TestRecordStatementsInjections, self).setUp() self.client = self.session.create_client('s3', 'us-west-2') self.s3_response_body = ( '<ListAllMyBucketsResult ' ' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">' ' <Owner>' ' <ID>d41d8cd98f00b204e9800998ecf8427e</ID>' ' <DisplayName>foo</DisplayName>' ' </Owner>' ' <Buckets>' ' <Bucket>' ' <Name>bar</Name>' ' <CreationDate>1912-06-23T22:57:02.000Z</CreationDate>' ' </Bucket>' ' </Buckets>' '</ListAllMyBucketsResult>' ).encode('utf-8') self.recording_handler = RecordingHandler() history_recorder = get_global_history_recorder() history_recorder.enable() history_recorder.add_handler(self.recording_handler)
from botocore.utils import get_service_module_name from botocore.utils import switch_host_s3_accelerate from botocore.utils import S3RegionRedirector from botocore.utils import fix_s3_host from botocore.utils import switch_to_virtual_host_style from botocore.utils import S3_ACCELERATE_WHITELIST from botocore.args import ClientArgsCreator from botocore.compat import urlsplit from botocore import UNSIGNED # Keep this imported. There's pre-existing code that uses # "from botocore.client import Config". from botocore.config import Config from botocore.history import get_global_history_recorder logger = logging.getLogger(__name__) history_recorder = get_global_history_recorder() class ClientCreator(object): """Creates client objects for a service.""" def __init__(self, loader, endpoint_resolver, user_agent, event_emitter, retry_handler_factory, retry_config_translator, response_parser_factory=None, exceptions_factory=None): self._loader = loader self._endpoint_resolver = endpoint_resolver
from awscli.help import OperationHelpCommand from awscli.arguments import CustomArgument from awscli.arguments import ListArgument from awscli.arguments import BooleanArgument from awscli.arguments import CLIArgument from awscli.arguments import UnknownArgumentError from awscli.argprocess import unpack_argument from awscli.alias import AliasLoader from awscli.alias import AliasCommandInjector from awscli.utils import emit_top_level_args_parsed_event from awscli.utils import write_exception LOG = logging.getLogger('awscli.clidriver') LOG_FORMAT = ( '%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s') HISTORY_RECORDER = get_global_history_recorder() # Don't remove this line. The idna encoding # is used by getaddrinfo when dealing with unicode hostnames, # and in some cases, there appears to be a race condition # where threads will get a LookupError on getaddrinfo() saying # that the encoding doesn't exist. Using the idna encoding before # running any CLI code (and any threads it may create) ensures that # the encodings.idna is imported and registered in the codecs registry, # which will stop the LookupErrors from happening. # See: https://bugs.python.org/issue29288 u''.encode('idna') def main(): driver = create_clidriver() rc = driver.main()
def test_does_reuse_history_recorder(self): recorder_1 = get_global_history_recorder() recorder_2 = get_global_history_recorder() self.assertIs(recorder_1, recorder_2)
def test_can_get_history_recorder(self): recorder = get_global_history_recorder() self.assertTrue(isinstance(recorder, HistoryRecorder))
from botocore.utils import switch_host_s3_accelerate from botocore.utils import S3RegionRedirector from botocore.utils import fix_s3_host from botocore.utils import switch_to_virtual_host_style from botocore.utils import S3_ACCELERATE_WHITELIST from botocore.args import ClientArgsCreator from botocore.compat import urlsplit from botocore import UNSIGNED # Keep this imported. There's pre-existing code that uses # "from botocore.client import Config". from botocore.config import Config from botocore.history import get_global_history_recorder logger = logging.getLogger(__name__) history_recorder = get_global_history_recorder() class ClientCreator(object): """Creates client objects for a service.""" def __init__(self, loader, endpoint_resolver, user_agent, event_emitter, retry_handler_factory, retry_config_translator, response_parser_factory=None, exceptions_factory=None): self._loader = loader self._endpoint_resolver = endpoint_resolver self._user_agent = user_agent self._event_emitter = event_emitter self._retry_handler_factory = retry_handler_factory self._retry_config_translator = retry_config_translator self._response_parser_factory = response_parser_factory self._exceptions_factory = exceptions_factory
from awscli.arguments import CustomArgument from awscli.arguments import ListArgument from awscli.arguments import BooleanArgument from awscli.arguments import CLIArgument from awscli.arguments import UnknownArgumentError from awscli.argprocess import unpack_argument from awscli.alias import AliasLoader from awscli.alias import AliasCommandInjector from awscli.utils import emit_top_level_args_parsed_event from awscli.utils import write_exception LOG = logging.getLogger('awscli.clidriver') LOG_FORMAT = ( '%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s') HISTORY_RECORDER = get_global_history_recorder() def main(): driver = create_clidriver() rc = driver.main() HISTORY_RECORDER.record('CLI_RC', rc, 'CLI') return rc def create_clidriver(): emitter = HierarchicalEmitter() session = botocore.session.Session(EnvironmentVariables, emitter) _set_user_agent_for_session(session) load_plugins(session.full_config.get('plugins', {}), event_hooks=emitter)