def get_object(self, container_name, object_name): container = self.get_container(container_name) object_name_cleaned = self._clean_object_name(object_name) path = self._namespace_path(container_name) + "/" + object_name_cleaned try: result = self.connection.request(path + "?metadata/system") system_meta = self._emc_meta(result) result = self.connection.request(path + "?metadata/user") user_meta = self._emc_meta(result) except AtmosError as e: if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, object_name) last_modified = time.strptime(system_meta["mtime"], "%Y-%m-%dT%H:%M:%SZ") last_modified = time.strftime("%a, %d %b %Y %H:%M:%S GMT", last_modified) extra = { "object_id": system_meta["objectid"], "last_modified": last_modified } data_hash = user_meta.pop("md5", "") return Object( object_name, int(system_meta["size"]), data_hash, extra, user_meta, container, self, )
def get_object(self, container_name, object_name): """ >>> driver = DummyStorageDriver('key', 'secret') >>> driver.get_object('unknown', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ContainerDoesNotExistError: >>> container = driver.create_container(container_name='test container 1') >>> container <Container: name=test container 1, provider=Dummy Storage Provider> >>> driver.get_object( ... 'test container 1', 'unknown') #doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ObjectDoesNotExistError: >>> obj = container.upload_object_via_stream(object_name='test object', ... iterator=DummyFileObject(5, 10), extra={}) >>> obj <Object: name=test object, size=50, hash=None, provider=Dummy Storage Provider ...> """ self.get_container(container_name) container_objects = self._containers[container_name]['objects'] if object_name not in container_objects: raise ObjectDoesNotExistError(object_name=object_name, value=None, driver=self) return container_objects[object_name]
def test_202(self): resource_id = 'eb93fde9-0cc6-4339-b7d6-f6e838e78f1c' self.raw_email_storage.fetch_text.side_effect = throw( ObjectDoesNotExistError(None, None, None)) _, status = self._execute_action(resource_id) self.assertEqual(status, 202)
def get_object(self, container_name, object_name): container = self.get_container(container_name) object_name_cleaned = self._clean_object_name(object_name) path = self._namespace_path(container_name) + '/' + object_name_cleaned try: result = self.connection.request(path + '?metadata/system') system_meta = self._emc_meta(result) result = self.connection.request(path + '?metadata/user') user_meta = self._emc_meta(result) except AtmosError as e: if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, object_name) last_modified = time.strptime(system_meta['mtime'], '%Y-%m-%dT%H:%M:%SZ') last_modified = time.strftime('%a, %d %b %Y %H:%M:%S GMT', last_modified) extra = { 'object_id': system_meta['objectid'], 'last_modified': last_modified } data_hash = user_meta.pop('md5', '') return Object(object_name, int(system_meta['size']), data_hash, extra, user_meta, container, self)
def get_object_cdn_url(self, obj): """ >>> driver = DummyStorageDriver('key', 'secret') >>> container_name = 'test container 1' >>> container = driver.create_container(container_name=container_name) >>> container <Container: name=test container 1, provider=Dummy Storage Provider> >>> obj = container.upload_object_via_stream( ... object_name='test object 5', ... iterator=DummyFileObject(5, 10), extra={}) >>> obj.name 'test object 5' >>> obj.get_cdn_url() 'http://www.test.com/object/test_object_5' @inherits: :class:`StorageDriver.get_object_cdn_url` """ container_name = obj.container.name container_objects = self._containers[container_name]['objects'] if obj.name not in container_objects: raise ObjectDoesNotExistError(object_name=obj.name, value=None, driver=self) return container_objects[obj.name].meta_data['cdn_url']
def get_object(self, container_name, obj_id): self._check_credentials() try: container = self.get_container(container_name) return container[obj_id] except KeyError: raise ObjectDoesNotExistError(object_name=obj_id, driver=self, value=None)
def delete_object(self, obj): path = self._namespace_path(obj.container.name + '/' + obj.name) try: self.connection.request(path, method='DELETE') except AtmosError, e: if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, obj.name)
def delete_object(self, obj): self._check_credentials() try: container = self.get_container(CONTAINER_NAME) container.pop(obj.name) return True except KeyError: raise ObjectDoesNotExistError(object_name=obj.name, driver=self, value=None)
def delete_object(self, obj): object_path = self._get_object_path(obj.container, obj.name) try: self.connection.session.data_objects.unlink(object_path) return True except DataObjectDoesNotExist: raise ObjectDoesNotExistError(value=None, driver=self, object_name=obj.name)
def delete_object(self, obj): object_path = self._get_object_path(obj.container, obj.name) response = self.connection.request(object_path, method="DELETE") if response.status == httplib.NO_CONTENT: return True elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(value=None, driver=self, object_name=obj.name) return False
def delete_object(self, obj): path = (self._namespace_path(obj.container.name) + "/" + self._clean_object_name(obj.name)) try: self.connection.request(path, method="DELETE") except AtmosError as e: if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, obj.name) return True
def get_object(self, container_name, object_name): container = self.get_container(container_name=container_name) objects = self.iterate_container_objects(container=container) obj = next((obj for obj in objects if obj.name == object_name), None) if obj is not None: return obj else: raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def delete_object(self, obj): path = self._namespace_path(obj.container.name) + '/' +\ self._clean_object_name(obj.name) try: self.connection.request(path, method='DELETE') except AtmosError: e = sys.exc_info()[1] if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, obj.name) return True
def get_object(self, container_name, object_name): container = self.get_container(container_name=container_name) object_path = self._get_object_path(container, object_name) response = self.connection.request(object_path, method="HEAD") if response.status == httplib.OK: obj = self._headers_to_object( object_name=object_name, container=container, headers=response.headers ) return obj raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def delete_object(self, obj): object_name = self._clean_object_name(name=obj.name) response = self.connection.request('/%s/%s' % (obj.container.name, object_name), method='DELETE') if response.status == httplib.NO_CONTENT: return True elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(value=None, driver=self, object_name=obj.name) return False
def get_object(self, container_name, object_name): container = self.get_container(container_name) response = self.connection.request('/%s/%s' % (container_name, object_name), method='HEAD') if response.status in [httplib.OK, httplib.NO_CONTENT]: obj = self._headers_to_object(object_name, container, response.headers) return obj elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(None, self, object_name) raise LibcloudError('Unexpected status code: %s' % (response.status))
def delete_object(self, obj): container_name = self._encode_container_name(obj.container.name) object_name = self._encode_object_name(obj.name) response = self.connection.request( '/%s/%s' % (container_name, object_name), method='DELETE') if response.status == httplib.NO_CONTENT: return True elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(value='', object_name=object_name, driver=self) raise LibcloudError('Unexpected status code: %s' % (response.status))
def delete_object(self, obj): """ @inherits: :class:`StorageDriver.delete_object` """ object_path = self._get_object_path(obj.container, obj.name) response = self.connection.request(object_path, method='DELETE') if response.status == httplib.ACCEPTED: return True elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(value=None, driver=self, object_name=obj.name) return False
def _open_archive_file(self, archive: TarFile, name: str) -> IO[bytes]: while True: member = archive.next() if member is None: break if member.name == name: fobj = archive.extractfile(member) if fobj is None: break return fobj raise ObjectDoesNotExistError( 'File {} is missing in archive'.format(name), self._file_storage._driver, archive.name)
def test_202(self): resource_id = 'eb93fde9-0cc6-4339-b7d6-f6e838e78f1c' self.raw_email_storage.fetch_text.side_effect = throw( ObjectDoesNotExistError(None, None, None)) _, status = self._execute_action(resource_id) self.assertEqual(status, 202) self.raw_email_storage.fetch_text.assert_called_once_with(resource_id) self.assertFalse(self.raw_email_storage.delete.called) self.assertFalse(self.email_storage.store_object.called) self.assertFalse(self.pending_storage.store_text.called) self.assertFalse(self.email_parser.called)
def _open_archive_file(self, archive: TarFile, name: str) -> IO[bytes]: while True: member = archive.next() if member is None: break if member.name == name: fobj = archive.extractfile(member) if fobj is None: break return fobj # noinspection PyProtectedMember raise ObjectDoesNotExistError(f'File {name} is missing in archive', self._file_storage._driver, archive.name)
def get_object(self, container_name, object_name): container = self.get_container(container_name) path = container_name + '/' + object_name path = self._namespace_path(path) try: result = self.connection.request(path + '?metadata/system') system_meta = self._emc_meta(result) result = self.connection.request(path + '?metadata/user') user_meta = self._emc_meta(result) except AtmosError, e: if e.code != 1003: raise raise ObjectDoesNotExistError(e, self, object_name)
def get_object(self, container_name, object_name): container = self.get_container(container_name) if self.object_exists(container_name, object_name): obj = Object(object_name, size=None, hash=None, extra=None, meta_data=None, container=container, driver=self) return obj else: raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def get_object(self, container_path, object_name): try: container = self.get_container(container_path) except CollectionDoesNotExist: raise ContainerDoesNotExistError(value=None, driver=self, container_name=container_path) try: obj_path = self._get_object_path(container, object_name) data_obj = self.connection.session.data_objects.get(obj_path) return self._to_obj(data_obj, container) except DataObjectDoesNotExist: raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def get_object(self, container_name, object_name): # TODO: Figure out what is going on when the object or container does not exist # - it seems that Amazon just keeps the connection open and doesn't return a # response. container = self.get_container(container_name=container_name) response = self.connection.request('/%s/%s' % (container_name, object_name), method='HEAD') if response.status == httplib.OK: obj = self._headers_to_object(object_name=object_name, container=container, headers=response.headers) return obj raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def get_object(self, container_name, object_name): """ @inherits: :class:`StorageDriver.get_object` """ container = self.get_container(container_name=container_name) object_path = self._get_object_path(container, object_name) response = self.connection.request(object_path, method='HEAD') if response.status == httplib.OK: obj = self._response_to_object(object_name, container, response) return obj raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name)
def _get_object(self, obj, callback, callback_kwargs, response, success_status_code=None): """ Call passed callback and start transfer of the object' :param obj: Object instance. :type obj: :class:`Object` :param callback: Function which is called with the passed callback_kwargs :type callback: :class:`function` :param callback_kwargs: Keyword arguments which are passed to the callback. :type callback_kwargs: ``dict`` :param response: Response instance. :type response: :class:`Response` :param success_status_code: Status code which represents a successful transfer (defaults to httplib.OK) :type success_status_code: ``int`` :return: ``True`` on success, ``False`` otherwise. :rtype: ``bool`` """ success_status_code = success_status_code or httplib.OK if not isinstance(success_status_code, (list, tuple)): success_status_codes = [success_status_code] else: success_status_codes = success_status_code if response.status in success_status_codes: return callback(**callback_kwargs) elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(object_name=obj.name, value="", driver=self) raise LibcloudError(value="Unexpected status code: %s" % (response.status), driver=self)
def _make_object(self, container, object_name): """ Create an object instance @param container: Container. @type container: L{Container} @param object_name: Object name. @type object_name: C{str} @return: Object instance. @rtype: L{Object} """ full_path = os.path.join(self.base_path, container.name, object_name) if os.path.isdir(full_path): raise ObjectError(value=None, driver=self, object_name=object_name) try: stat = os.stat(full_path) except Exception: raise ObjectDoesNotExistError(value=None, driver=self, object_name=object_name) # Make a hash for the file based on the metadata. We can safely # use only the mtime attribute here. If the file contents change, # the underlying file-system will change mtime data_hash = self._get_hash_function() data_hash.update(str(stat.st_mtime)) data_hash = data_hash.hexdigest() extra = {} extra['creation_time'] = stat.st_ctime extra['access_time'] = stat.st_atime extra['modify_time'] = stat.st_mtime return Object(name=object_name, size=stat.st_size, extra=extra, driver=self, container=container, hash=data_hash, meta_data=None)
def _get_object(self, obj, callback, callback_args): container_name = obj.container.name object_name = obj.name response = self.connection.request('/%s/%s' % (container_name, object_name), raw=True) callback_args['response'] = response.response if response.status == httplib.OK: return callback(**callback_args) elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(object_name=object_name, driver=self, value='') raise LibcloudError('Unexpected status code: %s' % (response.status))
def _get_object(self, obj, callback, callback_kwargs, response, success_status_code=None): """ Call passed callback and start transfer of the object' @type obj: C{Object} @param obj: Object instance. @type callback: C{Function} @param callback: Function which is called with the passed callback_kwargs @type callback_kwargs: C{dict} @param callback_kwargs: Keyword arguments which are passed to the callback. @typed response: L{Response} @param response: Response instance. @type success_status_code: C{int} @param success_status_code: Status code which represents a successful transfer (defaults to httplib.OK) @return: True on success, False otherwise. @rtype: C{bool} """ success_status_code = success_status_code or httplib.OK if response.status == success_status_code: return callback(**callback_kwargs) elif response.status == httplib.NOT_FOUND: raise ObjectDoesNotExistError(object_name=obj.name, value='', driver=self) raise LibcloudError(value='Unexpected status code: %s' % (response.status), driver=self)