Blob

Blob

A stored blob (arbitrary bytes) that can be searched and retrieved.

BlobCollection


class Blob(*args, **kwargs)[source]

A stored blob (arbitrary bytes) that can be searched and retrieved.

Instantiating a blob indicates that you want to create a new Descartes Labs storage blob. If you instead want to retrieve an existing blob use Blob.get(). You can also use Blob.search(). Also see the example for upload().

Parameters:

Note

The reader and writer IDs must be prefixed with email:, user:, group: or org:. The owner ID only accepts org: and user:. Using org: as an owner will assign those privileges only to administrators for that organization; using org: as a reader or writer assigns those privileges to everyone in that organization. The readers and writers attributes are only visible in full to the owners. If you are a reader or a writer those attributes will only display the element of those lists by which you are gaining read or write access.

Any user with owner privileges is able to read the blob attributes or data, modify the blob attributes, or delete the blob, including reading and modifying the owners, writers, and readers attributes.

Any user with writer privileges is able to read the blob attributes or data, or modify the blob attributes, but not delete the blob. A writer can read the owners and can only read the entry in the writers and/or readers by which they gain access to the blob.

Any user with reader privileges is able to read the blob attributes or data. A reader can read the owners and can only read the entry in the writers and/or readers by which they gain access to the blob.

Also see Sharing Resources.

delete()

Delete this catalog object from the Descartes Labs catalog.

Once deleted, you cannot use the catalog object and should release any references.

Raises:

Methods:

data([range])

Downloads storage blob data.

delete(id[, client])

Delete the catalog object with the given id.

delete_many(ids[, client])

Delete many blobs from the Descartes Labs catalog.

download(file[, range])

Downloads storage blob to a file.

exists(id[, client])

Checks if an object exists in the Descartes Labs catalog.

get([id, storage_type, namespace, name, ...])

Get an existing Blob from the Descartes Labs catalog.

get_data([id, storage_type, namespace, ...])

Downloads storage blob data.

get_many(ids[, ignore_missing, client, ...])

Get existing objects from the Descartes Labs catalog.

get_or_create([id, storage_type, namespace, ...])

Get an existing object from the Descartes Labs catalog or create a new object.

iter_data([chunk_size, range])

Downloads storage blob data.

iter_lines([decode_unicode, delimiter])

Downloads storage blob data.

namespace_id(namespace_id[, client])

Generate a fully namespaced id.

reload([request_params])

Reload all attributes from the Descartes Labs catalog.

save([request_params])

Saves this object to the Descartes Labs catalog.

search([client, request_params])

A search query for all blobs.

serialize([modified_only, jsonapi_format])

Serialize the catalog object into json.

update([ignore_errors])

Update multiple attributes at once using the given keyword arguments.

upload(file)

Uploads storage blob from a file.

upload_data(data)

Uploads storage blob from a bytes or str.

Attributes:

ATTRIBUTES

created

The point in time this object was created.

description

A description with further details on this blob.

expires

Timestamp when the blob should be expired and deleted.

extra_properties

A dictionary of up to 50 key/value pairs.

geometry

Geometry representing the location for the blob.

hash

Content hash (MD5) for the blob.

href

Storage location for the blob.

id

A unique identifier for this object.

is_modified

Whether any attributes were changed (see state).

modified

The point in time this object was last modified.

name

The name of this blob.

namespace

The namespace of this blob.

owners

User, group, or organization IDs that own this blob.

readers

User, email, group, or organization IDs that can read this blob.

size_bytes

Size of the blob in bytes.

state

The state of this catalog object.

storage_state

Storage state of the blob.

storage_type

Storage type of the blob.

tags

A list of up to 32 tags, each up to 1000 bytes long.

v1_properties

The value of the attribute is checked against the given type.

writers

User, group, or organization IDs that can edit this blob.

data(range=None)[source]

Downloads storage blob data.

Downloads data from the blob and returns as a bytes object.

The Blob must be in the state SAVED.

Parameters:

