oio.api package

Submodules

oio.api.backblaze module

class oio.api.backblaze.BackblazeChunkDownloadHandler(meta, chunks, offset, size, headers=None, backblaze_info=None)[source]

Bases: object

get_stream()[source]
class oio.api.backblaze.BackblazeChunkWriteHandler(sysmeta, meta_chunk, checksum, storage_method, backblaze_info)[source]

Bases: object

stream(source)[source]
class oio.api.backblaze.BackblazeDeleteHandler(meta, chunks, backblaze_info)[source]

Bases: object

delete()[source]
class oio.api.backblaze.BackblazeDownloadHandler(sysmeta, meta_chunks, backblaze_info, headers, range_start=None, range_end=None)[source]

Bases: object

get_iter()[source]
class oio.api.backblaze.BackblazeWriteHandler(source, sysmeta, chunk_prep, storage_method, backblaze_info, **kwargs)[source]

Bases: oio.api.io.WriteHandler

stream()[source]

Only works with files, for the moment, because we need a file size to known when to stop.

oio.api.backblaze_http module

class oio.api.backblaze_http.Backblaze(account_id, application_key, authorization_required=None, upload_required=None, upload_part=False)[source]

Bases: object

BACKBLAZE_BASE_API_URL = 'https://api.backblazeb2.com'
BACKBLAZE_MAX_CHUNK_SIZE = 209715200
authorization_token
delete(bucket_name, metadata)[source]
delete_by_path_name(file_id, file_name)[source]
download(bucket_name, metadata, headers=None)[source]
download_by_path_name(bucket_name, link, headers=None)[source]
get_backblaze_infos(bucket_name)[source]
get_file_number(bucket_name)[source]
get_list_buckets()[source]
get_list_file_names(bucket_name)[source]
get_list_file_names_by_bucket_id(bucket_id)[source]
get_size(bucket_name)[source]
upload(bucket_name, meta, data, sha1=None)[source]
upload_part(file_id, data, part_number, sha1=None)[source]
upload_part_begin(bucket_name, meta)[source]
upload_part_end(file_id, sha1_array)[source]
exception oio.api.backblaze_http.BackblazeException(status_code, message, response, headers_send)[source]

Bases: exceptions.Exception

headers_received
headers_send
message
status_code
class oio.api.backblaze_http.BackblazeUtils[source]

Bases: object

b2_authorization_list = {}
static get_credentials(storage_method, application_key_path=None, renew=False)[source]
exception oio.api.backblaze_http.BackblazeUtilsException(string)[source]

Bases: exceptions.Exception

class oio.api.backblaze_http.Requests(error_handler=None)[source]

Bases: object

get_response_from_request(content_type, url, headers=None, file_descriptor=None, json=False)[source]

oio.api.base module

class oio.api.base.HttpApi(endpoint=None, pool_manager=None, **kwargs)[source]

Bases: object

Provides facilities to make HTTP requests towards the same endpoint, with a pool of connections.

oio.api.ec module

class oio.api.ec.ECChunkDownloadHandler(storage_method, chunks, meta_start, meta_end, headers, connection_timeout=None, read_timeout=None, **_kwargs)[source]

Bases: object

Handles the download of an EC meta chunk

get_stream()[source]
class oio.api.ec.ECRebuildHandler(meta_chunk, missing, storage_method, connection_timeout=None, read_timeout=None, **_kwargs)[source]

Bases: object

rebuild()[source]
class oio.api.ec.ECStream(storage_method, readers, range_infos, meta_length, fragment_length)[source]

Bases: object

Reads an EC meta chunk.

Handles the different readers.

close()[source]
get_iter()[source]
start()[source]
class oio.api.ec.ECWriteHandler(source, sysmeta, chunk_preparer, storage_method, headers=None, connection_timeout=None, write_timeout=None, read_timeout=None, deadline=None, chunk_checksum_algo='md5', **_kwargs)[source]

Bases: oio.api.io.WriteHandler

Handles writes to an EC content. For initialization parameters, see oio.api.io.WriteHandler.

stream()[source]

Uploads a stream of data. :returns: a tuple of 3 which contains:

  • the list of chunks to be saved in the container
  • the number of bytes transfered
  • the actual checksum of the data that went through the stream.
class oio.api.ec.EcChunkWriter(chunk, conn, write_timeout=None, chunk_checksum_algo='md5', **_kwargs)[source]

Bases: object

Writes an EC chunk

