echemdb.descriptor
Wrappers for a Data Package’s metadata stored in the descriptor property.
These wrappers are automatically applied to all metadata of each Entry
in our Database.
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>
- echemdb.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 echemdb.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 echemdb.descriptor.QuantityDescriptor(descriptor)
- Extends a descriptor with convenience methods when it is encoding a quantity, i.e., unit and value. - EXAMPLES: - >>> from echemdb.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 echemdb.entry import Entry >>> entry = Entry.create_examples()[0] >>> temperature = entry.system.electrolyte.temperature >>> temperature.quantity <Quantity 298.15 K>