bento_meta.model

This module contains Model, a class for managing data models housed in the Bento Metamodel Database. Models are built from bento_meta.Entity subclasses (see bento_meta.objects). A Model can be used with or without a Neo4j database connection.

Classes

Model

Model class for managing data models housed in the Bento Metamodel Database.

Module Contents

class bento_meta.model.Model(handle: str | None = None, version: str | None = None, uri: str | None = None, mdb: bento_meta.mdb.MDB | None = None)[source]

Model class for managing data models housed in the Bento Metamodel Database.

handle = None
version = None
uri = None
repository = None
_mdb: bento_meta.mdb.MDB | None = None
nodes: dict[str, bento_meta.objects.Node]
edges: dict[tuple[str, str, str], bento_meta.objects.Edge]
props: dict[tuple[str, str], bento_meta.objects.Property]
terms: dict[tuple[str, str, str | None, str | None], bento_meta.objects.Term]
removed_entities: list[bento_meta.entity.Entity] = []
property drv: neo4j.Driver | None

Neo4j database driver from MDB object.

property mdb: bento_meta.mdb.MDB | None

MDB object containing the db connection.

add_node(node: bento_meta.objects.Node | dict | neo4j.graph.Node | None = None) bento_meta.objects.Node[source]

Add a Node to the model.

The model attribute of node is set to Model.handle.

Parameters:

node – A Node instance, a neo4j.graph.Node, or a dict.

Returns:

The added Node instance.

add_edge(edge: bento_meta.objects.Edge | dict | neo4j.graph.Node | None = None) bento_meta.objects.Edge[source]

Add an Edge to the model.

The model attribute of edge is set to Model.handle.

Parameters:

edge – An Edge instance, a neo4j.graph.Node, or a dict.

Returns:

The added Edge instance.

add_prop(ent: bento_meta.objects.Node | bento_meta.objects.Edge, prop: bento_meta.objects.Property | dict | neo4j.graph.Node | None = None, *, reuse: bool = False) bento_meta.objects.Property[source]

Add a Property to the model.

The model attribute of prop is set to Model.handle. Within a model, Property entities are unique with respect to their handle (but can be reused). This method will look for an existing property within the model with the given handle, and add an item to Model.props pointing to it if found.

Parameters:
  • ent – Attach prop to this entity (Node or Edge).

  • prop – A Property instance, a neo4j.graph.Node, or a dict.

  • reuse – If True, reuse existing property with same handle.

Returns:

The added Property instance.

annotate(ent: bento_meta.entity.Entity, term: bento_meta.objects.Term) None[source]

Associate a single Term with an Entity.

This creates a Concept entity if needed and links both the Entity and the Term to the concept, in keeping with the MDB spec. It supports the Term key in MDF.

Parameters:
  • ent – Entity object to annotate.

  • term – Term object to describe the Entity.

add_terms(prop: bento_meta.objects.Property, *terms: list[bento_meta.objects.Term | str]) None[source]

Add a list of Term and/or strings to a Property.

Property must have a value domain of value_set or enum. Term instances are created for strings; Term.value and Term.handle is set to the string.

Parameters:
  • prop – Property to modify.

  • terms – A list of Term instances and/or str.

rm_node(node: bento_meta.objects.Node) bento_meta.objects.Node | None[source]

Remove a Node from the Model instance.

Note: A node can’t be removed if it is participating in an edge (i.e., if the node is some edge’s src or dst attribute).

Parameters:

node – Node to be removed.

Returns:

The removed Node, or None if not found.

rm_edge(edge: bento_meta.objects.Edge) bento_meta.objects.Edge | None[source]

Remove an Edge instance from the Model instance.

Parameters:

edge – Edge to be removed.

Returns:

The removed Edge, or None if not found.

rm_prop(prop: bento_meta.objects.Property) bento_meta.objects.Property | None[source]

Remove a Property instance from the Model instance.

Parameters:

prop – Property to be removed.

Returns:

The removed Property, or None if not found.

rm_term(term: bento_meta.objects.Term) None[source]

Not implemented.

assign_edge_end(edge: bento_meta.objects.Edge | None = None, end: str | None = None, node: bento_meta.objects.Node | None = None) bento_meta.objects.Edge | None[source]

Move the src or dst of an Edge to a different Node.

Note: Both node and edge must be present in the Model instance (via add_node and add_edge).

Parameters:
  • edge – Edge to manipulate.

  • end – Edge end to change (src|dst).

  • node – Node to be connected.

Returns:

The modified Edge, or None if operation failed.

contains(ent: bento_meta.entity.Entity) bool | None[source]

Ask whether an entity is present in the Model instance.

Note: Only works on Nodes, Edges, and Properties.

Parameters:

ent – Entity in question.

Returns:

True if entity is in model, False otherwise, None if entity type not supported.

edges_in(node: bento_meta.objects.Node) list[bento_meta.objects.Edge][source]

Get all Edge that have a given Node as their dst attribute.

Parameters:

node – The node.

Returns:

List of Edge instances.

edges_out(node: bento_meta.objects.Node) list[bento_meta.objects.Edge][source]

Get all Edge that have a given Node as their src attribute.

Parameters:

node – The node.

Returns:

List of Edge instances.

edges_by(key: str, item: bento_meta.objects.Node | str) list[bento_meta.objects.Edge][source]

Get all Edge that have a given Node as their src or dst or Edge handle as their type attribute.

Parameters:
  • key – The attribute to search on.

  • item – The node or edge handle to search for.

Returns:

List of Edge instances.

edges_by_src(node: bento_meta.objects.Node) list[bento_meta.objects.Edge][source]

Get all Edge that have a given Node as their src attribute.

Parameters:

node – The node.

Returns:

List of Edge instances.

edges_by_dst(node: bento_meta.objects.Node) list[bento_meta.objects.Edge][source]

Get all Edge that have a given Node as their dst attribute.

Parameters:

node – The node.

Returns:

List of Edge instances.

edges_by_type(edge_handle: str) list[bento_meta.objects.Edge][source]

Get all Edge that have a given edge type (i.e., handle).

Parameters:

edge_handle – The edge type.

Returns:

List of Edge instances.

dget(*, refresh: bool = False) Model | None[source]

Pull model from MDB into this Model instance, based on its handle.

Note: is a noop if Model.mdb is unset.

Parameters:

refresh – If True, clear cache before retrieving.

Returns:

The Model instance, or None if mdb is not set.

dput() None[source]

Push this Model’s objects to MDB.

Note: is a noop if Model.mdb is unset.