chunk
conn
classmethod connect(chunk, sysmeta, reqid=None, connection_timeout=None, write_timeout=None, **kwargs)[source]
finish(metachunk_size, metachunk_hash)[source]

Send metachunk_size and metachunk_hash as trailers

getresponse()[source]

Read the HTTP response from the connection

send(data)[source]
start(pool)[source]

Spawn the send coroutine

wait()[source]

Wait until all data in the queue has been processed by the send coroutine

class oio.api.ec.EcMetachunkWriter(sysmeta, meta_chunk, global_checksum, storage_method, reqid=None, connection_timeout=None, write_timeout=None, read_timeout=None, **kwargs)[source]

Bases: oio.api.io.MetachunkWriter

stream(source, size)[source]
oio.api.ec.ec_encode(storage_method, n)[source]

Encode EC segments

oio.api.ec.meta_chunk_range_to_segment_range(meta_start, meta_end, segment_size)[source]

Converts a meta chunk range to a segment range.

Examples:
meta_chunk_range_to_segment_range(100, 600, 256) = (0, 767) meta_chunk_range_to_segment_range(100, 600, 512) = (0, 1023) meta_chunk_range_to_segment_range(300, None, 256) = (256, None)
Returns:a tuple (segment_start, segment_end)
  • segment_start is the first byte of the first segment, or None if suffix byte range
  • segment_end is the last byte of the last segment, or None if prefix byte range
oio.api.ec.segment_range_to_fragment_range(segment_start, segment_end, segment_size, fragment_size)[source]

Converts a segment range into a fragment range.

Returns:a tuple (fragment_start, fragment_end)
  • fragment_start is the first byte of the first fragment, or None if this is a suffix byte range
  • fragment_end is the last byte of the last fragment, or None if this is a prefix byte range

oio.api.io module

class oio.api.io.ChunkReader(chunk_iter, buf_size, headers, connection_timeout=None, read_timeout=None, align=False, **_kwargs)[source]

Bases: object

Reads a chunk.

fill_ranges(start, end, length)[source]

Fill the request ranges.

get_iter()[source]
static get_next_part(parts_iter)[source]

Gets next part of the body

NOTE: for the moment only return one part
(single range only)
headers
iter_from_resp(source, parts_iter, part, chunk)[source]
recover(nb_bytes)[source]

Recover the request.

Parameters:

nb_bytes – number of bytes already consumed that we need to discard if we perform a recovery from another source.

Raises:
reqid
Returns:the request ID or None
stream()[source]

Get a generator over chunk data. After calling this method, the headers field will be available (even if no data is read from the generator).

class oio.api.io.Closeable(*iterables)[source]

Bases: object

close()[source]
class oio.api.io.IOBaseWrapper(wrapped)[source]

Bases: io.RawIOBase

Wrap any object that has a read method into an io.IOBase.

read(n=-1)[source]
readable()[source]

Return whether object was opened for reading.

If False, read() will raise IOError.

readinto(b)[source]
class oio.api.io.MetachunkPreparer(container_client, account, container, obj_name, policy=None, **kwargs)[source]

Bases: object

Get metadata for a new object and continuously yield new metachunks.

all_chunks_so_far()[source]

Get the list of all chunks yielded so far.

class oio.api.io.MetachunkWriter(storage_method=None, quorum=None, chunk_checksum_algo='md5', **_kwargs)[source]

Bases: object

Base class for metachunk writers

quorum

Minimum number of chunks required to validate an upload

quorum_or_fail(successes, failures)[source]

Compare the number of uploads against the quorum.

Parameters:
  • successes (list or tuple) – a list of chunk objects whose upload succeded
  • failures (list or tuple) – a list of chunk objects whose upload failed
Raises:
  • exc.SourceReadError – if there is an error while reading data from the client
  • exc.SourceReadTimeout – if there is a timeout while reading data from the client
  • exc.OioTimeout – if there is a timeout among the errors
  • exc.OioException – if quorum has not been reached for any other reason
class oio.api.io.WriteHandler(source, sysmeta, chunk_preparer, storage_method, headers=None, connection_timeout=None, write_timeout=None, read_timeout=None, deadline=None, chunk_checksum_algo='md5', **_kwargs)[source]

Bases: object

read_timeout
stream()[source]

Uploads a stream of data. :returns: a tuple of 3 which contains:

  • the list of chunks to be saved in the container
  • the number of bytes transfered
  • the actual checksum of the data that went through the stream.
write_timeout
oio.api.io.chain(iterable)[source]
oio.api.io.close_source(source)[source]

Safely close the connection behind source.

