Пример #1
0
		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
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
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()
Пример #6
0
 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)
Пример #7
0
 def test_can_get_history_recorder(self):
     recorder = get_global_history_recorder()
     self.assertTrue(isinstance(recorder, HistoryRecorder))
Пример #8
0
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
Пример #9
0
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)