cape.tnakit.metautils: Tools for module metadata databases

This module provides various utilities for creating databases of metadata. For example, the ModulePropDB class can be used to collect properties for each module in a package.

class cape.tnakit.metautils.ModuleMetadata(mod=None, **kw)

Read metadata from a datakit module

Versions:
  • 2021-08-12 @ddalle: Version 0.1; started

read_json(fjson)

Read a JSON file into the keys of a metadata object

Call:
>>> meta.read_json(fjson)
>>> meta.read_json(f)
Inputs:
meta: ModuleMetadata

Metadata object for one module

fjson: str

Name of JSON file to read

f: file

Already opened file handle

Versions:
  • 2021-08-12 @ddalle: Version 1.0

class cape.tnakit.metautils.ModulePropDB(*a, **kw)

Module properties database

Call:
>>> props = ModulePropDB(fname)
>>> props = ModulePropDB(opts, **kw)
>>> props = ModulePropDB(optlist, **kw)
Inputs:
fname: str

Name of JSON file to read

opts: dict

Dictionary of options to convert to database

optlist: list | tuple

Ordered key/value pair list

kw: dict

Keywords to convert to or merge into database

Outputs:
props: ModulePropDB

Module property database instance

props.settings: dict

Settings popped from ".settings" key from input

Versions:
  • 2019-04-15 @ddalle: First version

compare_module(mod, modopts)

Compare specified properties to those of a particular module

Call:
>>> match = props.compare_module(mod, modopts)
Inputs:
props: ModulePropDB

Module property database instance

mod: str

Name of module to test

modopts: dict

Dictionary of properties to compare to module mod

Outputs:
match: True | False

Whether or not mod matches all values in modopts

Versions:
  • 2019-04-15 @ddalle: First version

compare_module_all(mod, *a, **kw)

Search for specified properties in a particular module

Call:
>>> q, keys = props.compare_module_all(mod, *a, **kw)
>>> q, keys = props.compare_module_all(mod, v1, v2, ...)
>>> q, keys = props.compare_module_all(mod, k1=v1, k2=v2)
Inputs:
props: ModulePropDB

Module property database instance

k1: str

Name of first key to search (_ replaced with -)

k2: str

Name of second key to search

v1: str | any

Test value 1 (for key k1 if specified, else any key)

v2: str | any

Test value 2 (for key k2 if specified)

kw: dict

Keyword arguments of options to match

Outputs:
q: True | False

Whether or not all properties were matched

keys: list`[:class:`str]

Dictionary of modules that match, with keys that match

Versions:
  • 2019-04-16 @ddalle: First version

classmethod from_json(fname)

Create metadata instance from JSON file

Call:
>>> meta = MetaData.from_json(fname)
Inputs:
props: ModulePropDB

Module property database instance

fname: str

Name of JSON file

Versions:
  • 2019-04-07 @ddalle: First versoin

get_ordered_db(mod)

Get an OrderedDict database for one module

Call:
>>> moddb = props.get_ordered_db(mod)
Inputs:
props: ModulePropDB

Module property database interface instance

mod: str

Name of module to sort

Outputs:
moddb: OrderedDict

Properties for module mod

Versions:
  • 2019-04-14 @ddalle: First version

get_ordered_settings()

Get ordered version of metadata settings attribute

Call:
>>> settings = props.get_ordered_settings()
Inputs:
props: ModulePropDB

Module property database instance

Outputs:
settings: OrderedDict

Properly ordered settings

Versions:
  • 2019-09-27 @ddalle: First version

get_property(mod, k, vdef=None)

Return a property from one module, using defaults

Call:
>>> v = props.get_property(mod, k, vdef=None)
Inputs:
props: ModulePropDB

Module property database interface instance

mod: str

Name of module to sort

k: str

Name of property/key to return

vdef: {None} | str | bool

Default value if not present in DB or defaults

Outputs:
v: str | bool | None | dict

Properties for module mod

Versions:
  • 2019-04-17 @ddalle: First version

list_modules()

Get a list of modules in appropriate order

Call:
>>> mods = props.list_modules()
Inputs:
props: ModulePropDB

Module property database interface instance

Outputs:
mods: list (str)

List of modules in database, sorted in appropriate order

Versions:
  • 2019-04-14 @ddalle: First version

merge(opts)

Merge a dictionary, where opts overrides props

Call:
>>> props.merge(opts)
Inputs:
props: ModulePropDB

Module property database instance

opts: dict

Dictionary of metadata to merge

Versions:
  • 2019-04-07 @ddalle: First version

mergedefault(opts)

Merge a dictionary, where props overrides props

Call:
>>> props.mergedefault(opts)
Inputs:
props: ModulePropDB

Module property database instance

opts: dict

Dictionary of metadata to merge

Versions:
  • 2019-04-07 @ddalle: First version

read_json(fname)

Read a JSON metadata file

Call:
>>> props.read_json(fname)
Inputs:
props: ModulePropDB

Module property database instance

fname: str

Name of JSON file

Versions:
  • 2019-04-06 @ddalle: First versoin

search(*a, **kw)

Search module database for values regardless of key

Checks are made using regular expressions (in particular, re.search()) if both the database value and the test value are strings. If no keyword is specified, the value will be searched in each key.

Call:
>>> moddb = props.search(*a, **kw)
>>> moddb = props.search(v1, v2, ..., **kw)
>>> moddb = props.search(k1=v1, k2=v2)
Inputs:
props: ModulePropDB

Module property database instance

k1: str

Name of first key to search (_ replaced with -)

k2: str

Name of second key to search

v1: str | any

Test value 1 (for key k1 if specified, else any key)

v2: str | any

Test value 2 (for key k2 if specified)

kw: dict

Keyword arguments of options to match

Outputs:
moddb: dict`[:class:`list`[:class:`str]]

Dictionary of modules that match, with keys that match

Versions:
  • 2019-04-16 @ddalle: First version

search_db(*a, **kw)

Search module database for modules that match criteria

Call:
>>> mods = props.search_db(**kw)
>>> mods = props.search_db(opts, **kw)
Inputs:
props: ModulePropDB

Module property database instance

opts: dict

Dictionary of options to match

kw: dict

Keyword arguments of options to match

Outputs:
mods: list`[:class:`str]

List of module names

Versions:
  • 2019-04-16 @ddalle: First version

write_json(fname, **kw)

Write metadata to JSON file

Call:
>>> props.write_json(fname)
Inputs:
props: ModulePropDB

Module property database instance

fname: str

Name of JSON file

indent: {4} | int > 0

Spaces in indentation level

Versions:
  • 2019-04-06 @ddalle: First versoin

cape.tnakit.metautils.merge_dict(opts1, opts2)

Merge two dictionaries, using value from opts1 in conflict

Call:
>>> merge_dict(opts1, opts2)
Inputs:
opts1: dict

First dictionary

opts2: dict

Second dictionary

Versions:
  • 2019-04-07 @ddalle: First version

cape.tnakit.metautils.merge_dict_default(opts1, opts2)

Merge two dictionaries, using value from opts2 in conflict

Call:
>>> merge_dict_default(opts1, opts2)
Inputs:
opts1: dict

First dictionary

opts2: dict

Second dictionary

Versions:
  • 2019-04-07 @ddalle: First version