Passed
Push — master ( 520b75...157197 )
by Dave
01:18
created

backend.fcmcache.Cache.tryputcache()   A

Complexity

Conditions 4

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 7
nop 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
import redis
2
3
class Cache:
4
    ''' in memory cache'''
5
    __redis = None
6
    isonline = False
7
    def __init__(self, servicelogin):
8
        self.encoding = 'utf-8'
9
        self.__redis = redis.Redis(host=servicelogin.host, port=servicelogin.port, password=servicelogin.password)
10
        self.isonline = True
11
    def iskeyexists(self, key):
12
        '''true when key exists in cache'''
13
        return self.__redis.exists(key)
14
    def get(self, key):
15
        '''get value from key'''
16
        try:
17
            return self.__redis.get(key)
18
        except redis.exceptions.ConnectionError as ex:
19
            self.isonline = False
20
            raise ex
21
    def getlist(self, key):
22
        '''get a list from key'''
23
        return self.__redis.lrange(key, 0, -1)
24
25
    def put(self, key, value):
26
        '''store a value into key'''
27
        self.__redis.set(key, value)
28
29
    def putinhashset(self, name, key, value):
30
        '''store value into key at name'''
31
        if not isinstance(value, str):
32
            raise ValueError('hashset value must be a string')
33
        self.__redis.hset(name, key, value)
34
35
    def getfromhashset(self, name, key):
36
        '''get value in hashset'''
37
        return self.__redis.hget(name, key)
38
39
    def gethashset(self, name):
40
        '''this will return keys and values from hashset'''
41
        output = {}
42
        hashitems = self.__redis.hgetall(name)
43
        for key, value in hashitems.items():
44
            output[key.decode(self.encoding)] = value.decode(self.encoding)
45
        return output
46
47
    def set(self, key, value):
48
        '''save value to cache key'''
49
        self.__redis.set(key, value)
50
51
    def delete(self, key):
52
        '''remove key'''
53
        self.__redis.delete(key)
54
55
    def hdel(self, name, key):
56
        '''remove key'''
57
        self.__redis.hdel(name, key)
58
59
    def purge(self):
60
        allkeys = self.__redis.scan_iter()
61
        for key in allkeys:
62
            self.delete(key)
63
            print("deleted key: {}".format(key))
64
65
    def close(self):
66
        '''close the cache'''
67
        self.__redis = None
68
69
    def tryputcache(self, key, value):
70
        '''put value in cache key'''
71
        if value is None: return
72
        try:
73
            if self.__redis is not None:
74
                self.put(key, value)
75
        except redis.exceptions.ConnectionError as ex:
76
            self.logexception(ex)
77
78
    def trygetvaluefromcache(self, key):
79
        '''get value from cache
80
            similar to get but does not raise exception
81
        '''
82
        try:
83
            return self.get(key)
84
        except Exception:
85
            pass
86
        return None
87
88
89
class CacheKeys:
90
    '''all keys stored in cache'''
91
    knownminers = 'knownminers'
92
    knownpools = 'knownpools'
93
    knownsensors = 'knownsensors'
94
    #named pools, a big string. obsolete
95
    pools = 'pools'
96
    miners = 'miners'
97
    camera = 'camera'
98