-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathknownUserManagement.py
131 lines (109 loc) · 5.65 KB
/
knownUserManagement.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from datetime import datetime
from chain import EdenData
from database import Database, KnownUser
from dateTimeManagement import DateTimeManagement
from log import Log
from transmissionCustom import REMOVE_AT_SIGN_IF_EXISTS
class KnownUserManagementException(Exception):
pass
class KnownUserDataException(Exception):
pass
LOG = Log(className="KnownUserManagement")
LOGkud= Log(className="KnownUserData")
class KnownUserData:
def __init__(self, database: Database):
assert isinstance(database, Database), "database is not a Database object"
self.database = database
self.knownUsers = None
def removeAtSignAtBeginning(self, telegramID: (str, int)) -> (str, int):
assert isinstance(telegramID, (str, int)), "telegramID is not a string or int"
return REMOVE_AT_SIGN_IF_EXISTS(name=telegramID)
def setKnownUser(self, botName: str, telegramID: (str, int), isKnown: bool) -> bool:
assert isinstance(botName, str), "botName is not a string"
assert isinstance(telegramID, (str, int)), "telegramID is not a string or int"
assert isinstance(isKnown, bool), "isKnown is not a boolean"
try:
telegramID = self.removeAtSignAtBeginning(telegramID=telegramID)
isSetted: bool = self.database.setKnownUser(botName=botName, telegramID=str(telegramID), isKnown=isKnown)
self.getKnownUsersOptimizedSave(botName=botName)
return isSetted
except Exception as e:
LOGkud.exception("Set known user failed with error" + str(e))
return False
def removeKnownUser(self, botName: str, telegramID: (str, int)) -> bool:
assert isinstance(botName, str), "botName is not a string"
assert isinstance(telegramID, (str, int)), "telegramID is not a string or int"
try:
telegramID = self.removeAtSignAtBeginning(telegramID=telegramID)
self.database.setKnownUser(botName=botName, telegramID=telegramID, isKnown=False)
self.getKnownUsersOptimizedSave(botName=botName)
return True
except Exception as e:
LOGkud.exception("Set known user failed with error" + str(e))
return False
def getKnownUser(self, botName: str, telegramID: (str, int)) -> KnownUser:
assert isinstance(botName, str), "botName is not a string"
assert isinstance(telegramID, (str, int)), "telegramID is not a string or int"
try:
telegramID = self.removeAtSignAtBeginning(telegramID=telegramID)
return self.database.getKnownUser(botName=botName, telegramID=telegramID)
except Exception as e:
LOGkud.exception("Get known user failed with error" + str(e))
return None
def getKnownUsers(self, botName: str) -> [KnownUser]:
try:
assert isinstance(botName, str), "botName is not a string"
return self.database.getKnownUsers(botName=botName)
except Exception as e:
LOGkud.exception("Get known users failed with error" + str(e))
return []
def getKnownUsersOptimizedSave(self, botName: str) -> bool:
assert isinstance(botName, str), "botName is not a string"
try:
self.knownUsers = self.database.getKnownUsers(botName=botName)
return True
except Exception as e:
LOGkud.exception("Get known users optimized save failed with error" + str(e))
return False
def getKnownUserFromOptimized(self, botName: str, telegramID: (str, int)) -> KnownUser:
assert isinstance(botName, str), "botName is not a string"
assert isinstance(telegramID, (str, int)), "telegramID is not a string or int"
try:
telegramID = self.removeAtSignAtBeginning(telegramID=telegramID)
if self.knownUsers is None:
LOGkud.error("Known users are not loaded - please call getKnownUsersOptimizedSave first - because"
"of performance reasons")
self.getKnownUsersOptimizedSave(botName=botName)
for knownUser in self.knownUsers:
if knownUser.userID.lower() == telegramID.lower():
return knownUser
return None #return None if not found
except Exception as e:
LOGkud.exception("Get known user from optimized failed with error" + str(e))
return None
def getKnownUsersOptimizedOnlyBoolean(self, botName: str, telegramID: str) -> bool:
assert isinstance(botName, str), "botName is not a string"
try:
telegramID = self.removeAtSignAtBeginning(telegramID=telegramID)
knownUser: KnownUser = self.getKnownUserFromOptimized(botName=botName, telegramID=telegramID)
if knownUser is None:
return False
if isinstance(knownUser, KnownUser):
return knownUser.isKnown
return False
except Exception as e:
LOGkud.exception("Get known users optimized failed with error" + str(e))
return []
class KnownUserManagement:
def __init__(self, database: Database, edenData: EdenData):
assert isinstance(database, Database), "database is not a Database object"
assert isinstance(edenData, EdenData), "edenData is not a EdenData object"
self.dateTimeManagement = DateTimeManagement(edenData=edenData)
self.database = database
def setExecutionTime(self) -> datetime:
# in live mode time of blockchain is also time of server
blockchainTime: datetime = self.dateTimeManagement.getTime()
return blockchainTime
def getUpdatesIfNeeded(self):
# get updates from telegram
kva = 9