range (str or list, optional) – Range(s) of blob to be downloaded. Can either be a string in the standard HTTP Range header format (e.g. “bytes=0-99”), or a list or tuple containing one or two integers (e.g. (0, 99)), or a list or tuple of the same (e.g. ((0, 99), (200-299))). A list or tuple of one integer implies no upper bound; in this case the integer can be negative, indicating the count back from the end of the blob.

Returns:

The data retrieved from the Blob.

Return type:

bytes

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

classmethod delete(id, client=None)

Delete the catalog object with the given id.

Parameters:
Returns:

True if this object was successfully deleted. False if the object was not found.

Return type:

bool

Raises:

Example

>>> Image.delete('my-image-id') 
classmethod delete_many(ids, client=None)[source]

Delete many blobs from the Descartes Labs catalog.

Only those blobs that exist and are owned by the user will be deleted. No errors will be raised for blobs that do not exist or are not owned by the user. If you need to know, compare the supplied list of ids with the returned list of delete ids.

All blobs to be deleted must belong to the same purchase.

Parameters:
Returns:

A list of the ids of the blobs that were successfully deleted.

Return type:

list(str)

Raises:

ClientError or ServerErrorSpurious exception that can occur during a network request.

download(file, range=None)[source]

Downloads storage blob to a file.

Downloads data from the blob to a file.

The Blob must be in the state SAVED.

Parameters:
  • file (str or io.IOBase) – File or files to be uploaded. Can be string with path to the file in the local filesystem, or an file opened for writing (io.IOBase). If a file like object and already open, must be binary mode and writable. Open file-like objects remain open on return and must be closed by the caller.

  • range (str or list, optional) – Range(s) of blob to be downloaded. Can either be a string in the standard HTTP Range header format (e.g. “bytes=0-99”), or a list or tuple containing one or two integers (e.g. (0, 99)), or a list or tuple of the same (e.g. ((0, 99), (200-299))). A list or tuple of one integer implies no upper bound; in this case the integer can be negative, indicating the count back from the end of the blob.

Returns:

The name of the downloaded file.

Return type:

str

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

classmethod exists(id, client=None)

Checks if an object exists in the Descartes Labs catalog.

Parameters:
Returns:

Returns True if the given id represents an existing object in the Descartes Labs catalog and False if not.

Return type:

bool

Raises:

ClientError or ServerErrorSpurious exception that can occur during a network request.

classmethod get(id=None, storage_type=StorageType.DATA, namespace=None, name=None, client=None, request_params=None)[source]

Get an existing Blob from the Descartes Labs catalog.

If the Blob is found, it will be returned in the SAVED state. Subsequent changes will put the instance in the MODIFIED state, and you can use save() to commit those changes and update the Descartes Labs catalog object. Also see the example for save().

Exactly one of the id and name parameters must be specified. If name is specified, it is used together with the storage_type and namespace parameters to form the corresponding id.

Parameters:
  • id (str, optional) – The id of the object you are requesting. Required unless name is supplied. May not be specified if name is specified.

  • storage_type (StorageType, optional) – The storage type of the Blob you wish to retrieve. Defaults to data. Ignored unless name is specified.

  • namespace (str, optional) – The namespace of the Blob you wish to retrieve. Defaults to the user’s org name (if any) plus the unique user hash. Ignored unless name is specified.

  • name (str, optional) – The name of the Blob you wish to retrieve. Required if id is not specified. May not be specified if id is specified.

  • client (CatalogClient, optional) – A CatalogClient instance to use for requests to the Descartes Labs catalog. The get_default_client() will be used if not set.

Returns:

The object you requested, or None if an object with the given id does not exist in the Descartes Labs catalog.

Return type:

CatalogObject or None

Raises:

ClientError or ServerErrorSpurious exception that can occur during a network request.

classmethod get_data(id=None, storage_type=StorageType.DATA, namespace=None, name=None, client=None, range=None, stream=False, chunk_size=None)[source]

Downloads storage blob data.

Downloads data for a given blob id and returns as a bytes object.

