summaryrefslogtreecommitdiffstats
path: root/func
diff options
context:
space:
mode:
authormakkalot <makkalot@gmail.com>2008-05-30 23:56:49 +0300
committermakkalot <makkalot@gmail.com>2008-05-30 23:56:49 +0300
commit4357afa7740a407f035e824cfd3bea61a06cefa7 (patch)
tree4762abf6ca3c0a9ab253c80f8048cfbc9f19e9c1 /func
parent7159496b5ded2459669fb73744bb3d397c06461e (diff)
downloadthird_party-func-4357afa7740a407f035e824cfd3bea61a06cefa7.tar.gz
third_party-func-4357afa7740a407f035e824cfd3bea61a06cefa7.tar.xz
third_party-func-4357afa7740a407f035e824cfd3bea61a06cefa7.zip
add the minion_arg_validator module to code base it is kind fo API what can be assigned and etc
Diffstat (limited to 'func')
-rw-r--r--func/minion/modules/func_arg.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/func/minion/modules/func_arg.py b/func/minion/modules/func_arg.py
index e69de29..ae6db16 100644
--- a/func/minion/modules/func_arg.py
+++ b/func/minion/modules/func_arg.py
@@ -0,0 +1,140 @@
+##
+## Copyright 2007, Red Hat, Inc
+## see AUTHORS
+##
+## This software may be freely redistributed under the terms of the GNU
+## general public license.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+
+class ArgCompatibility(object):
+ """
+ That class is going to test if the module that was created by module
+ writer if he/she obeys to the rules we put before
+ """
+
+ #these are the common options can be used with all types
+ __common_options = ('optional','default','description')
+
+ #basic types has types also
+ __basic_types={
+ 'range':(),
+ 'min':0,
+ 'max':0,
+ 'optional':False,
+ 'description':'',
+ 'options':(),
+ 'min_length':0,
+ 'max_length':0,
+ 'validator':'',
+ 'type':'',
+ 'default':None #its type is unknown
+ }
+
+ def __init__(self,get_args_result):
+ """
+ The constructor initilized by the get_method_args()
+ @param : get_args_result : The dict with all method related info
+ """
+ self.__args_to_check = get_args_result
+
+ #what options does each of the basic_types have :
+ self.__valid_args={
+ 'int':('range','min','max'),
+ 'string':('options','min_length','max_length','validator'),
+ 'boolean':(),
+ 'float':(),
+ 'hash':('validator'),
+ 'iterable':('validator'),
+ }
+
+
+ def _is_type_options_compatible(self,argument_dict):
+ """
+ Checks the argument_dict's options and looks inside
+ self.__valid_args to see if the used option is there
+
+ @param : argument_dict : current argument to check
+ @return : True of raises IncompatibleTypesException
+
+ """
+ #did module writer add a key 'type'
+ if not argument_dict.has_key('type') or not self.__valid_args.has_key(argument_dict['type']):
+ raise IncompatibleTypesException("%s is not in valid options"%argument_dict['type'])
+
+ # we will use it everytime so not make lookups
+ the_type = argument_dict['type']
+ from itertools import chain
+
+ for key,value in argument_dict.iteritems():
+
+ if key == "type":
+ continue
+ if key not in chain(self.__valid_args[the_type],self.__common_options):
+ raise IncompatibleTypesException("There is no option like %s in %s"%(key,the_type))
+
+ return True
+
+
+ def _is_basic_types_compatible(self,type_dict):
+ """
+ Validates that if the types that were submitted with
+ get_method_args were compatible with our format above
+ in __basic_types
+
+ @param : type_dict : The type to examine
+ @return : True or raise IncompatibleTypesException Exception
+ """
+ for key,value in type_dict.iteritems():
+
+ #do we have that type
+ if not self.__basic_types.has_key(key):
+ raise IncompatibleTypesException("%s not in the basic_types"%key)
+
+ #if type matches and dont match default
+ if key!='default' and type(value)!=type(self.__basic_types[key]):
+ raise IncompatibleTypesException("%s should be %s"%(key,self.__basic_types[key]))
+
+ return True
+
+
+ def validate_all(self):
+ """
+ Validates the output for minion module's
+ get_method_args method
+
+ @return : True or raise IncompatibleTypesException Exception
+ """
+
+ for method in self.__args_to_check.iterkeys():
+ for argument in self.__args_to_check[method].itervalues():
+ self._is_basic_types_compatible(argument)
+ self._is_type_options_compatible(argument)
+
+
+###The Exception classes here
+
+
+class IncompatibleTypesException(Exception):
+ """
+ Raised when we assign some values that breaksour rules
+ @see ArgCompatibility class for allowe situations
+ """
+ def __init__(self, value=None):
+ Exception.__init__(self)
+ self.value = value
+ def __str__(self):
+ return "%s" %(self.value,)
+
+class NonExistingMethodRegistered(IncompatibleTypesException):
+ """
+ That Exception is raised when a non existent module is
+ tried to be registerd we shouldnt allow that
+ """
+ pass
+
+
+