oio.api.io.consume(it)[source]
oio.api.io.discard_bytes(buf_size, start)[source]

Discard the right amount of bytes so the reader yields only full records.

oio.api.io.iters_to_raw_body(parts_iter)[source]
oio.api.io.make_iter_from_resp(resp)[source]

Makes a part iterator from a HTTP response

iterator return tuples:

(start, end, length, headers, body_file)

oio.api.object_storage module

class oio.api.object_storage.ObjectStorageAPI(namespace, endpoint=None, **kwargs)[source]

Bases: oio.api.object_storage.ObjectStorageApi

Deprecated:transitional wrapper for ObjectStorageApi
class oio.api.object_storage.ObjectStorageApi(namespace, logger=None, **kwargs)[source]

Bases: object

The Object Storage API.

High level API that wraps AccountClient, ContainerClient and DirectoryClient classes.

Every method that takes a kwargs argument accepts the at least the following keywords:

  • headers: dict of extra headers to pass to the proxy
  • connection_timeout: float
  • read_timeout: float
  • write_timeout: float
EXTRA_KEYWORDS = ('chunk_checksum_algo', 'autocreate')
TIMEOUT_KEYS = ('connection_timeout', 'read_timeout', 'write_timeout')
account_create(**kwargs)[source]

Create an account.

Parameters:account (str) – name of the account to create
Returns:True if the account has been created
account_del_properties(account=None, *args, **kwargs)[source]
account_delete(account=None, *args, **kwargs)[source]

Delete an account.

Parameters:account (str) – name of the account to delete
account_flush(account=None, *args, **kwargs)[source]

Flush all containers of an account

Parameters:account (str) – name of the account to flush
account_list(**kwargs)[source]

List known accounts.

Notice that account creation is asynchronous, and an autocreated account may appear in the listing only after several seconds.

account_refresh(account=None, *args, **kwargs)[source]

Refresh counters of an account.

Parameters:account (str) – name of the account to refresh, or None to refresh all accounts (slow)
account_set_properties(account=None, *args, **kwargs)[source]
account_show(account=None, *args, **kwargs)[source]

Get information about an account.

account_update(account=None, *args, **kwargs)[source]
all_accounts_refresh(**kwargs)[source]
Deprecated:call account_refresh(None) instead
blob_client

A low-level client to rawx services.

Return type:oio.blob.client.BlobClient
container_create(**kwargs)[source]

Create a container.

Parameters:
  • account (str) – account in which to create the container
  • container (str) – name of the container
  • properties (dict) – properties to set on the container
Returns:

True if the container has been created, False if it already exists

container_create_many(**kwargs)[source]

Create Many containers

Parameters:
  • account (str) – account in which to create the containers
  • containers (list) – names of the containers
  • properties (dict) – properties to set on the containers
container_del_properties(account, container, *args, **kwargs)[source]

Delete properties of a container.

Parameters:
  • account (str) – name of the account
  • container (str) – name of the container to deal with
  • properties (list) – a list of property keys
container_delete(account, container, *args, **kwargs)[source]

Delete a container.

Parameters:
  • account (str) – account from which to delete the container
  • container (str) – name of the container
container_flush(account, container, *args, **kwargs)[source]

Flush a container

Parameters:
  • account (str) – account from which to delete the container
  • container (str) – name of the container
  • fast (bool) – flush container quickly, may put high pressure on the event system
container_get_properties(account, container, *args, **kwargs)[source]

Get information about a container (user and system properties).

Parameters:
  • account (str) – account in which the container is
  • container (str) – name of the container
  • propertiesignored
Returns:

a dict with “properties” and “system” entries, containing respectively a dict of user properties and a dict of system properties.

container_list(account=None, *args, **kwargs)[source]

Get the list of containers of an account.

Parameters:
  • account (str) – account from which to get the container list
  • limit (int) – maximum number of results to return
  • marker (str) – name of the container from where to start the listing
  • end_marker
  • prefix
  • delimiter
Returns:

the list of containers of an account

Return type:

list of items (list) with 5 fields: name, number of objects, number of bytes, 1 if the item is a prefix or 0 if the item is actually a container, and modification time.

container_purge(account, container, *args, **kwargs)[source]
container_refresh(account, container, *args, **kwargs)[source]
container_set_properties(account, container, *args, **kwargs)[source]

Set properties on a container.

Parameters:
  • account (str) – name of the account
  • container (str) – name of the container where to set properties
  • properties (dict) – a dictionary of properties
  • clear (bool) –
  • system – dictionary of system properties to set