Parameters:
  • id (str, optional) – The id of the object you are requesting. Required unless name is supplied. May not be specified if name is specified.

  • storage_type (StorageType, optional) – The storage type of the Blob you wish to retrieve. Defaults to data. Ignored unless name is specified.

  • namespace (str, optional) – The namespace of the Blob you wish to retrieve. Defaults to the user’s org name (if any) plus the unique user hash. Ignored unless name is specified.

  • name (str, optional) – The name of the Blob you wish to retrieve. Required if id is not specified. May not be specified if id is specified.

  • client (Client, optional) – Client instance. If not given, the default client will be used.

  • range (str or list, optional) – Range(s) of blob to be downloaded. Can either be a string in the standard HTTP Range header format (e.g. “bytes=0-99”), or a list or tuple containing one or two integers (e.g. (0, 99)), or a list or tuple of the same (e.g. ((0, 99), (200-299))). A list or tuple of one integer implies no upper bound; in this case the integer can be negative, indicating the count back from the end of the blob.

  • stream (bool, optional) – If True, return a generator that will yield the data in chunks. Defaults to False.

  • chunk_size (int, optional) – If stream is True, the size of chunks over which to stream. Default is whatever chunks are received on the wire.

Returns:

The data retrieved from the Blob. If stream is True, returned as an iterator (generator) which will yeild the data in chunks.

Return type:

bytes or generator

Raises:
classmethod get_many(ids, ignore_missing=False, client=None, request_params=None)

Get existing objects from the Descartes Labs catalog.

All returned Descartes Labs catalog objects will be in the SAVED state. Also see get().

For bands, if you request a specific band type, for example SpectralBand.get_many(), you will only receive that type. Use Band.get_many() to receive any type.

Parameters:
  • ids (list(str)) – A list of identifiers for the objects you are requesting.

  • ignore_missing (bool, optional) – Whether to raise a NotFoundError exception if any of the requested objects are not found in the Descartes Labs catalog. False by default which raises the exception.

  • client (CatalogClient, optional) – A CatalogClient instance to use for requests to the Descartes Labs catalog. The get_default_client() will be used if not set.

Returns:

List of the objects you requested in the same order.

Return type:

list(CatalogObject)

Raises:
classmethod get_or_create(id=None, storage_type=StorageType.DATA, namespace=None, name=None, client=None, **kwargs)[source]

Get an existing object from the Descartes Labs catalog or create a new object.

If the Descartes Labs catalog object is found, and the remainder of the arguments do not differ from the values in the retrieved instance, it will be returned in the SAVED state.

If the Descartes Labs catalog object is found, and the remainder of the arguments update one or more values in the instance, it will be returned in the MODIFIED state.

If the Descartes Labs catalog object is not found, it will be created and the state will be UNSAVED. Also see the example for save().

Parameters:
  • id (str, optional) – The id of the object you are requesting. Required unless name is supplied. May not be specified if name is specified.

  • storage_type (StorageType, optional) – The storage type of the Blob you wish to retrieve. Defaults to data. Ignored unless name is specified.

  • namespace (str, optional) – The namespace of the Blob you wish to retrieve. Defaults to the user’s org name (if any) plus the unique user hash. Ignored unless name is specified.

  • name (str, optional) – The name of the Blob you wish to retrieve. Required if id is not specified. May not be specified if id is specified.

  • client (CatalogClient, optional) – A CatalogClient instance to use for requests to the Descartes Labs catalog. The get_default_client() will be used if not set.

  • kwargs (dict, optional) – With the exception of readonly attributes (created, modified), any attribute of a catalog object can be set as a keyword argument (Also see ATTRIBUTES).

Returns:

The requested catalog object that was retrieved or created.

Return type:

CatalogObject

iter_data(chunk_size=None, range=None)[source]

Downloads storage blob data.

Downloads data from the blob and returns as an iterator (generator) which will yield the data (as a bytes) in chunks. This enables the processing of very large files.

The Blob must be in the state SAVED.

Parameters:
  • chunk_size (int, optional) – Size of chunks over which to iterate. Default is whatever size chunks are received.

  • range (str or list, optional) – Range(s) of blob to be downloaded. Can either be a string in the standard HTTP Range header format (e.g. “bytes=0-99”), or a list or tuple containing one or two integers (e.g. (0, 99)), or a list or tuple of the same (e.g. ((0, 99), (200-299))). A list or tuple of one integer implies no upper bound; in this case the integer can be negative, indicating the count back from the end of the blob.

