domain.rep   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 45
dl 0
loc 65
rs 10
c 0
b 0
f 0
wmc 14

8 Methods

Rating   Name   Duplication   Size   Complexity  
A PoolRepository.readpools() 0 5 1
A MinerRepository.readminers() 0 7 1
A LoginRepository.readlogins() 0 6 2
A RuleParametersRepository.readrules() 0 4 1
A PoolRepository.add() 0 8 3
A MinerRepository.getminerbyname() 0 7 3
A BaseRepository.readrawfile() 0 4 2
A LoginRepository.getsshlogin() 0 3 1
1
'''Repositories'''
2
import json
3
import domain.mining
4
import domain.miningrules
5
6
class BaseRepository(object):
7
    def readrawfile(self, file_name):
8
        with open(file_name, encoding='utf-8-sig') as config_file:
9
            raw = config_file.read()
10
        return raw
11
12
13
class MinerRepository(BaseRepository):
14
    def readminers(self, file_name):
15
        '''read miners'''
16
        raw = self.readrawfile(file_name)
17
        miners = [domain.mining.Miner(**k) for k in json.loads(raw)]
18
        #TODO: Remove disabled miners
19
        #if miner.name.startswith("#"):
20
        return miners
21
22
    def getminerbyname(self, minername, file_name):
23
        '''get miner by name'''
24
        miners = self.readminers(file_name)
25
        for miner in miners:
26
            if miner.name == minername:
27
                return miner
28
        return None
29
30
class PoolRepository(BaseRepository):
31
    def readpools(self, file_name):
32
        raw = self.readrawfile(file_name)
33
        poollist = [domain.mining.Pool(**k) for k in json.loads(raw)]
34
        #TODO:Remove disabled pools
35
        return poollist
36
37
    def add(self, pool, file_name, sch):
38
        pools = self.readpools(file_name)
39
        if not any(x.name == pool.name for x in pools):
40
            pools.append(pool)
41
42
        jsonpools = [sch.dump(k).data for k in pools]
43
        with open(file_name, 'w') as file:
44
            json.dump(jsonpools, file, sort_keys=True, indent=4, ensure_ascii=False)
45
46
47
class LoginRepository(object):
48
    '''login repository'''
49
    def readlogins(self, file_name):
50
        '''get entity from config'''
51
        with open(file_name, encoding='utf-8-sig') as config_file:
52
            jlogin = json.loads(config_file.read())
53
        login = domain.mining.Login(jlogin['username'], jlogin['password'])
54
        return login
55
56
    def getsshlogin(self, miner):
57
        '''TODO: make login per miner'''
58
        return self.readlogins('config/ftp.conf')
59
60
class RuleParametersRepository(BaseRepository):
61
    def readrules(self, file_name):
62
        raw = self.readrawfile(file_name)
63
        ruleslist = [domain.miningrules.RuleParameters(**k) for k in json.loads(raw)]
64
        return ruleslist
65