import base64 import json from api.models.cmdb import InnerKV from api.extensions import rd class InnerKVManger(object): def __init__(self): self.cache = rd.r pass @classmethod def add(cls, key, value): data = {"key": key, "value": value} res = InnerKV.create(**data) if res.key == key: return "success", True return "add failed", False @classmethod def get(cls, key): res = InnerKV.get_by(first=True, to_dict=False, key=key) if not res: return None return res.value @classmethod def update(cls, key, value): res = InnerKV.get_by(first=True, to_dict=False, key=key) if not res: return cls.add(key, value) t = res.update(value=value) if t.key == key: return "success", True return "update failed", True @classmethod def get_shares(cls, key): new_value = list() v = rd.get_str(key) if not v: return new_value try: value = json.loads(v.decode("utf-8")) for v in value: new_value.append((v[0], base64.b64decode(v[1]))) except Exception as e: return [] return new_value @classmethod def set_shares(cls, key, value): new_value = list() for v in value: new_value.append((v[0], base64.b64encode(v[1]).decode("utf-8"))) rd.set_str(key, json.dumps(new_value))