Returns:

An iterator over the blob data.

Return type:

generator

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

iter_lines(decode_unicode=False, delimiter=None)[source]

Downloads storage blob data.

Downloads data from the blob and returns as an iterator (generator) which will yield the data as text lines. This enables the processing of very large files.

The Blob must be in the state SAVED. The data within the blob must represent encoded text.

Note

This method is not reentrant safe.

Parameters:
  • decode_unicode (bool, optional) – If true, then decode unicode in the incoming data and return strings. Default is to return bytes.

  • delimiter (str or byte, optional) – Delimiter for lines. Type depends on setting of decode_unicode. Default is to use default line break sequence.

Returns:

An iterator over the blob byte or text lines, depending on value of decode_unicode.

Return type:

generator

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

classmethod namespace_id(namespace_id, client=None)[source]

Generate a fully namespaced id.

Parameters:
  • namespace_id (str or None) – The unprefixed part of the id that you want prefixed.

  • client (CatalogClient, optional) – A CatalogClient instance to use for requests to the Descartes Labs catalog. The get_default_client() will be used if not set.

Returns:

The fully namespaced id.

Return type:

str

Example

>>> namespace = Blob.namespace_id("myproject") 
'myorg:myproject' 
reload(request_params=None)

Reload all attributes from the Descartes Labs catalog.

Refresh the state of this catalog object from the object in the Descartes Labs catalog. This may be necessary if there are concurrent updates and the object in the Descartes Labs catalog was updated from another client. The instance state must be in the SAVED state.

If you want to revert a modified object to its original one, you should use get() on the object class with the object’s id.

Raises:

Example

>>> from descarteslabs.catalog import Product
>>> p = Product(id="my_org_id:my_product_id")
>>> # Some time elapses and a concurrent change was made
>>> p.state 
<DocumentState.SAVED: 'saved'>
>>> p.reload() 
>>> # But once you make changes, you cannot use this method any more
>>> p.name = "My name has changed"
>>> p.reload() 
Traceback (most recent call last):
  ...
ValueError: Product instance with id my_org_id:my_product_id has not been saved
>>> # But you can revert
>>> p = Product.get(p.id) 
>>> p.state 
<DocumentState.SAVED: 'saved'>
save(request_params=None)

Saves this object to the Descartes Labs catalog.

If this instance was created using the constructor, it will be in the UNSAVED state and is considered a new Descartes Labs catalog object that must be created. If the catalog object already exists in this case, this method will raise a BadRequestError.

If this instance was retrieved using get(), get_or_create() or any other way (for example as part of a search()), and any of its values were changed, it will be in the MODIFIED state and the existing catalog object will be updated.

If this instance was retrieved using get(), get_or_create() or any other way (for example as part of a search()), and none of its values were changed, it will be in the SAVED state, and if no request_params parameter is given, nothing will happen.

Parameters:

request_params (dict, optional) – A dictionary of attributes that should be sent to the catalog along with attributes already set on this object. Empty by default. If not empty, and the object is in the SAVED state, it is updated in the Descartes Labs catalog even though no attributes were modified.

Raises:

Example

>>> from descarteslabs.catalog import Product
>>> new_product = Product(
...     id="my-product",
...     name="My Product",
...     description="This is a test product"
... )
>>> new_product.state
<DocumentState.UNSAVED: 'unsaved'>
>>> new_product.save() 
>>> # ids will be automatically prefixed by the Descartes Labs catalog
>>> # with your organization id
>>> new_product.id 
my_org_id:my-product
>>> # Now you can retrieve the product and update it
>>> existing_product = Product.get(new_product.id) 
>>> existing_product.state 
<DocumentState.SAVED: 'saved'>
>>> existing_product.name = "My Updated Product" 
>>> existing_product.state 
<DocumentState.MODIFIED: 'modified'>
>>> existing_product.save() 
>>> existing_product.state 
<DocumentState.SAVED: 'saved'>
>>> # After you delete it...
>>> existing_product.delete() 
True
>>> product.state 
<DocumentState.DELETED: 'deleted'>
classmethod search(client=None, request_params=None)[source]

A search query for all blobs.

