import re import os import sys from Param import * class BadParamError(Exception): pass class Params(object): def __init__(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) def __iter__(self): for key, value in vars(self).iteritems(): yield key, value def _error_log(self, s, error=None, fatal=False): message = "ERROR - BAD PARAM" if fatal: message += "- [FATAL] -" sys.stderr.write("{}:{} - {}\n".format(message, self._classname, s)) if error: sys.stderr.write("PARAM ERROR: {}\n".format(str(error))) def err_warn(self, s, error=None): self._error_log(s, error=error); raise BadParamError("%s - %s" % (self._classname, s)) def __getattr__(self, key): try: return self.__getattribute__(key); except AttributeError: return None def definitions_import(self, def_dict, classkwargs, classname=""): value = None for key in def_dict.keys(): try: value = None if key in classkwargs: value = classkwargs[key] elif 'default' in def_dict[key]: value = def_dict[key]['default'] if def_dict[key]['type'] == "bool": instance = ParamBool(value, classname=classname) elif def_dict[key]['type'] == "color": instance = ParamColor(value, classname=classname) elif def_dict[key]['type'] == "enum": instance = ParamEnum(value, enum_values=def_dict[key]['enum_values'], classname=classname) elif def_dict[key]['type'] == "float": instance = ParamFloat(value, classname=classname) elif def_dict[key]['type'] == "img_url": instance = ParamImg_url(value, key=key, classname=classname) elif def_dict[key]['type'] == "int": instance = ParamInt(value, classname=classname) elif def_dict[key]['type'] == "json": instance = ParamJson(value, classname=classname) elif def_dict[key]['type'] == "raw": instance = ParamRaw(value, classname=classname) elif def_dict[key]['type'] == "string": instance = ParamString(value, classname=classname) self.__setattr__(key, instance) except Exception as e: self.err_warn("key: %s value: %s" % (key, str(def_dict[key])), error=str(e))