pyiron_base.storage.filedata.OwnNotebookNode#

class pyiron_base.storage.filedata.OwnNotebookNode(*args, **kw)[source]#

Bases: NotebookNode

Wrapper for nbformat.NotebookNode with some additional representation based on nbconvert.

__init__(*args, **kw)#

Initialize with a dictionary, another Struct, or data.

Parameters:
  • *args (dict, Struct) – Initialize with one dict or Struct

  • **kw (dict) – Initialize with key, value pairs.

Examples

>>> s = Struct(a=10,b=30)
>>> s.a
10
>>> s.b
30
>>> s2 = Struct(s,c=30)
>>> sorted(s2.keys())
['a', 'b', 'c']

Methods

__init__(*args, **kw)

Initialize with a dictionary, another Struct, or data.

allow_new_attr([allow])

Set whether new attributes can be created in this Struct.

clear()

copy()

Return a copy as a Struct.

dict()

Get the dict representation of the struct.

fromkeys([value])

Create a new dictionary with keys from iterable and values set to value.

get(key[, default])

Return the value for key if key is in the dictionary, else default.

hasattr(key)

hasattr function available as a method.

items()

keys()

merge([__loc_data__, _Struct__conflict_solve])

Merge two Structs with customizable conflict resolution.

pop(k[,d])

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()

Remove and return a (key, value) pair as a 2-tuple.

setdefault(key[, default])

Insert key with a value of default if key is not in the dictionary.

update(*args, **kwargs)

A dict-like update method based on CPython's MutableMapping update method.

values()

allow_new_attr(allow=True)#

Set whether new attributes can be created in this Struct.

This can be used to catch typos by verifying that the attribute user tries to change already exists in this Struct.

clear() None.  Remove all items from D.#
copy()#

Return a copy as a Struct.

Examples

>>> s = Struct(a=10,b=30)
>>> s2 = s.copy()
>>> type(s2) is Struct
True
dict()#

Get the dict representation of the struct.

fromkeys(value=None, /)#

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)#

Return the value for key if key is in the dictionary, else default.

hasattr(key)#

hasattr function available as a method.

Implemented like has_key.

Examples

>>> s = Struct(a=10)
>>> s.hasattr('a')
True
>>> s.hasattr('b')
False
>>> s.hasattr('get')
False
items() a set-like object providing a view on D's items#
keys() a set-like object providing a view on D's keys#
merge(__loc_data__=None, _Struct__conflict_solve=None, **kw)#

Merge two Structs with customizable conflict resolution.

This is similar to update(), but much more flexible. First, a dict is made from data+key=value pairs. When merging this dict with the Struct S, the optional dictionary ‘conflict’ is used to decide what to do.

If conflict is not given, the default behavior is to preserve any keys with their current value (the opposite of the update() method’s behavior).

Parameters:
  • __loc_data__ (dict, Struct) – The data to merge into self

  • __conflict_solve (dict) – The conflict policy dict. The keys are binary functions used to resolve the conflict and the values are lists of strings naming the keys the conflict resolution function applies to. Instead of a list of strings a space separated string can be used, like ‘a b c’.

  • **kw (dict) – Additional key, value pairs to merge in

Notes

The __conflict_solve dict is a dictionary of binary functions which will be used to solve key conflicts. Here is an example:

__conflict_solve = dict(
    func1=['a','b','c'],
    func2=['d','e']
)

In this case, the function func1() will be used to resolve keys ‘a’, ‘b’ and ‘c’ and the function func2() will be used for keys ‘d’ and ‘e’. This could also be written as:

__conflict_solve = dict(func1='a b c',func2='d e')

These functions will be called for each key they apply to with the form:

func1(self['a'], other['a'])

The return value is used as the final merged value.

As a convenience, merge() provides five (the most commonly needed) pre-defined policies: preserve, update, add, add_flip and add_s. The easiest explanation is their implementation:

preserve = lambda old,new: old
update   = lambda old,new: new
add      = lambda old,new: old + new
add_flip = lambda old,new: new + old  # note change of order!
add_s    = lambda old,new: old + ' ' + new  # only for str!

You can use those four words (as strings) as keys instead of defining them as functions, and the merge method will substitute the appropriate functions for you.

For more complicated conflict resolution policies, you still need to construct your own functions.

Examples

This show the default policy:

>>> s = Struct(a=10,b=30)
>>> s2 = Struct(a=20,c=40)
>>> s.merge(s2)
>>> sorted(s.items())
[('a', 10), ('b', 30), ('c', 40)]

Now, show how to specify a conflict dict:

>>> s = Struct(a=10,b=30)
>>> s2 = Struct(a=20,b=40)
>>> conflict = {'update':'a','add':'b'}
>>> s.merge(s2,conflict)
>>> sorted(s.items())
[('a', 20), ('b', 70)]
pop(k[, d]) v, remove specified key and return the corresponding value.#

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()#

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

setdefault(key, default=None, /)#

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update(*args, **kwargs)#

A dict-like update method based on CPython’s MutableMapping update method.

values() an object providing a view on D's values#