Return an BlobSearch instance for searching blobs in the Descartes Labs catalog. This instance extends the Search class with the summary() and summary_interval() methods which return summary statistics about the blobs that match the search query.

Parameters:

client (CatalogClient, optional) – A CatalogClient instance to use for requests to the Descartes Labs catalog.

Returns:

An instance of the BlobSearch class

Return type:

BlobSearch

Example

>>> from descarteslabs.catalog import Blob
>>> search = Blob.search().limit(10)
>>> for result in search: 
...     print(result.name) 
serialize(modified_only=False, jsonapi_format=False)

Serialize the catalog object into json.

Parameters:
  • modified_only (bool, optional) – Whether only modified attributes should be serialized. False by default. If set to True, only those attributes that were modified since the last time the catalog object was retrieved or saved will be included.

  • jsonapi_format (bool, optional) – Whether to use the data element for catalog objects. False by default. When set to False, the serialized data will directly contain the attributes of the catalog object. If set to True, the serialized data will follow the exact JSONAPI with a top-level data element which contains id, type, and attributes. The latter will contain the attributes of the catalog object.

update(ignore_errors=False, **kwargs)

Update multiple attributes at once using the given keyword arguments.

Parameters:

ignore_errors (bool, optional) – False by default. When set to True, it will suppress AttributeValidationError and AttributeError. Any given attribute that causes one of these two exceptions will be ignored, all other attributes will be set to the given values.

Raises:
  • AttributeValidationError – If one or more of the attributes being updated are immutable.

  • AttributeError – If one or more of the attributes are not part of this catalog object.

  • DeletedObjectError – If this catalog object was deleted.

upload(file)[source]

Uploads storage blob from a file.

Uploads data from a file and creates the Blob.

The Blob must be in the state UNSAVED. The storage_state, storage_type, namespace, and the name attributes, must all be set. If either the size_bytes and the hash attributes are set, they must agree with the actual file to be uploaded, and will be validated during the upload process.

On return, the Blob object will be updated to reflect the full state of the new blob.

Parameters:

file (str or io.IOBase) – File or files to be uploaded. Can be string with path to the file in the local filesystem, or a file-like object (io.IOBase). If a file like object and already open, must be binary mode and readable. Open file-like objects remain open on return and must be closed by the caller.

Returns:

The uploaded instance.

Return type:

Blob

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

upload_data(data)[source]

Uploads storage blob from a bytes or str.

Uploads data from a string or bytes and creates the Blob.

The Blob must be in the state UNSAVED. The storage_state, storage_type, namespace, and the name attributes, must all be set. If either the size_bytes and the hash attributes are set, they must agree with the actual data to be uploaded, and will be validated during the upload process.

On return, the Blob object will be updated to reflect the full state of the new blob.

Parameters:

data (str or bytes) – Data to be uploaded. A str will be default encoded to bytes.

Returns:

The uploaded instance.

Return type:

Blob

Raises:
  • ValueError – If any improper arguments are supplied.

  • DeletedObjectError – If this blob was deleted.

ATTRIBUTES = ('namespace', 'name', 'storage_state', 'storage_type', 'description', 'geometry', 'expires', 'href', 'size_bytes', 'hash', 'owners', 'readers', 'writers', 'extra_properties', 'tags', 'id', 'created', 'modified')
created

The point in time this object was created.

Filterable, sortable.

Type:

datetime, readonly

description

A description with further details on this blob.

The description can be up to 80,000 characters and is used by Search.find_text().

Searchable

Type:

str, optional

expires

Timestamp when the blob should be expired and deleted.

Filterable, sortable.

Type:

str or datetime, optional

extra_properties

A dictionary of up to 50 key/value pairs.

The keys of this dictionary must be strings, and the values of this dictionary can be strings or numbers. This allows for more structured custom metadata to be associated with objects.

Type:

dict, optional

geometry

Geometry representing the location for the blob.

Filterable

(use BlobSearch.intersects to search based on geometry)

Type:

str or shapely.geometry.base.BaseGeometry, optional

hash

Content hash (MD5) for the blob.

Type:

str, optional

href

Storage location for the blob.

This attribute may not be set by the end user.

Type:

str, optional

id

