Robot Framework Integrated Development Environment (RIDE)
argumentspec.py
Go to the documentation of this file.
1 # Copyright 2008-2015 Nokia Networks
2 # Copyright 2016- Robot Framework Foundation
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 
16 import sys
17 
18 from robotide.lib.robot.utils import setter
19 
20 from .argumentconverter import ArgumentConverter
21 from .argumentmapper import ArgumentMapper
22 from .argumentresolver import ArgumentResolver
23 from .typevalidator import TypeValidator
24 
25 
26 class ArgumentSpec():
27 
28  def __init__(self, name=None, type='Keyword', positional=None,
29  varargs=None, kwonlyargs=None, kwargs=None, defaults=None,
30  types=None, supports_named=True):
31  self.namename = name
32  self.typetype = type
33  self.positionalpositional = positional or []
34  self.varargsvarargs = varargs
35  self.kwonlyargskwonlyargs = kwonlyargs or []
36  self.kwargskwargs = kwargs
37  self.defaultsdefaults = defaults or {}
38  self.typestypestypes = types
39  self.supports_namedsupports_named = supports_named
40 
41  @setter
42  def types(self, types):
43  return TypeValidator(self).validate(types)
44 
45  @property
46  minargs = property
47 
48  def minargs(self):
49  required = [arg for arg in self.positionalpositional if arg not in self.defaultsdefaults]
50  return len(required)
51 
52  @property
53  maxargs = property
54 
55  def maxargs(self):
56  return len(self.positionalpositional) if not self.varargsvarargs else sys.maxsize
57 
58  @property
59  argument_names = property
60 
61  def argument_names(self):
62  return (self.positionalpositional + ([self.varargsvarargs] if self.varargsvarargs else []) +
63  self.kwonlyargskwonlyargs + ([self.kwargskwargs] if self.kwargskwargs else []))
64 
65  def resolve(self, arguments, variables=None, resolve_named=True,
66  resolve_variables_until=None, dict_to_kwargs=False):
67  resolver = ArgumentResolver(self, resolve_named,
68  resolve_variables_until, dict_to_kwargs)
69  positional, named = resolver.resolve(arguments, variables)
70  if self.typestypestypes or self.defaultsdefaults:
71  converter = ArgumentConverter(self, dry_run=not variables)
72  positional, named = converter.convert(positional, named)
73  return positional, named
74 
75  def map(self, positional, named, replace_defaults=True):
76  mapper = ArgumentMapper(self)
77  return mapper.map(positional, named, replace_defaults)
def __init__(self, name=None, type='Keyword', positional=None, varargs=None, kwonlyargs=None, kwargs=None, defaults=None, types=None, supports_named=True)
Definition: argumentspec.py:30
def resolve(self, arguments, variables=None, resolve_named=True, resolve_variables_until=None, dict_to_kwargs=False)
Definition: argumentspec.py:66
def map(self, positional, named, replace_defaults=True)
Definition: argumentspec.py:75