cdsreaper/models.py (37 lines of code) (raw):

import redis import json import time import logging logger = logging.getLogger(__name__) class JobState(object): def __init__(self,uid:str, name:str, status:str, timestamp:float): self.uid = uid self.name = name self.status = status self.float = timestamp if timestamp else time.time() def to_json(self): return json.dumps(self.__dict__) def key(self): return "cds:job:{0}".format(self.uid) def write(self, client:redis.client.Redis): client.set(self.key(), self.to_json()) def delete(self, client:redis.client.Redis): client.delete(self.key()) @staticmethod def read(client:redis.client.Redis, uid:str): """ look up the given job uid in the datastore. Returns the object as JobState or None. :param client: :param uid: :return: """ key = "cds:job:{0}".format(uid) json_data = client.get(key) if json_data is not None: try: parsed_dict = json.loads(json_data) return JobState(parsed_dict["uid"],parsed_dict["name"],parsed_dict["status"], parsed_dict["timestamp"]) except KeyError as e: logger.error("Data for job {0} was invalid, missing key {1}.".format(uid, str(e))) client.delete(key) return None except json.JSONDecodeError as e: logger.error("Data for job {0} was invalid, not a correct json object: {1}".format(uid, str(e))) client.delete(key) return None else: return None