A unique identifier for this object.

Note that if you pass a string that does not begin with your Descartes Labs user organization ID, it will be prepended to your id with a : as separator. If you are not part of an organization, your user ID is used. Once set, it cannot be changed.

Type:

str, immutable

property is_modified

Whether any attributes were changed (see state).

True if any of the attribute values changed since the last time this catalog object was retrieved or saved. False otherwise.

Note that assigning an identical value does not affect the state.

Type:

bool

modified

The point in time this object was last modified.

Filterable, sortable.

Type:

datetime, readonly

name

The name of this blob.

All blobs are stored and indexed by name. Names are allowed a restricted alphabet (a-zA-Z0-9:._/-), but may not begin or end with a /. The combined length of the namespace and the name cannot exceed 979 bytes.

The / is intended to be used like a directory in a pathname to allow for prefix search operations, but otherwise has no special meaning.

Searchable, sortable.

Type:

str

namespace

The namespace of this blob.

All blobs are stored and indexed under a namespace. Namespaces are allowed a restricted alphabet (a-zA-Z0-9:._-), and must begin with the user’s org name, or their unique user hash if the user has no org. The required prefix is seperated from the rest of the namespace name (if any) by a :. If not provided, the namespace will default to the users org (if any) and the unique user hash. The combined length of the namespace and the name cannot exceed 979 bytes.

Searchable, sortable.

Type:

str

owners

User, group, or organization IDs that own this blob.

Defaults to [user:current_user, org:current_org]. The owner can edit, delete, and change access to this blob. See this note.

Filterable.

Type:

list(str), optional

readers

User, email, group, or organization IDs that can read this blob.

Will be empty by default. This attribute is only available in full to the owners of the blob. See this note.

Type:

list(str), optional

size_bytes

Size of the blob in bytes.

Filterable, sortable.

Type:

int, optional

property state

The state of this catalog object.

Type:

DocumentState

storage_state

Storage state of the blob.

The state is AVAILABLE if the data is available and can be retrieved, REMOTE if the data is not currently available.

Filterable, sortable.

Type:

str or StorageState

storage_type

Storage type of the blob.

