diff options
Diffstat (limited to 'ricky/params/__init__.py')
| -rw-r--r-- | ricky/params/__init__.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/ricky/params/__init__.py b/ricky/params/__init__.py new file mode 100644 index 0000000..5ba90c0 --- /dev/null +++ b/ricky/params/__init__.py @@ -0,0 +1,107 @@ +"""base class for all params""" +import pprint +import simplejson as json +import sys +import os +from ricky.config import PROBABILITIES_DIR, OFFLINE +import ricky.utils as utils + + +class Params(object): + def __init__(self, *args): + self._api = None + self._url = None + self._params = tuple(args) + + def __getitem__(self, name): + """getter for the param by name""" + for param in self._params: + if param.name == name: + return param + raise ValueError("No param with name %s\n" % name) + + def __str__(self): + """string representation""" + return pprint.pformat(self.as_dict()) + + def _load_probabilities_json(self, probabilities_file=None): + if probabilities_file: + filepath = probabilities_file + else: + filepath = os.path.join( + PROBABILITIES_DIR, + "%s.json" % (self.api.__class__.__name__) + ) + try: + f = open(filepath, 'r') + data = f.read() + f.close() + return json.loads(data) + except json.scanner.JSONDecodeError as e: + sys.stderr.write("Invalid Json - Problem decoding %s\n" % filepath) + sys.stderr.write("%s\n" % e) + sys.exit(1) + except IOError: + sys.stderr.write( + "Could not find probabilities file %s\n" % filepath) + sys.exit(1) + + def randomize( + self, + probabilities=None, + probabilities_local=False + ): + """assign random values to all params + if using a probabilities.json file, weight is taken + into account""" + if probabilities: + probabilities_dict = self._load_probabilities_json(probabilities) + elif probabilities_local: + probabilities_dict = self._load_probabilities_json() + else: + probabilities_dict = {} + for param in self._params: + param.randomize(probabilities=probabilities_dict.get(param.name)) + + @property + def api(self): + """property setter for im api""" + return self._api + + @api.setter + def api(self, cls): + """property getter for im api""" + self._api = cls + + def execute(self): + """calls the associated api""" + if OFFLINE: + sys.path.append("./photoblaster") + from photoblaster.modules import Pb as _Pb + from photoblaster.config import LOCAL as PBLOCAL + for pbcls in _Pb.__subclasses__(): + if pbcls.__name__ == self.__class__.__name__: + params_dict = self.as_dict() + instance = pbcls(**params_dict) + instance.create() + if not PBLOCAL: + instance.file_s3move() + return instance.file_dict() + return json.loads( + utils.http_request(self._url, params=self.as_dict()) + ) + + def as_dict(self): + """displays the params names and values in dictionary form + used by the api call + """ + result = {} + for param in self._params: + result[param.name] = param.value + return result + + def from_dict(self, params_dict): + """set param values manually from a dictionary""" + for param in self._params: + if param.name in params_dict.keys(): + param.value = params_dict[param.name] |
