caosadvancedtools.models package

Submodules

caosadvancedtools.models.data_model module

class caosadvancedtools.models.data_model.DataModel(*args)

Bases: dict

Provides tools for managing a data model.

When constructing a data model the CaosDB representation can easily be created using the classes RecordType and Propery, storing them in a Container and inserting it in CaoSDB. However, this has one drawback: You cannot simply change someting and update the container. The container will insist on having valid ids for all contained Entities.

This class allows you to define your model as easily but also provides you with a method (sync_data_model) that will sync with the data model in an existing CaosDB instance.

This is possible because entities, defined in this model, are identified with entities in CaosDB using names. I.e. a RecordType “Experiment” in this model will update an existing RecordType with name “Experiment” in CaosDB. Thus, be carefull not to change existing Entities that were created for a different purpose (e.g. someone else’s experiment).

DataModel inherits from dict. The keys are always the names of the entities. Thus you cannot have unnamed entities in your model.

Example:

# Create a DataModel with a RecordType and a Property, not assuming any # relation between the two. dm = DataModel([db.RecordType(name=”myRecordType”),

db.Property(name=”myProperty”)])

# Sync the DataModel with the server, so that the server state is consistent # with this DataModel’s content. dm.sync_data_model() # Now the DataModel’s IDs are the same as on the server.

append(entity: caosdb.common.models.Entity)
collect_entities()

Collects all entities: explicitly defined RecordTypes and Properties and those mentioned as Properties

static entities_without(entities, names)

Return a new list with all entities which do not have certain names.

Parameters
  • entities (iterable) – A iterable with entities.

  • names (iterable of str) – Only entities which do not have one of these names will end up in the returned iterable.

Returns

A list with entities.

Return type

list

extend(entities: List[caosdb.common.models.Entity])
static get_existing_entities(entities)

Return a list with those entities of the supplied iterable that exist in the CaosDB instance.

Parameters

entities (iterable) – The entities to be retrieved. This object will not be moidified.

Raises

TransactionError – If the retrieval fails.

sync_data_model(noquestion: bool = False, verbose: bool = True)

Synchronize this DataModel with a CaosDB instance.

Updates existing entities from the CaosDB instance and inserts non-existing entities into the instance. Note: This allows to easily overwrite changes that were made to an existing data model. Use this function with care and double check its effect.

Raises

TransactionError – If one of the involved transactions fails.

sync_ids_by_name(valid_entities)

Add IDs from valid_entities to the entities in this DataModel.

“By name” means that the valid IDs (from the valid_entities) are assigned to the entities, their properties in this DataModel by their names, also parents are replaced by equally named entities in valid_entities. These changes happen in place to this DataModel!

Parameters

valid_entities (list of Entity) – A list (e.g. a Container) of valid entities.

Returns

Return type

None

caosadvancedtools.models.parser module

This module (and script) provides methods to read a DataModel from a YAML file.

If a file name is passed to parse_model_from_yaml it is parsed and a DataModel is created. The yaml file needs to be structured in a certain way which will be described in the following.

The file should only contain a dictionary. The keys are the names of RecordTypes or Properties. The values are again dictionaries describing the entities. This information can be defined via the keys listed in KEYWORDS. Notably, properties can be given in a dictionary under the xxxx_properties keys and will be added with the respective importance. These properties can be RecordTypes or Properties and can be defined right there. Every Property or RecordType only needs to be defined once anywhere. When it is not defined, simply the name can be supplied with no value. Parents can be provided under the ‘inherit_from_xxxx’ keywords. The value needs to be a list with the names. Here, NO NEW entities can be defined.

exception caosadvancedtools.models.parser.JsonSchemaDefinitionError(msg)

Bases: RuntimeError

class caosadvancedtools.models.parser.JsonSchemaParser

Bases: caosadvancedtools.models.parser.Parser

Extends the yaml parser to read in datamodels defined in a json schema.

EXPERIMENTAL: While this calss can already be used to create data models from basic json schemas, there are the following limitations and missing features:

  • Due to limitations of json-schema itself, we currently do not support inheritance in the imported data models

  • The same goes for suggested properties of RecordTypes

  • Currently, $defs and $ref in the input schema are not resolved.

  • Already defined RecordTypes and (scalar) Properties can’t be re-used as list properties

  • Reference properties that are different from the referenced RT. (Although this is possible for list of references)

  • Values

  • Roles

  • The extern keyword from the yaml parser

  • Currently, a json-schema cannot be transformed into a data model if its root element isn’t a RecordType (or Property) with title and type.

parse_model_from_json_schema(filename: str)

Return a datamodel created from the definition in the json schema in filename.

Parameters

filename (str) – The path to the json-schema file containing the datamodel definition

Returns

out – The created DataModel

Return type

DataModel

class caosadvancedtools.models.parser.Parser

Bases: object

parse_model_from_string(string)

Create and return a data model from the given YAML string.

Parameters

string (str) – The YAML string.

Returns

out – The created DataModel

Return type

DataModel

parse_model_from_yaml(filename)

Create and return a data model from the given file.

Parameters

filename (str) – The path to the YAML file.

Returns

out – The created DataModel

Return type

DataModel

class caosadvancedtools.models.parser.SafeLineLoader(stream)

Bases: yaml.loader.SafeLoader

Load a line and keep meta-information.

Note that this will add a __line__ element to all the dicts.

construct_mapping(node, deep=False)

Overwritung the parent method.

exception caosadvancedtools.models.parser.TwiceDefinedException(name)

Bases: Exception

exception caosadvancedtools.models.parser.YamlDefinitionError(line, template=None)

Bases: RuntimeError

caosadvancedtools.models.parser.parse_model_from_json_schema(filename: str)

Return a datamodel parsed from a json schema definition.

Parameters

filename (str) – The path of the json schema file that is to be parsed

Returns

out – The datamodel generated from the input schema which then can be used for synchronizing with CaosDB.

Return type

Datamodel

Note

This is an experimental feature, see JsonSchemaParser for information about the limitations of the current implementation.

caosadvancedtools.models.parser.parse_model_from_string(string)

Shortcut if the Parser object is not needed.

caosadvancedtools.models.parser.parse_model_from_yaml(filename)

Shortcut if the Parser object is not needed.

Module contents

Submodule for working with data models.