container_show(account, container, *args, **kwargs)[source]

Get information about a container (user properties).

Parameters:
  • account (str) – account in which the container is
  • container (str) – name of the container
Returns:

a dict with “properties” containing a dict of user properties.

container_snapshot(account, container, *args, **kwargs)[source]

Take a snapshot of a container.

Create a separate database containing all information about the contents from the original database, but with copies of the chunks at the time of the snapshot. This new database is not replicated, and is frozen (you cannot write into it).

Pay attention to the fact that the source container is frozen during the snapshot capture. The capture may take some time, depending on the number of objects hosted by the container.

Parameters:
  • account (str) – account in which the source container is.
  • container (str) – name of the source container.
  • dst_account (str) – account in which the snapshot will be created.
  • dst_container (str) – name of the new container (i.e. the snapshot).
container_touch(account, container, *args, **kwargs)[source]

Trigger a notification about the container state.

Parameters:
  • account (str) – account from which to delete the container
  • container (str) – name of the container
container_update(account, container, metadata, clear=False, **kwargs)[source]
Deprecated:use container_set_properties
object_analyze(*args, **kwargs)[source]
Deprecated:use object_locate
object_create(account, container, *args, **kwargs)[source]

Create an object or append data to object in container of account with data taken from either data (str or generator) or file_or_path (path to a file or file-like object). The object will be named after obj_name if specified, or after the base name of file_or_path.

Parameters:
  • account (str) – name of the account where to create the object
  • container (str) – name of the container where to create the object
  • file_or_path (str or file-like object) – file-like object or path to a file from which to read object data
  • data (str or generator) – object data (if file_or_path is not set)
  • etag (str) – entity tag of the object
  • obj_name – name of the object to create. If not set, will use the base name of file_or_path.
  • mime_type (str) – MIME type of the object
  • properties (dict) – a dictionary of properties
  • policy (str) – name of the storage policy
  • key_file
  • append (bool) – if set, data will be append to existing object (or object will be created if unset)
  • autocreate – if set to false, autocreation of container will be

disabled :type autocreate: bool

Parameters:
  • perfdata – optional dict that will be filled with metrics of time spent to resolve the meta2 address, to do the meta2 requests, and to upload chunks to rawx services.
  • deadline (float seconds) – deadline for the request, in monotonic time (oio.common.utils.monotonic_time). This supersedes timeout or read_timeout keyword arguments.
Returns:

list of chunks, size and hash of what has been uploaded

object_del_properties(account, container, obj, *args, **kwargs)[source]

Delete some properties from an object.

Parameters:properties (list) – list of property keys to delete
Returns:True if the property has been deleted (or was missing)
object_delete(account, container, obj, *args, **kwargs)[source]

Delete an object from a container. If versioning is enabled and no version is specified, the object will be marked as deleted but not actually deleted.

Parameters:
  • account (str) – name of the account the object belongs to
  • container (str) – name of the container the object belongs to
  • obj – name of the object to delete
  • version – version of the object to delete
Returns:

True on success

object_delete_many(**kwargs)[source]

Delete several objects.

Parameters:objs – an iterable of object names (should not be a generator)
Returns:a list of tuples with the name of the object and a boolean telling if the object has been successfully deleted
Return type:list of tuple
object_drain(**kwargs)[source]

Remove all the chunks of a content, but keep all the metadata.

Parameters:
  • account (str) – name of the account where the object is present
  • container (str) – name of the container where the object is present
  • obj – name of the object to drain
object_fastcopy(*args, **kwargs)[source]
Deprecated:use object_link.
object_fetch(*args, **kwargs)[source]

Download an object.

Parameters:
  • account – name of the account in which the object is stored
  • container – name of the container in which the object is stored
  • obj – name of the object to fetch
  • version (str) – version of the object to fetch
  • ranges (list of tuple) – a list of object ranges to download
  • key_file – path to the file containing credentials
  • properties (bool) – should the request return object properties along with content description (True by default)
  • perfdata – optional dict that will be filled with metrics of time spent to resolve the meta2 address, to do the meta2 request, and the time-to-first-byte, as seen by this API.
Returns:

a dictionary of object metadata and a stream of object data

Return type:

tuple

object_get_properties(account, container, obj, *args, **kwargs)[source]

Get the description of an object along with its user properties.

Parameters:
  • account – name of the account in which the object is stored
  • container – name of the container in which the object is stored
  • obj – name of the object to query
Returns:

a dict describing the object

