Passed
Push — master ( c8d2fb...72a28d )
by Dave
01:11
created

backend.fcmcache.Cache.trygetvaluefromcache()   A

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nop 2
dl 0
loc 9
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
    def set(self, key, value):
47
        '''save value to cache key'''
48
        self.__redis.set(key, value)
49
50
    def delete(self, key):
51
        '''remove key'''
52
        self.__redis.delete(key)
53
54
    def hdel(self, name, key):
55
        '''remove key'''
56
        self.__redis.hdel(name, key)
57
58
    def purge(self):
59
        allkeys = self.__redis.scan_iter()
60
        for key in allkeys:
61
            self.delete(key)
62
            print("deleted key: {}".format(key))
63
64
    def close(self):
65
        '''close the cache'''
66
        self.__redis = None
67
68
    def trygetvaluefromcache(self, key):
69
        '''get value from cache
70
            similar to get but does not raise exception
71
        '''
72
        try:
73
            return self.get(key)
74
        except Exception:
75
            pass
76
        return None
77
78
79
class CacheKeys:
80
    '''all keys stored in cache'''
81
    knownminers = 'knownminers'
82
    knownpools = 'knownpools'
83
    knownsensors = 'knownsensors'
84
    #named pools, a big string. obsolete
85
    pools = 'pools'
86
    miners = 'miners'
87
    camera = 'camera'
88