Constructs Signature from the given list of Parameter objects and 'return_annotation'. All arguments are optional.
(self, parameters=None, *, return_annotation=_empty,
__validate_parameters__=True)
| 2977 | empty = _empty |
| 2978 | |
| 2979 | def __init__(self, parameters=None, *, return_annotation=_empty, |
| 2980 | __validate_parameters__=True): |
| 2981 | """Constructs Signature from the given list of Parameter |
| 2982 | objects and 'return_annotation'. All arguments are optional. |
| 2983 | """ |
| 2984 | |
| 2985 | if parameters is None: |
| 2986 | params = OrderedDict() |
| 2987 | else: |
| 2988 | if __validate_parameters__: |
| 2989 | params = OrderedDict() |
| 2990 | top_kind = _POSITIONAL_ONLY |
| 2991 | seen_default = False |
| 2992 | seen_var_parameters = set() |
| 2993 | |
| 2994 | for param in parameters: |
| 2995 | kind = param.kind |
| 2996 | name = param.name |
| 2997 | |
| 2998 | if kind in (_VAR_POSITIONAL, _VAR_KEYWORD): |
| 2999 | if kind in seen_var_parameters: |
| 3000 | msg = f'more than one {kind.description} parameter' |
| 3001 | raise ValueError(msg) |
| 3002 | |
| 3003 | seen_var_parameters.add(kind) |
| 3004 | |
| 3005 | if kind < top_kind: |
| 3006 | msg = ( |
| 3007 | 'wrong parameter order: {} parameter before {} ' |
| 3008 | 'parameter' |
| 3009 | ) |
| 3010 | msg = msg.format(top_kind.description, |
| 3011 | kind.description) |
| 3012 | raise ValueError(msg) |
| 3013 | elif kind > top_kind: |
| 3014 | top_kind = kind |
| 3015 | |
| 3016 | if kind in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD): |
| 3017 | if param.default is _empty: |
| 3018 | if seen_default: |
| 3019 | # No default for this parameter, but the |
| 3020 | # previous parameter of had a default |
| 3021 | msg = 'non-default argument follows default ' \ |
| 3022 | 'argument' |
| 3023 | raise ValueError(msg) |
| 3024 | else: |
| 3025 | # There is a default for this parameter. |
| 3026 | seen_default = True |
| 3027 | |
| 3028 | if name in params: |
| 3029 | msg = 'duplicate parameter name: {!r}'.format(name) |
| 3030 | raise ValueError(msg) |
| 3031 | |
| 3032 | params[name] = param |
| 3033 | else: |
| 3034 | params = OrderedDict((param.name, param) for param in parameters) |
| 3035 | |
| 3036 | self._parameters = types.MappingProxyType(params) |
nothing calls this directly
no test coverage detected