dsss.store.Store#

class dsss.store.Store(hook: Mapping[str, Callable | Iterable[Callable]] | None = None, **kwargs)#

Bases: ABC

Abstract class for key-value storage of SDMX artefacts.

Subclasses must implement delete(), get(), iter_keys(), set(), and update().

abstract __init__(hook: Mapping[str, Callable | Iterable[Callable]] | None = None, **kwargs) None#

Initialize the store instance.

Subclasses must call this parent class method to initialize hooks.

Parameters#

hook :

Hooks for the instance. Mapping from hook_ids to either single callables, or iterables of callables.

Methods

__init__([hook])

Initialize the store instance.

assign_version(obj, **kwargs)

Assign a version to obj subsequent to any existing versions.

delete(key)

Delete an object given its key.

get(key)

Return an object given its key.

invoke_hooks(kind, *args, **kwargs)

Invoke each callable in hook with hook_id kind.

iter_keys()

Iterate over stored keys.

key()

Construct a key for obj.

list([klass, maintainer, id, version])

List matching keys.

list_versions(klass, maintainer, id)

Return all versions of a MaintainableArtefact.

resolve(obj[, attr])

Resolve an external reference in a named attr of obj.

set(obj)

Store obj and return its key.

update(obj)

Update obj and return its key.

update_from()

Update the Store from another obj.

Attributes

hook_ids

IDs of hooks.

hook

Mapping from hook_ids to lists of hooks.

assign_version(obj, **kwargs) None#

Assign a version to obj subsequent to any existing versions.

See also#

sdmx.model.version.increment

abstract delete(key: str) bool#

Delete an object given its key.

Raises#

KeyError

If the object does not exist.

abstract get(key: str) AnnotableArtefact#

Return an object given its key.

Raises#

KeyError

If the object does not exist.

hook: MutableMapping[str, List[Callable]]#

Mapping from hook_ids to lists of hooks. Hooks are per-instance.

hook_ids: Tuple[str, ...] = ('before set',)#

IDs of hooks. Subclasses may extend this tuple.

invoke_hooks(kind: str, *args, **kwargs) None#

Invoke each callable in hook with hook_id kind.

abstract iter_keys() Iterable[str]#

Iterate over stored keys.

The keys are not ordered.

key(obj) str#
key(obj: DataType)
key(obj: DataType)
key(obj: MaintainableArtefact)

Construct a key for obj.

Supported obj classes include:

MaintainableArtefact.

Example: "urn:sdmx:org.sdmx.infomodel.codelist.Codelist=FOO:CL(1.0)"

The key is the full IdentifiableArtefact.urn.

BaseDataSet, BaseMetadataSet

Example: "data-FOO:DSD_ID-adaa503c71ac9574"

The key consists of:

  • "data-" or "metadata-", based on the class of obj;

  • the IdentifiableArtefact.id of the maintainer of either (a) the Dataflow that describes obj or if not defined (b) of the DataStructure that structures obj;

  • the ID of the (Meta)Dataflow or (b) (Meta)DataStructure itself; and

  • a hash of the Observation keys.

list(klass: type | None = None, maintainer: str | None = None, id: str | None = None, version: str | None = None) List[str]#

List matching keys.

Only keys that match the given parameters (if any) are returned.

Parameters#

klassAnnotableArtefact

Class of artefact.

maintainer :

ID of the maintainer of an artefact or its (meta)dataflow.

id :

ID of an artefact or its (meta)dataflow.

version :

Version of an artefact.

list_versions(klass: type, maintainer: str, id: str) Tuple[str, ...]#

Return all versions of a MaintainableArtefact.

The klass, maintainer, and id arguments are the same as for list().

resolve(obj, attr: str | None = None) MaintainableArtefact#

Resolve an external reference in a named attr of obj.

abstract set(obj) str#

Store obj and return its key.

If obj exists, KeyError is raised.

abstract update(obj) str#

Update obj and return its key.

update_from(obj: Store, **kwargs) None#
update_from(p: Path, *, ignore: Iterable[Callable[[Path], bool]] | None = None)
update_from(msg: DataMessage)
update_from(msg: StructureMessage)

Update the Store from another obj.

Parameters#

obj :

Any of:

  • pathlib.Path of an .xml file or directory —the given file, or all .xml files in the directory and any subdirectories, are read and their contents added.

  • another Store instance —all contents of the other store are added.

  • a DataMessage —all BaseDataSet in the message are read and stored.

  • a StructureMessage —all SDMX structures in the message are read and stored.

Other Parameters#

ignoreoptional

if obj is a path, ignore is an optional iterable of callables. Each of the callables in ignore is applied to every file path to be read; if the any of them returns True, the file is skipped.

Raises#

NotImplementedError

for any obj other than the above.