def account_create(self, account, headers=None): uri = "/v1.0/account/create" account_id = utils.quote(account, "") params = {"id": account_id} resp, resp_body = self._account_request("PUT", uri, params=params, headers=headers) created = resp.status_code == 201 return created
def account_update(self, account, metadata, to_delete=None, headers=None): uri = "/v1.0/account/update" account_id = utils.quote(account, '') params = {'id': account_id} data = json.dumps({"metadata": metadata, "to_delete": to_delete}) resp, resp_body = self._account_request('POST', uri, params=params, data=data, headers=headers)
def account_show(self, account, headers=None): uri = "/v1.0/account/show" account_id = utils.quote(account, '') params = {'id': account_id} resp, resp_body = self._account_request('GET', uri, params=params, headers=headers) return resp_body
def _connect_put(chunk): raw_url = chunk["url"] parsed = urlparse(raw_url) try: chunk_path = parsed.path.split('/')[-1] h = {} h["transfer-encoding"] = "chunked" h[chunk_headers["content_id"]] = self.sysmeta['id'] h[chunk_headers["content_version"]] = self.sysmeta['version'] h[chunk_headers["content_path"]] = \ utils.quote(self.sysmeta['content_path']) h[chunk_headers["content_chunkmethod"]] = \ self.sysmeta['chunk_method'] h[chunk_headers["content_policy"]] = self.sysmeta['policy'] h[chunk_headers["container_id"]] = self.sysmeta['container_id'] h[chunk_headers["chunk_pos"]] = chunk["pos"] h[chunk_headers["chunk_id"]] = chunk_path with ConnectionTimeout(io.CONNECTION_TIMEOUT): conn = io.http_connect( parsed.netloc, 'PUT', parsed.path, h) conn.chunk = chunk return conn, chunk except (Exception, Timeout) as e: msg = str(e) logger.error("Failed to connect to %s (%s)", chunk, msg) chunk['error'] = msg return None, chunk
def _connect_put(chunk): raw_url = chunk["url"] parsed = urlparse(raw_url) try: chunk_path = parsed.path.split('/')[-1] h = {} h["transfer-encoding"] = "chunked" h[chunk_headers["content_id"]] = self.sysmeta['id'] h[chunk_headers["content_version"]] = self.sysmeta['version'] h[chunk_headers["content_path"]] = \ utils.quote(self.sysmeta['content_path']) h[chunk_headers["content_chunkmethod"]] = \ self.sysmeta['chunk_method'] h[chunk_headers["content_policy"]] = self.sysmeta['policy'] h[chunk_headers["container_id"]] = self.sysmeta['container_id'] h[chunk_headers["chunk_pos"]] = chunk["pos"] h[chunk_headers["chunk_id"]] = chunk_path with ConnectionTimeout(io.CONNECTION_TIMEOUT): conn = io.http_connect(parsed.netloc, 'PUT', parsed.path, h) conn.chunk = chunk return conn, chunk except (Exception, Timeout) as e: msg = str(e) logger.error("Failed to connect to %s (%s)", chunk, msg) chunk['error'] = msg return None, chunk
def account_create(self, account, headers=None): uri = '/v1.0/account/create' account_id = utils.quote(account, '') params = {'id': account_id} resp, resp_body = self._account_request('PUT', uri, params=params, headers=headers) created = (resp.status_code == 201) return created
def container_list(self, account, limit=None, marker=None, end_marker=None, prefix=None, delimiter=None, headers=None): uri = "v1.0/account/containers" account_id = utils.quote(account, '') params = {"id": account_id, "limit": limit, "marker": marker, "delimiter": delimiter, "prefix": prefix, "end_marker": end_marker} resp, resp_body = self._account_request( 'GET', uri, params=params, headers=headers) listing = resp_body['listing'] del resp_body['listing'] return listing, resp_body
def account_request(self, account, method, action, params=None, **kwargs): """Make a request to the account service.""" self._maybe_refresh_endpoint() if not params: params = dict() if account: params['id'] = quote(account) try: resp, body = self._request(method, action, params=params, **kwargs) except OioNetworkException as exc: exc_info = sys.exc_info() if self._refresh_delay >= 0.0: self.logger.info("Refreshing account endpoint after error %s", exc) try: self._refresh_endpoint() except Exception as exc: self.logger.warn("%s", exc) raise exc_info[0], exc_info[1], exc_info[2] return resp, body
def _connect_put(chunk): raw_url = chunk["url"] parsed = urlparse(raw_url) try: chunk_path = parsed.path.split('/')[-1] h = {} h["transfer-encoding"] = "chunked" # FIXME: remove key incoherencies # TODO: automatize key conversions h[chunk_headers["content_id"]] = self.sysmeta['id'] h[chunk_headers["content_version"]] = self.sysmeta['version'] h[chunk_headers["content_path"]] = \ utils.quote(self.sysmeta['content_path']) h[chunk_headers["content_chunkmethod"]] = \ self.sysmeta['chunk_method'] h[chunk_headers["content_policy"]] = self.sysmeta['policy'] h[chunk_headers["container_id"]] = self.sysmeta['container_id'] h[chunk_headers["chunk_pos"]] = chunk["pos"] h[chunk_headers["chunk_id"]] = chunk_path # Used during reconstruction of EC chunks if self.sysmeta['chunk_method'].startswith('ec'): h[chunk_headers["metachunk_size"]] = \ self.sysmeta["metachunk_size"] h[chunk_headers["metachunk_hash"]] = \ self.sysmeta["metachunk_hash"] with ConnectionTimeout(io.CONNECTION_TIMEOUT): conn = io.http_connect( parsed.netloc, 'PUT', parsed.path, h) conn.chunk = chunk return conn, chunk except (Exception, Timeout) as e: msg = str(e) logger.exception("Failed to connect to %s (%s)", chunk, msg) chunk['error'] = msg return None, chunk
def account_delete(self, account, headers=None): uri = "/v1.0/account/delete" account_id = utils.quote(account, "") params = {"id": account_id} resp, resp_body = self._account_request("POST", uri, params=params, headers=headers)
def account_delete(self, account, headers=None): uri = '/v1.0/account/delete' account_id = utils.quote(account, '') params = {'id': account_id} resp, resp_body = self._account_request('POST', uri, params=params, headers=headers)