示例#1
0
 def __init__(self, key=None, crypt_dir=None):
     self.redis = redis.Redis(host="localhost", port="6379", db=0)
     if key.find(__key_namespace__) == 0:
         self.key = key
     else:
         self.key = "{}:{}".format(__key_namespace__, key)
     self.crypter = Crypter(crypt_dir)
     self._fetch()
示例#2
0
class Entry(object):
    key = None
    value = None

    def __init__(self, key=None, crypt_dir=None):
        self.redis = redis.Redis(host="localhost", port="6379", db=0)
        if key.find(__key_namespace__) == 0:
            self.key = key
        else:
            self.key = "{}:{}".format(__key_namespace__, key)
        self.crypter = Crypter(crypt_dir)
        self._fetch()

    def _fetch(self):
        val = self.redis.get(self.key)
        if val is not None:
            self.value = self.crypter.decrypt(val)

    def _save(self):
        print("Saving to `{}'".format(self.key))
        return self.redis.set(self.key, self.crypter.encrypt(self.value))

    @staticmethod
    def keys():
        r = redis.Redis(host="localhost", port="6379", db=0)
        return [key.replace("{}:".format(__key_namespace__), "") for key in r.keys("{}:*".format(__key_namespace__))]

    @staticmethod
    def list_keys():
        keys = Entry.keys()
        if len(keys) == 0:
            print("No keys found", file=sys.stderr)
            return 1
        else:
            print("\n".join(keys))
        return 0

    def edit(self):
        temp = tempfile.NamedTemporaryFile(suffix=".json", delete=False)

        with temp.file as f:
            val = self.value if self.value is not None else {}
            f.write(json.dumps(val, indent=2, separators=(",", ": ")))

        try:
            subprocess.call([os.environ["EDITOR"], temp.name])
        except subprocess.CalledProcessError as e:
            print("Unable to open your EDITOR: ", e, file=sys.stderr)
            return 1

        with open(temp.name, "r") as f:
            try:
                self.value = json.loads(f.read())
            except ValueError as e:
                print("Unable to parse JSON from file: ", e, file=sys.stderr)
                return 1

        self._save()
        return 0

    def delete(self):
        return self.redis.delete(self.key)

    def view(self):
        if self.value is None:
            print("Key not found", file=sys.stderr)
            return 1
        else:
            print(self.value)
            return 0