py2store.key_mappers.tuples¶
Tools to map tuple-structured keys. That is, converting from any of the following kinds of keys:
tuples (or list-like)
dicts
formatted/templated strings
dsv (Delimiter-Separated Values)
-
py2store.key_mappers.tuples.
dsv_of_list
(d, sep=',')[source]¶ Converting a list of strings to a dsv (delimiter-separated values) string.
Note that unlike most key mappers, there is no schema imposing size here. If you wish to impose a size validation, do so externally (we suggest using a decorator for that).
- Parameters
d – A list of component strings
sep – The delimiter text used to separate a string into a list of component strings
- Returns
The delimiter-separated values (dsv) string for the input tuple
>>> dsv_of_list(['a', 'brown', 'fox'], sep=' ') 'a brown fox' >>> dsv_of_list(('jumps', 'over'), sep='/') # for filepaths (and see that tuple inputs work too!) 'jumps/over' >>> dsv_of_list(['Sat', 'Jan', '1', '1983'], sep=',') # csv: the usual delimiter-separated values format 'Sat,Jan,1,1983' >>> dsv_of_list(['First', 'Last'], sep=':::') # a longer delimiter 'First:::Last' >>> dsv_of_list(['singleton'], sep='@') # when the list has only one element 'singleton' >>> dsv_of_list([], sep='@') # when the list is empty ''
-
py2store.key_mappers.tuples.
list_of_dsv
(d, sep=',')[source]¶ Converting a dsv (delimiter-separated values) string to the list of it’s components.
- Parameters
d – A (delimiter-separated values) string
sep – The delimiter text used to separate the string into a list of component strings
- Returns
A list of component strings corresponding to the input delimiter-separated values (dsv) string
>>> list_of_dsv('a brown fox', sep=' ') ['a', 'brown', 'fox'] >>> tuple(list_of_dsv('jumps/over', sep='/')) # for filepaths ('jumps', 'over') >>> list_of_dsv('Sat,Jan,1,1983', sep=',') # csv: the usual delimiter-separated values format ['Sat', 'Jan', '1', '1983'] >>> list_of_dsv('First:::Last', sep=':::') # a longer delimiter ['First', 'Last'] >>> list_of_dsv('singleton', sep='@') # when the list has only one element ['singleton'] >>> list_of_dsv('', sep='@') # when the string is empty []
-
py2store.key_mappers.tuples.
mk_obj_of_str
(constructor)[source]¶ Make a function that transforms a string to an object. The factory making inverses of what mk_str_from_obj makes.
- Parameters
constructor – The function (or class) that will be used to make objects from the **kwargs parsed out of the string.
- Returns
A function factory.
-
py2store.key_mappers.tuples.
mk_str_of_obj
(attrs)[source]¶ Make a function that transforms objects to strings, using specific attributes of object.
- Parameters
attrs – Attributes that should be read off of the object to make the parameters of the string
- Returns
A transformation function
>>> from dataclasses import dataclass >>> @dataclass ... class A: ... foo: int ... bar: str >>> a = A(foo=0, bar='rin') >>> a A(foo=0, bar='rin') >>> >>> str_from_obj = mk_str_of_obj(['foo', 'bar']) >>> str_from_obj(a, 'ST{foo}/{bar}/G') 'ST0/rin/G'
-
py2store.key_mappers.tuples.
str_of_tuple
(d, str_format)[source]¶ Convert tuple to str. It’s just str_format.format(*d). Why even write such a function? (1) To have a consistent interface for key conversions (2) We want a KeyValidationError to occur here :param d: tuple if params to str_format :param str_format: Auto fields format string. If you have manual fields, consider auto_field_format_str to convert.
- Returns
parametrized string
>>> str_of_tuple(('hello', 'world'), "Well, {} dear {}!") 'Well, hello dear world!'