bidsschematools.types.namespace¶
Namespace types
The purpose of the Namespace
type is to make a directory of
YAML files available as a single dictionary and allow attribute (.
)
lookups.
Classes
- class bidsschematools.types.namespace.MappingEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)¶
Bases:
JSONEncoder
- default(o)¶
Implement this method in a subclass such that it returns a serializable object for
o
, or calls the base implementation (to raise aTypeError
).For example, to support arbitrary iterators, you could implement default like this:
def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return super().default(o)
- encode(o)¶
Return a JSON string representation of a Python data structure.
>>> from json.encoder import JSONEncoder >>> JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}'
- iterencode(o, _one_shot=False)¶
Encode the given object and yield each string representation as available.
For example:
for chunk in JSONEncoder().iterencode(bigobject): mysocket.write(chunk)
- class bidsschematools.types.namespace.Namespace(*args, **kwargs)¶
Bases:
MutableMapping
Provides recursive attribute style access to a dict-like structure
Examples
>>> ns = Namespace.build({"a": 1, "b.c": "val"}) >>> ns.a 1 >>> ns["a"] 1 >>> ns.b <Namespace {'c': 'val'}> >>> ns["b"] <Namespace {'c': 'val'}> >>> ns.b.c 'val' >>> ns["b.c"] 'val' >>> ns["b"]["c"] 'val' >>> ns.b["c"] 'val' >>> ns["b"].c 'val'
.keys()
,.values()
and.items()
can take an optionallevel
argument:>>> list(ns.keys()) ['a', 'b'] >>> list(ns.keys(level=2)) ['b.c'] >>> 'b.c' in ns.keys() False >>> 'b.c' in ns.keys(level=2) True
>>> list(ns.values()) [1, <Namespace {'c': 'val'}>] >>> list(ns.values(level=2)) ['val'] >>> 'val' in ns.values() False >>> 'val' in ns.values(level=2) True
>>> list(ns.items()) [('a', 1), ('b', <Namespace {'c': 'val'}>)] >>> list(ns.items(level=2)) [('b.c', 'val')] >>> ("b.c", "val") in ns.items() False >>> ("b.c", "val") in ns.items(level=2) True
>>> ns["d.e.f"] = "val2" >>> ns.d.e <Namespace {'f': 'val2'}> >>> ns.d.e.f 'val2' >>> del ns['d']
- classmethod build(mapping)¶
Expand mapping recursively and return as namespace
- clear() None. Remove all items from D. ¶
- get(k[, d]) D[k] if k in D, else d. d defaults to None. ¶
- items() a set-like object providing a view on D's items ¶
- keys() a set-like object providing a view on D's keys ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair ¶
as a 2-tuple; but raise KeyError if D is empty.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D ¶
- update([E, ]**F) None. Update D from mapping/iterable E and F. ¶
If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values ¶
- class bidsschematools.types.namespace.NsItemsView(namespace, level)¶
Bases:
ItemsView
- isdisjoint(other)¶
Return True if two sets have a null intersection.
- class bidsschematools.types.namespace.NsKeysView(namespace, level)¶
Bases:
KeysView
- isdisjoint(other)¶
Return True if two sets have a null intersection.
- class bidsschematools.types.namespace.NsValuesView(namespace, level)¶
Bases:
ValuesView
Functions
- bidsschematools.types.namespace.expand(element)¶
Expand a dict, recursively, to replace dots in keys with recursive dictionaries
- Parameters:
element (dict) – The dictionary to expand
- Returns:
The expanded dictionary
- Return type:
Examples
>>> expand({"a": 1, "b.c": 2, "d": [{"e": 3, "f.g": 4}]}) {'a': 1, 'b': {'c': 2}, 'd': [{'e': 3, 'f': {'g': 4}}]}