unitpackage.descriptor

Wrappers for a Data Package’s metadata stored within the metadata descriptor property of a resource.

These wrappers are automatically applied to all metadata of each Entry in our Collection.

Metadata in data packages is stored as a JSON object. In Python, such a nested JSON object gets turned into a hierarchy of dictionaries and lists. Such raw data structures can be a bit tedious to work with, so the descriptors in this module provide some convenience wrappers for it, e.g., better tab-completion when working in an interactive session.

EXAMPLES:

To add convenience methods to a data package’s descriptor, run it through the Descriptor() factory function:

>>> descriptor = {'some': {'nested': 'metadata'}}
>>> descriptor = Descriptor(descriptor)

Such a descriptor has some added convenience methods that make it more convenient to work with.

For example, it can be easily dumped to YAML:

>>> print(descriptor.yaml)
some:
    nested: metadata

It can be explored with attributes that are more tab-completion friendly:

>>> descriptor.some.nested
'metadata'

Extra methods are added if the descriptor satisfies a certain interface:

>>> descriptor = {'some': {'nested': {'value': 13.37, 'unit': 'parsec'}}}
>>> descriptor = Descriptor(descriptor)
>>> descriptor.some.nested.quantity.to('km')
<Quantity 4.12555093e+14 km>
unitpackage.descriptor.Descriptor(descriptor)

Return descriptor augmented with additional convenience methods.

EXAMPLES:

Primitive types are returned unchanged:

>>> Descriptor("string")
'string'

Dictionaries are augmented with attribute access:

>>> descriptor = Descriptor({"an attribute": 13.37})
>>> descriptor.an_attribute
13.37

Lists are recursively augmented:

>>> descriptor = Descriptor([{"an attribute": 13.37}, {}])
>>> descriptor[0].an_attribute
13.37

Dictionaries encoding a unit and value are augmented with astropy convenience methods:

>>> descriptor = Descriptor({"value": 1, "unit": "liter"})
>>> descriptor.quantity.to("m^3")
<Quantity 0.001 m3>
class unitpackage.descriptor.GenericDescriptor(descriptor)

Wrapper for a data package’s descriptor to make searching in metadata easier.

EXAMPLES:

>>> GenericDescriptor({'a': 0})
{'a': 0}
property yaml

Return a printable representation of this descriptor in yaml format.

EXAMPLES:

>>> descriptor = GenericDescriptor({'a': 0})
>>> descriptor.yaml
'a: 0\n'
class unitpackage.descriptor.QuantityDescriptor(descriptor)

Extends a descriptor with convenience methods when it is encoding a quantity, i.e., unit and value.

EXAMPLES:

>>> from unitpackage.entry import Entry
>>> entry = Entry.create_examples()[0]
>>> temperature = entry.system.electrolyte.temperature
>>> temperature
298.15 K
property quantity

This quantity as an astropy quantity.

EXAMPLES:

>>> from unitpackage.entry import Entry
>>> entry = Entry.create_examples()[0]
>>> temperature = entry.system.electrolyte.temperature
>>> temperature.quantity
<Quantity 298.15 K>