Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/attr/converters.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 """ | |
2 Commonly useful converters. | |
3 """ | |
4 | |
5 from __future__ import absolute_import, division, print_function | |
6 | |
7 from ._make import NOTHING, Factory, pipe | |
8 | |
9 | |
10 __all__ = [ | |
11 "pipe", | |
12 "optional", | |
13 "default_if_none", | |
14 ] | |
15 | |
16 | |
17 def optional(converter): | |
18 """ | |
19 A converter that allows an attribute to be optional. An optional attribute | |
20 is one which can be set to ``None``. | |
21 | |
22 :param callable converter: the converter that is used for non-``None`` | |
23 values. | |
24 | |
25 .. versionadded:: 17.1.0 | |
26 """ | |
27 | |
28 def optional_converter(val): | |
29 if val is None: | |
30 return None | |
31 return converter(val) | |
32 | |
33 return optional_converter | |
34 | |
35 | |
36 def default_if_none(default=NOTHING, factory=None): | |
37 """ | |
38 A converter that allows to replace ``None`` values by *default* or the | |
39 result of *factory*. | |
40 | |
41 :param default: Value to be used if ``None`` is passed. Passing an instance | |
42 of `attr.Factory` is supported, however the ``takes_self`` option | |
43 is *not*. | |
44 :param callable factory: A callable that takes not parameters whose result | |
45 is used if ``None`` is passed. | |
46 | |
47 :raises TypeError: If **neither** *default* or *factory* is passed. | |
48 :raises TypeError: If **both** *default* and *factory* are passed. | |
49 :raises ValueError: If an instance of `attr.Factory` is passed with | |
50 ``takes_self=True``. | |
51 | |
52 .. versionadded:: 18.2.0 | |
53 """ | |
54 if default is NOTHING and factory is None: | |
55 raise TypeError("Must pass either `default` or `factory`.") | |
56 | |
57 if default is not NOTHING and factory is not None: | |
58 raise TypeError( | |
59 "Must pass either `default` or `factory` but not both." | |
60 ) | |
61 | |
62 if factory is not None: | |
63 default = Factory(factory) | |
64 | |
65 if isinstance(default, Factory): | |
66 if default.takes_self: | |
67 raise ValueError( | |
68 "`takes_self` is not supported by default_if_none." | |
69 ) | |
70 | |
71 def default_if_none_converter(val): | |
72 if val is not None: | |
73 return val | |
74 | |
75 return default.factory() | |
76 | |
77 else: | |
78 | |
79 def default_if_none_converter(val): | |
80 if val is not None: | |
81 return val | |
82 | |
83 return default | |
84 | |
85 return default_if_none_converter |