-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstaplusconfigdialog.py
More file actions
115 lines (94 loc) · 4.35 KB
/
staplusconfigdialog.py
File metadata and controls
115 lines (94 loc) · 4.35 KB
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
import sys, logging, time, os, requests
from PyQt5.QtWidgets import QDialog, QMessageBox
from PyQt5 import uic
from PyQt5.QtCore import QEvent
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from authorizedialog import AuthorizeDialog
from staplusconfig import STAplusConfig
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logger = logging.getLogger()
class STAplusConfigDialog(QDialog):
token_data = {}
staplusConfig = {}
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.setModal(True)
self.ui = uic.loadUi(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stapusconfigdialog.ui"), self)
self.ui.configButton.clicked.connect(self.startAuthorization)
self.ui.buttonBox.rejected.connect(self.close)
self.ui.buttonBox.accepted.connect(self.hide)
self.ui.progress_bar.setStyleSheet("QProgressBar::chunk {background-color: green;}")
self.staplusConfig = STAplusConfig()
self.staplusConfig.signalProgress.connect(self.updateProgress)
self.authorizeDialog = AuthorizeDialog(self)
self.authorizeDialog.authorize.signalAuthApproval.connect(self.authorizationApproved)
self.ui.license.installEventFilter(self)
def eventFilter(self,target,event):
if target == self.ui.license and event.type() == QEvent.MouseButtonPress:
logger.debug("Button press")
self.fillComboBox()
return False
def fillComboBox(self):
licenses = self.getLicenses()
logger.debug(f"licenses: {licenses}")
model = QStandardItemModel()
for l in licenses:
logger.debug(f"id: {l['@iot.id']}")
logger.debug(f"name: {l['name']}")
it = QStandardItem()
it.setData(l['@iot.id'])
it.setText(l['name'])
model.appendRow(it)
self.ui.license.setModel(model)
def getLicenses(self):
logger.debug("getLicenses()")
try:
staplus_url = self.ui.staplus_url.text()
url = staplus_url + 'Licenses' if staplus_url.endswith('/') else staplus_url + '/Licenses'
res = requests.get(url, timeout=2) # 2 seconds
return res.json().get("value")
except requests.Timeout:
logger.error("Error timeout")
except requests.RequestException:
logger.error("Error request exception")
except requests.ConnectionError:
logger.error("Error connction")
except requests.HTTPError:
logger.error("Error HTTP")
def setDevice(self, device):
logger.debug(f"setDevice(): {device}")
self.staplusConfig.setDevice(device)
def startAuthorization(self):
if self.ui.license.currentText() is None or self.ui.license.currentText() == '':
qm = QMessageBox()
ret = qm.warning(self,'', "Please select a license!", QMessageBox.Ok)
return
if self.token_data == {} or self.token_data['access_token_expires'] < (int(time.time()) + 300): #5min expiration remaining at least
self.authorizeDialog.show()
else:
self.authorizationApproved(self.token_data)
def authorizationApproved(self, token_data):
logger.debug(f"configFinished(): {token_data}")
self.authorizeDialog.hide()
self.token_data = token_data
ix = self.ui.license.currentIndex()
item = self.ui.license.model().item(ix,0)
logger.debug(f"text: {item.text()}")
logger.debug(f"data: {item.data()}")
license_id = item.data()
logger.debug(f"license: {license_id}")
app_metadata = {
'place_name': self.ui.place_name.text(),
'place_description': self.ui.place_description.text(),
'longitude': float(self.ui.longitude.text()),
'latitude': float(self.ui.latitude.text()),
'license': license_id,
'staplus_url': self.ui.staplus_url.text()
}
logger.debug(f"preferred_username: {self.ui.preferred_username.text()}")
logger.debug(f"token_data: {token_data}")
logger.debug(f"app_metadata: {app_metadata}")
self.staplusConfig.run(self.ui.preferred_username.text(), token_data, app_metadata)
def updateProgress(self, x):
logger.debug(f"updateProgress(): {x}")
self.ui.progress_bar.setValue(x)