DATA is managed by end users (e.g. via descarteslabs.catalog.Blob.upload(). Other types are generated and managed by various components of the platform.

Filterable, sortable.

Type:

str or StorageType

tags

A list of up to 32 tags, each up to 1000 bytes long.

The tags may support the classification and custom filtering of objects.

Filterable.

Type:

list, optional

v1_properties

The value of the attribute is checked against the given type.

Parameters:
  • attribute_type (type) – The type of the attribute.

  • coerce (bool, optional) – Whether a non-conforming value should be coerced to that type. False by default.

  • **kwargs (optional) – See Attribute.

writers

User, group, or organization IDs that can edit this blob.

Writers will also have read permission. Writers will be empty by default. See note below. This attribute is only available in full to the owners of the blob. See this note.

Type:

list(str), optional

class BlobCollection(iterable=None, item_type=None)[source]

Methods:

append(x)

Append x to the end of this Collection.

extend(x)

Extend this Collection by appending elements from the iterable.

filter(predicate)

Returns a Collection filtered by predicate.

groupby(*predicates)

Groups items by predicates.

map(f)

Returns a Collection of f applied to each item.

sort(field[, ascending])

Returns a Collection, sorted by the given field and direction.

sorted(*predicates, **reverse)

Returns a Collection, sorted by predicates in ascending order.

Attributes:

each

Any operations chained onto each (attribute access, item access, and calls) are applied to each item in the Collection.

append(x)

Append x to the end of this Collection.

The type of the item must match the type of the collection.

Parameters:

x (Any) – Add an item to the collection

extend(x)

Extend this Collection by appending elements from the iterable.

The type of the items in the list must all match the type of the collection.

Parameters:

x (List[Any]) – Extend a collection with the items from the list.

filter(predicate)

Returns a Collection filtered by predicate.

Predicate can either be a callable or an Expression from Properties.

If the predicate is a callable, filter() will return all items for which predicate(item) is True.

If the predicate is an Expression, filter() will return all items for which predicate.evaluate(item) is True.

Parameters:

predicate (callable or Expression) – Either a callable or a Properties Expression which is called or evaluated for each item in the list.

Returns:

A new collection with only those items for which the predicate returned or evaluated to True.

Return type:

Collection

groupby(*predicates)

Groups items by predicates.

Groups items by predicates and yields tuple of (group, items) for each group, where items is a Collection.

Each predicate can be a key function, or a string of dot-chained attributes to use as sort keys.

Parameters:

predicates (callable or str) – Any positional arguments are predicates. If the predicate is a string, it denotes an attribute for each element, potentially with levels separated by a dot. If the predicate is a callable, it must return the value to sort by for each given element.

Yields:

Tuple[str, Collection] – A tuple of (group, Collection) for each group.

Examples

>>> import collections
>>> FooBar = collections.namedtuple("FooBar", ["foo", "bar"])
>>> c = Collection([FooBar("a", True), FooBar("b", False), FooBar("a", False)])
>>> for group, items in c.groupby("foo"):
...     print(group)
...     print(items)
a
Collection([FooBar(foo='a', bar=True), FooBar(foo='a', bar=False)])
b
Collection([FooBar(foo='b', bar=False)])
>>> for group, items in c.groupby("bar"):
...     print(group)
...     print(items)
False
Collection([FooBar(foo='b', bar=False), FooBar(foo='a', bar=False)])
True
Collection([FooBar(foo='a', bar=True)])
map(f)

Returns a Collection of f applied to each item.

Parameters:

f (callable) – Apply function f to each element of the collection and return the result as a collection.

Returns:

A collection with the results of the function f applied to each element of the original collection.

Return type:

Collection

sort(field, ascending=True)

Returns a Collection, sorted by the given field and direction.

Parameters:
  • field (str) – The name of the field to sort by

  • ascending (bool) – Sorts results in ascending order if True (the default), and in descending order if False.

Returns:

The sorted collection.

Return type:

Collection

Example

>>> from descarteslabs.catalog import Product
>>> collection = Product.search().collect() 
>>> sorted_collection = collection.sort("created", ascending=False) 
>>> sorted_collection 
sorted(*predicates, **reverse)

Returns a Collection, sorted by predicates in ascending order.

Each predicate can be a key function, or a string of dot-chained attributes to use as sort keys. The reverse flag returns results in descending order.

Parameters:
  • predicates (callable or str) – Any positional arguments are predicates. If the predicate is a string, it denotes an attribute for each element, potentially with levels separated by a dot. If the predicate is a callable, it must return the value to sort by for each given element.

  • reverse (bool) – The sort is ascending by default, by setting reverse to True, the sort will be descending.

Returns:

The sorted collection.

Return type:

Collection

Examples

>>> import collections
>>> FooBar = collections.namedtuple("FooBar", ["foo", "bar"])
>>> X = collections.namedtuple("X", "x")
>>> c = Collection([FooBar(1, X("one")), FooBar(2, X("two")), FooBar(3, X("three"))])
>>> c.sorted("foo")
Collection([FooBar(foo=1, bar=X(x='one')), FooBar(foo=2, bar=X(x='two')), FooBar(foo=3, bar=X(x='three'))])
>>> c.sorted("bar.x")
Collection([FooBar(foo=1, bar=X(x='one')), FooBar(foo=3, bar=X(x='three')), FooBar(foo=2, bar=X(x='two'))])
property each

Any operations chained onto each (attribute access, item access, and calls) are applied to each item in the Collection.

Yields:

Any – The result of an item with all operations following each applied to it.

Notes

  • Add combine() at the end of the operations chain to combine the results into a list by default, or any container type passed into combine()

  • Use pipe(f, *args, **kwargs) to yield f(x, *args, **kwargs) for each item x yielded by the preceeding operations chain

Examples

>>> c = Collection(["one", "two", "three", "four"])
>>> for x in c.each.capitalize():
...     print(x)
One
Two
Three
Four
>>> c.each.capitalize()[:2]
'On'
'Tw'
'Th'
'Fo'
>>> c.each.capitalize().pipe(len)
3
3
5
4
>>> list(c.each.capitalize().pipe(len).combine(set))
[3, 4, 5]