Package ganeti :: Module ht
[hide private]
[frames] | no frames]

Source Code for Module ganeti.ht

  1  # 
  2  # 
  3   
  4  # Copyright (C) 2010 Google Inc. 
  5  # 
  6  # This program is free software; you can redistribute it and/or modify 
  7  # it under the terms of the GNU General Public License as published by 
  8  # the Free Software Foundation; either version 2 of the License, or 
  9  # (at your option) any later version. 
 10  # 
 11  # This program is distributed in the hope that it will be useful, but 
 12  # WITHOUT ANY WARRANTY; without even the implied warranty of 
 13  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 14  # General Public License for more details. 
 15  # 
 16  # You should have received a copy of the GNU General Public License 
 17  # along with this program; if not, write to the Free Software 
 18  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
 19  # 02110-1301, USA. 
 20   
 21   
 22  """Module implementing the parameter types code.""" 
 23   
 24  from ganeti import compat 
 25   
 26  # Modifiable default values; need to define these here before the 
 27  # actual LUs 
 28   
29 -def EmptyList():
30 """Returns an empty list. 31 32 """ 33 return []
34 35
36 -def EmptyDict():
37 """Returns an empty dict. 38 39 """ 40 return {}
41 42 43 #: The without-default default value 44 NoDefault = object() 45 46 47 #: The no-type (value to complex to check it in the type system) 48 NoType = object() 49 50 51 # Some basic types
52 -def TNotNone(val):
53 """Checks if the given value is not None. 54 55 """ 56 return val is not None
57 58
59 -def TNone(val):
60 """Checks if the given value is None. 61 62 """ 63 return val is None
64 65
66 -def TBool(val):
67 """Checks if the given value is a boolean. 68 69 """ 70 return isinstance(val, bool)
71 72
73 -def TInt(val):
74 """Checks if the given value is an integer. 75 76 """ 77 return isinstance(val, int)
78 79
80 -def TFloat(val):
81 """Checks if the given value is a float. 82 83 """ 84 return isinstance(val, float)
85 86
87 -def TString(val):
88 """Checks if the given value is a string. 89 90 """ 91 return isinstance(val, basestring)
92 93
94 -def TTrue(val):
95 """Checks if a given value evaluates to a boolean True value. 96 97 """ 98 return bool(val)
99 100
101 -def TElemOf(target_list):
102 """Builds a function that checks if a given value is a member of a list. 103 104 """ 105 return lambda val: val in target_list
106 107 108 # Container types
109 -def TList(val):
110 """Checks if the given value is a list. 111 112 """ 113 return isinstance(val, list)
114 115
116 -def TDict(val):
117 """Checks if the given value is a dictionary. 118 119 """ 120 return isinstance(val, dict)
121 122
123 -def TIsLength(size):
124 """Check is the given container is of the given size. 125 126 """ 127 return lambda container: len(container) == size
128 129 130 # Combinator types
131 -def TAnd(*args):
132 """Combine multiple functions using an AND operation. 133 134 """ 135 def fn(val): 136 return compat.all(t(val) for t in args)
137 return fn 138 139
140 -def TOr(*args):
141 """Combine multiple functions using an AND operation. 142 143 """ 144 def fn(val): 145 return compat.any(t(val) for t in args)
146 return fn 147 148
149 -def TMap(fn, test):
150 """Checks that a modified version of the argument passes the given test. 151 152 """ 153 return lambda val: test(fn(val))
154 155 156 # Type aliases 157 158 #: a non-empty string 159 TNonEmptyString = TAnd(TString, TTrue) 160 161 162 #: a maybe non-empty string 163 TMaybeString = TOr(TNonEmptyString, TNone) 164 165 166 #: a maybe boolean (bool or none) 167 TMaybeBool = TOr(TBool, TNone) 168 169 170 #: a positive integer 171 TPositiveInt = TAnd(TInt, lambda v: v >= 0) 172 173 #: a strictly positive integer 174 TStrictPositiveInt = TAnd(TInt, lambda v: v > 0) 175 176
177 -def TListOf(my_type):
178 """Checks if a given value is a list with all elements of the same type. 179 180 """ 181 return TAnd(TList, 182 lambda lst: compat.all(my_type(v) for v in lst))
183 184
185 -def TDictOf(key_type, val_type):
186 """Checks a dict type for the type of its key/values. 187 188 """ 189 return TAnd(TDict, 190 lambda my_dict: (compat.all(key_type(v) for v in my_dict.keys()) 191 and compat.all(val_type(v) 192 for v in my_dict.values())))
193