example
{‘hash’: ‘6BF60C17CC15EEA108024903B481738F’,

‘ctime’: ‘1481031763’, ‘deleted’: ‘False’, ‘properties’: {

u’projet’: u’OpenIO-SDS’},

‘length’: ‘43518’, ‘hash_method’: ‘md5’, ‘chunk_method’: ‘ec/algo=liberasurecode_rs_vand,k=6,m=3’, ‘version’: ‘1481031762951972’, ‘policy’: ‘EC’, ‘id’: ‘20BF2194FD420500CD4729AE0B5CBC07’, ‘mime_type’: ‘application/octet-stream’, ‘name’: ‘Makefile’}

object_head(account, container, obj, trust_level=0, **kwargs)[source]

Check for the presence of an object in a container.

Parameters:trust_level (int) – 0: do not check chunks; 1: check if there are enough chunks to read the object; 2: check if all chunks are present.

Make a shallow copy of an object. Works across accounts and across containers.

object_list(account, container, *args, **kwargs)[source]

Lists objects inside a container.

Parameters:
  • properties – if True, list object properties along with objects
  • versions – if True, list all versions of objects
  • deleted – if True, list also the deleted objects
Returns:

a dict which contains * ‘objects’: the list of object descriptions * ‘prefixes’: common prefixes (only if delimiter and prefix are set) * ‘properties’: a dict of container properties * ‘system’: a dict of system metadata * ‘truncated’: a bool telling if the listing was truncated * ‘next_marker’: a str to be used as marker to get the next

page of results (in case the listing was truncated)

object_locate(account, container, obj, *args, **kwargs)[source]

Get a description of the object along with the list of its chunks.

Parameters:
  • account – name of the account in which the object is stored
  • container – name of the container in which the object is stored
  • obj – name of the object to query
  • version – version of the object to query
  • chunk_info – if True, fetch additional information about chunks from rawx services (slow). The second element of the returned tuple becomes a generator (instead of a list).
  • properties (bool) – should the request return object properties along with content description
Returns:

a tuple with object metadata dict as first element and chunk list as second element

object_set_properties(account, container, obj, *args, **kwargs)[source]

Set properties on an object.

Parameters:
  • account – name of the account in which the object is stored
  • container – name of the container in which the object is stored
  • obj – name of the object to query
  • properties – dictionary of properties
object_show(account, container, obj, *args, **kwargs)[source]

Get the description of an object along with the dictionary of user-set properties.

Deprecated:prefer using object_get_properties, for consistency with container_get_properties.
object_touch(**kwargs)[source]

Trigger a notification about an object (as if it just had been created).

Parameters:
  • account (str) – name of the account where to create the object
  • container (str) – name of the container where to create the object
  • obj – name of the object to touch
object_truncate(account, container, obj, *args, **kwargs)[source]

Truncate object at specified size. Only shrink is supported. A download may occur if size is not on chunk boundaries.

Parameters:
  • account – name of the account in which the object is stored
  • container – name of the container in which the object is stored
  • obj – name of the object to query
  • version – version of the object to query
  • size – new size of object
object_update(account, container, obj, metadata, version=None, clear=False, **kwargs)[source]
Deprecated:use object_set_properties
proxy_client
oio.api.object_storage.patch_kwargs(fnc)[source]

Patch keyword arguments with the ones passed to the class’ constructor.

oio.api.replication module

class oio.api.replication.FakeChecksum(actual_checksum)[source]

Bases: object

Acts as a checksum object but does not compute anything

hexdigest()[source]

Returns the checksum passed as constructor parameter

update(*_args, **_kwargs)[source]
class oio.api.replication.ReplicatedMetachunkWriter(sysmeta, meta_chunk, checksum, storage_method, quorum=None, connection_timeout=None, write_timeout=None, read_timeout=None, headers=None, **kwargs)[source]

Bases: oio.api.io.MetachunkWriter

stream(source, size=None)[source]
class oio.api.replication.ReplicatedWriteHandler(source, sysmeta, chunk_preparer, storage_method, headers=None, connection_timeout=None, write_timeout=None, read_timeout=None, deadline=None, chunk_checksum_algo='md5', **_kwargs)[source]

Bases: oio.api.io.WriteHandler

Handles writes to a replicated content. For initialization parameters, see oio.api.io.WriteHandler.

stream()[source]

Uploads a stream of data. :returns: a tuple of 3 which contains:

  • the list of chunks to be saved in the container
  • the number of bytes transfered
  • the actual checksum of the data that went through the stream.

Module contents