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
- meta:
- 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
- fname:
- Outputs:
- props:
ModulePropDB
Module property database instance
- props.settings:
dict
Settings popped from
".settings"
key from input
- props:
- 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
- props:
- Outputs:
- match:
True
|False
Whether or not mod matches all values in modopts
- match:
- 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
- props:
- Outputs:
- q:
True
|False
Whether or not all properties were matched
- keys:
list`[:class:`str
] Dictionary of modules that match, with keys that match
- q:
- 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
- props:
- 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
- props:
- Outputs:
- moddb:
OrderedDict
Properties for module mod
- moddb:
- 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
- props:
- Outputs:
- settings:
OrderedDict
Properly ordered settings
- 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
- props:
- Outputs:
- v:
str
|bool
|None
|dict
Properties for module mod
- v:
- 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
- props:
- Outputs:
- mods:
list
(str
) List of modules in database, sorted in appropriate order
- mods:
- 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
- props:
- 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
- props:
- 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
- props:
- 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
- props:
- Outputs:
- moddb:
dict`[:class:`list`[:class:`str
]] Dictionary of modules that match, with keys that match
- moddb:
- 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
- props:
- Outputs:
- mods:
list`[:class:`str
] List of module names
- mods:
- 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
- props:
- 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
- opts1:
- 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
- opts1:
- Versions:
2019-04-07
@ddalle
: First version