itkdb-gtk 0.10.7__py3-none-any.whl → 0.10.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of itkdb-gtk might be problematic. Click here for more details.
- itkdb_gtk/CreateShipments.py +24 -19
- itkdb_gtk/GetShipments.py +53 -26
- itkdb_gtk/GlueWeight.py +2 -2
- itkdb_gtk/ITkDBlogin.py +2 -2
- itkdb_gtk/ITkDButils.py +133 -17
- itkdb_gtk/PanelVisualInspection.py +409 -54
- itkdb_gtk/PetalReceptionTests.py +35 -25
- itkdb_gtk/SensorUtils.py +16 -14
- itkdb_gtk/ShowAttachments.py +3 -1
- itkdb_gtk/UploadModuleIV.py +8 -8
- itkdb_gtk/UploadMultipleTests.py +54 -51
- itkdb_gtk/UploadPetalInformation.py +8 -9
- itkdb_gtk/UploadTest.py +7 -7
- itkdb_gtk/WireBondGui.py +79 -29
- itkdb_gtk/__init__.py +6 -1
- itkdb_gtk/dashBoard.py +36 -13
- itkdb_gtk/dbGtkUtils.py +60 -22
- {itkdb_gtk-0.10.7.dist-info → itkdb_gtk-0.10.9.dist-info}/METADATA +1 -1
- itkdb_gtk-0.10.9.dist-info/RECORD +29 -0
- {itkdb_gtk-0.10.7.dist-info → itkdb_gtk-0.10.9.dist-info}/WHEEL +1 -1
- {itkdb_gtk-0.10.7.dist-info → itkdb_gtk-0.10.9.dist-info}/entry_points.txt +1 -0
- itkdb_gtk-0.10.7.dist-info/RECORD +0 -29
- {itkdb_gtk-0.10.7.dist-info → itkdb_gtk-0.10.9.dist-info}/top_level.txt +0 -0
itkdb_gtk/PetalReceptionTests.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""Test dashboard."""
|
|
3
|
-
import json
|
|
4
3
|
import sys
|
|
4
|
+
import copy
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
try:
|
|
7
8
|
import itkdb_gtk
|
|
8
|
-
|
|
9
|
+
|
|
9
10
|
except ImportError:
|
|
10
|
-
from pathlib import Path
|
|
11
11
|
cwd = Path(__file__).parent.parent
|
|
12
12
|
sys.path.append(cwd.as_posix())
|
|
13
|
+
import itkdb_gtk
|
|
13
14
|
|
|
14
15
|
from itkdb_gtk import dbGtkUtils, ITkDBlogin, ITkDButils
|
|
15
16
|
|
|
@@ -37,12 +38,12 @@ def find_children(W):
|
|
|
37
38
|
class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
38
39
|
"""Petl Reception Test GUI."""
|
|
39
40
|
|
|
40
|
-
def __init__(self, session,
|
|
41
|
+
def __init__(self, session, help_link=None):
|
|
41
42
|
"""Initialization."""
|
|
42
43
|
super().__init__(title="ITkDB Dashboard",
|
|
43
44
|
session=session,
|
|
44
45
|
show_search="Find object with given SN.",
|
|
45
|
-
|
|
46
|
+
help_link=help_link)
|
|
46
47
|
|
|
47
48
|
# Members
|
|
48
49
|
self.dbObject = None
|
|
@@ -66,7 +67,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
66
67
|
|
|
67
68
|
self.SN = itkdb_gtk.dbGtkUtils.TextEntry()
|
|
68
69
|
self.SN.connect("text-changed", self.on_SN_changed)
|
|
69
|
-
|
|
70
|
+
|
|
70
71
|
#self.SN = Gtk.Entry()
|
|
71
72
|
#self.SN.connect("focus-in-event", self.on_sn_enter)
|
|
72
73
|
#self.SN.connect("focus-out-event", self.on_sn_leave)
|
|
@@ -107,6 +108,8 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
107
108
|
self.create_test_box("Visual Inspection", "VISUAL_INSPECTION")
|
|
108
109
|
self.create_test_box("Grounding", "GROUNDING_CHECK")
|
|
109
110
|
self.create_test_box("Pipe bending", "BENDING120")
|
|
111
|
+
self.create_test_box("X-rays", "XRAYIMAGING")
|
|
112
|
+
|
|
110
113
|
|
|
111
114
|
# The text view
|
|
112
115
|
self.mainBox.pack_end(self.message_panel.frame, True, True, 5)
|
|
@@ -117,7 +120,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
117
120
|
"""New SN given. Ask in PDB,"""
|
|
118
121
|
if len(value) <= 0:
|
|
119
122
|
return None
|
|
120
|
-
|
|
123
|
+
|
|
121
124
|
self.query_db()
|
|
122
125
|
current_location = self.dbObject["currentLocation"]["code"]
|
|
123
126
|
dbGtkUtils.set_combo_iter(self.inst_cmb, current_location, 0)
|
|
@@ -134,7 +137,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
134
137
|
for i in range(npages):
|
|
135
138
|
page = self.notebook.get_nth_page(i)
|
|
136
139
|
page.dict_dialog.factory_reset()
|
|
137
|
-
|
|
140
|
+
|
|
138
141
|
|
|
139
142
|
def create_test_box(self, label, test_name, institute="IFIC"):
|
|
140
143
|
"""Create and add to notebook a test dialog.
|
|
@@ -213,6 +216,27 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
213
216
|
page.dict_dialog.values["institution"] = self.institute
|
|
214
217
|
page.dict_dialog.refresh()
|
|
215
218
|
|
|
219
|
+
def upload_this_test(self, values):
|
|
220
|
+
"""Upload a single test."""
|
|
221
|
+
# print(json.dumps(values, indent=2))
|
|
222
|
+
|
|
223
|
+
attachments = []
|
|
224
|
+
if values["testType"] == "XRAYIMAGING":
|
|
225
|
+
fnam = values["results"]["IMAGELINK"]
|
|
226
|
+
if fnam is not None and len(fnam)>0:
|
|
227
|
+
P = Path(fnam).expanduser().resolve()
|
|
228
|
+
if P.exists():
|
|
229
|
+
A = ITkDButils.Attachment(path=P.as_posix(), title=P.name, desc="X-ray image")
|
|
230
|
+
values["results"]["IMAGELINK"] = P.name
|
|
231
|
+
attachments.append(A)
|
|
232
|
+
|
|
233
|
+
rc = ITkDButils.upload_test(self.session, values, attachments=attachments, check_runNumber=True)
|
|
234
|
+
if rc is not None:
|
|
235
|
+
dbGtkUtils.complain("Could not upload test", rc)
|
|
236
|
+
|
|
237
|
+
else:
|
|
238
|
+
self.write_message("Test uploaded. {} - {}\n".format(values["component"], values["testType"]))
|
|
239
|
+
|
|
216
240
|
def upload_single_test(self, *args):
|
|
217
241
|
"""Upload the current test."""
|
|
218
242
|
SN = self.SN.get_text()
|
|
@@ -225,16 +249,9 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
225
249
|
if dctD is None:
|
|
226
250
|
return
|
|
227
251
|
|
|
228
|
-
values = dctD.values
|
|
252
|
+
values = copy.deepcopy(dctD.values)
|
|
229
253
|
values["component"] = SN
|
|
230
|
-
|
|
231
|
-
rc = ITkDButils.upload_test(self.session, values)
|
|
232
|
-
if rc is not None:
|
|
233
|
-
dbGtkUtils.complain("Could not upload test", rc)
|
|
234
|
-
|
|
235
|
-
else:
|
|
236
|
-
dbGtkUtils.ask_for_confirmation("Test uploaded.",
|
|
237
|
-
"{} - {}".format(values["component"], values["testType"]))
|
|
254
|
+
self.upload_this_test(values)
|
|
238
255
|
|
|
239
256
|
def upload_tests(self, *args):
|
|
240
257
|
"""Upload the current test."""
|
|
@@ -251,14 +268,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
|
|
|
251
268
|
|
|
252
269
|
values = dctD.values
|
|
253
270
|
values["component"] = SN
|
|
254
|
-
|
|
255
|
-
rc = ITkDButils.upload_test(self.session, values)
|
|
256
|
-
if rc is not None:
|
|
257
|
-
dbGtkUtils.complain("Could not upload test", rc)
|
|
258
|
-
|
|
259
|
-
else:
|
|
260
|
-
self.write_message("Test uploaded. {} - {}\n".format(values["component"], values["testType"]))
|
|
261
|
-
|
|
271
|
+
self.upload_this_test(values)
|
|
262
272
|
|
|
263
273
|
def main():
|
|
264
274
|
"""Main entry."""
|
itkdb_gtk/SensorUtils.py
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""A collection of utilities for sensor data."""
|
|
3
|
-
import io
|
|
4
3
|
from pathlib import Path
|
|
5
|
-
import numpy as np
|
|
6
4
|
import warnings
|
|
7
|
-
import
|
|
5
|
+
import numpy as np
|
|
8
6
|
from itkdb_gtk import ITkDButils
|
|
9
7
|
|
|
10
8
|
#
|
|
@@ -210,7 +208,7 @@ def LocateMicroDischarge(
|
|
|
210
208
|
V_BDV_ind = V_BDV_ind[ind]
|
|
211
209
|
if V_avg_BD.shape == (0,):
|
|
212
210
|
return NO_BD_CONST
|
|
213
|
-
|
|
211
|
+
|
|
214
212
|
return NO_BD_CONST
|
|
215
213
|
|
|
216
214
|
|
|
@@ -260,8 +258,12 @@ def sensor_data_to_json(session, mdata, mod_type, logger=None):
|
|
|
260
258
|
passed = True
|
|
261
259
|
|
|
262
260
|
# Find Current @ 500V
|
|
263
|
-
|
|
264
|
-
|
|
261
|
+
try:
|
|
262
|
+
indx = np.where(V == 500)[0]
|
|
263
|
+
i_500 = I[indx][0] / area
|
|
264
|
+
except IndexError:
|
|
265
|
+
i_500 = 999
|
|
266
|
+
|
|
265
267
|
if logger:
|
|
266
268
|
logger.write_message("I @ 500V = {:.2f} nA/cm2\n".format(i_500))
|
|
267
269
|
|
|
@@ -296,7 +298,7 @@ def sensor_data_to_json(session, mdata, mod_type, logger=None):
|
|
|
296
298
|
)
|
|
297
299
|
if logger:
|
|
298
300
|
logger.write_message("...{}. FAILED\n".format(txt))
|
|
299
|
-
|
|
301
|
+
|
|
300
302
|
passed = False
|
|
301
303
|
else:
|
|
302
304
|
if MicroDischargeV == NO_BD_CONST:
|
|
@@ -388,7 +390,7 @@ def save_sensor_data(fnam, mdata, name=None):
|
|
|
388
390
|
Args:
|
|
389
391
|
fnam: file name or file object.
|
|
390
392
|
mdata (dict): data as returned by :function:`read_sensor_file`
|
|
391
|
-
|
|
393
|
+
|
|
392
394
|
"""
|
|
393
395
|
if hasattr(fnam, "write") and callable(fnam.write):
|
|
394
396
|
data_out = fnam
|
|
@@ -396,17 +398,17 @@ def save_sensor_data(fnam, mdata, name=None):
|
|
|
396
398
|
fnam = name
|
|
397
399
|
else:
|
|
398
400
|
fnam = build_file_name(mdata)
|
|
399
|
-
|
|
401
|
+
|
|
400
402
|
else:
|
|
401
403
|
data_out = open(fnam, 'w', encoding="utf-8")
|
|
402
404
|
fnam = Path(fnam).name
|
|
403
|
-
|
|
405
|
+
|
|
404
406
|
is_module = "Module_SN" in mdata
|
|
405
407
|
if is_module:
|
|
406
408
|
SN = mdata["Module_SN"]
|
|
407
409
|
else:
|
|
408
410
|
SN = mdata["Component"]
|
|
409
|
-
|
|
411
|
+
|
|
410
412
|
if is_module:
|
|
411
413
|
items = [
|
|
412
414
|
"Type",
|
|
@@ -446,7 +448,7 @@ def save_sensor_data(fnam, mdata, name=None):
|
|
|
446
448
|
"Humidity",
|
|
447
449
|
"Comments",
|
|
448
450
|
]
|
|
449
|
-
|
|
451
|
+
|
|
450
452
|
data_out.write("{}\n".format(fnam))
|
|
451
453
|
for key in items:
|
|
452
454
|
if key == "Module_SN" or key == "Component":
|
|
@@ -469,7 +471,7 @@ def save_sensor_data(fnam, mdata, name=None):
|
|
|
469
471
|
V = np.abs(mdata["curve"]["V"])
|
|
470
472
|
I = np.abs(mdata["curve"]["I"])
|
|
471
473
|
S = np.abs(mdata["curve"]["S"])
|
|
472
|
-
|
|
474
|
+
|
|
473
475
|
ndata = len(V)
|
|
474
476
|
for i in range(ndata):
|
|
475
477
|
data_out.write("{:10.2f}\t{:10.2f}\t{:10.2f}\n".format(V[i], I[i], S[i]))
|
|
@@ -487,4 +489,4 @@ def build_file_name(mdata):
|
|
|
487
489
|
SN = mdata["Component"]
|
|
488
490
|
fnam = "{}-W{}_IV_{}".format(mdata["Batch"], mdata["Wafer"], mdata["RunNumber"])
|
|
489
491
|
|
|
490
|
-
return fnam
|
|
492
|
+
return fnam
|
itkdb_gtk/ShowAttachments.py
CHANGED
|
@@ -232,7 +232,9 @@ class ShowAttachments(Gtk.Dialog):
|
|
|
232
232
|
rc = dlg.run()
|
|
233
233
|
if rc == Gtk.ResponseType.OK:
|
|
234
234
|
path = Path(dlg.fC.get_filename())
|
|
235
|
-
A = ITkDButils.Attachment(path,
|
|
235
|
+
A = ITkDButils.Attachment(path=path,
|
|
236
|
+
title=dlg.att_title.get_text().strip(),
|
|
237
|
+
desc=dlg.att_desc.get_text().strip())
|
|
236
238
|
self.append_attachment_to_view(A)
|
|
237
239
|
self.attachments.append(A)
|
|
238
240
|
|
itkdb_gtk/UploadModuleIV.py
CHANGED
|
@@ -16,7 +16,6 @@ import json
|
|
|
16
16
|
import tempfile
|
|
17
17
|
import copy
|
|
18
18
|
from pathlib import Path
|
|
19
|
-
import shutil
|
|
20
19
|
|
|
21
20
|
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
|
|
22
21
|
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar
|
|
@@ -56,11 +55,12 @@ def remove_files(W, flist):
|
|
|
56
55
|
class IVwindow(dbGtkUtils.ITkDBWindow):
|
|
57
56
|
"""GUI for IV file handling."""
|
|
58
57
|
|
|
59
|
-
def __init__(self, session, title="IV window", options=None,
|
|
58
|
+
def __init__(self, session, title="IV window", options=None, help_link=None):
|
|
60
59
|
"""Initialization."""
|
|
61
|
-
super().__init__(
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
super().__init__(session=session, title=title,
|
|
61
|
+
show_search=None, gtk_runs=gtk_runs,
|
|
62
|
+
help_link=help_link
|
|
63
|
+
)
|
|
64
64
|
self.mdata = {}
|
|
65
65
|
self.mod_type = {}
|
|
66
66
|
self.mod_SN = {}
|
|
@@ -179,7 +179,7 @@ class IVwindow(dbGtkUtils.ITkDBWindow):
|
|
|
179
179
|
js_out.write(json.dumps(test, indent=3, cls=dbGtkUtils.MyEncoder))
|
|
180
180
|
js_out.close()
|
|
181
181
|
|
|
182
|
-
attachment = ITkDButils.Attachment(data_out.name, "resultsFile", fnam)
|
|
182
|
+
attachment = ITkDButils.Attachment(path=data_out.name, title="resultsFile", desc=fnam)
|
|
183
183
|
uploadW = UploadTest.UploadTest(self.session, js_out.name, attachment)
|
|
184
184
|
uploadW.connect("destroy", remove_files, [data_out.name, js_out.name])
|
|
185
185
|
|
|
@@ -247,7 +247,7 @@ class IVwindow(dbGtkUtils.ITkDBWindow):
|
|
|
247
247
|
rc = fc.run()
|
|
248
248
|
if rc == Gtk.ResponseType.OK:
|
|
249
249
|
SensorUtils.save_sensor_data(fc.get_filename(), mdata)
|
|
250
|
-
|
|
250
|
+
|
|
251
251
|
fc.hide()
|
|
252
252
|
fc.destroy()
|
|
253
253
|
|
|
@@ -256,7 +256,7 @@ class IVwindow(dbGtkUtils.ITkDBWindow):
|
|
|
256
256
|
|
|
257
257
|
if do_both.get_active():
|
|
258
258
|
self.upload_test(self.mdata["single"], self.mod_type["single"])
|
|
259
|
-
|
|
259
|
+
|
|
260
260
|
dlg.destroy()
|
|
261
261
|
|
|
262
262
|
def on_refresh(self, *args):
|
itkdb_gtk/UploadMultipleTests.py
CHANGED
|
@@ -11,7 +11,6 @@ try:
|
|
|
11
11
|
import itkdb_gtk
|
|
12
12
|
|
|
13
13
|
except ImportError:
|
|
14
|
-
from pathlib import Path
|
|
15
14
|
cwd = Path(__file__).parent.parent
|
|
16
15
|
sys.path.append(cwd.as_posix())
|
|
17
16
|
|
|
@@ -103,15 +102,17 @@ def check_data(data):
|
|
|
103
102
|
class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
104
103
|
"""Collects information to upload a test and its attachments."""
|
|
105
104
|
|
|
106
|
-
def __init__(self, session,
|
|
105
|
+
def __init__(self, session, help_link=None):
|
|
107
106
|
"""Initialization.
|
|
108
107
|
|
|
109
108
|
Args:
|
|
110
109
|
session: ITkDB session
|
|
111
110
|
|
|
112
111
|
"""
|
|
113
|
-
super().__init__(session=session, title="Upload Tests", gtk_runs=gtk_runs,
|
|
112
|
+
super().__init__(session=session, title="Upload Tests", gtk_runs=gtk_runs, help_link=help_link)
|
|
114
113
|
self.tests = []
|
|
114
|
+
self.data = None
|
|
115
|
+
self.tree = None
|
|
115
116
|
|
|
116
117
|
self.init_window()
|
|
117
118
|
|
|
@@ -224,12 +225,12 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
224
225
|
# double click shows attachments
|
|
225
226
|
if event.button == 1 and event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
|
|
226
227
|
select = self.tree.get_selection()
|
|
227
|
-
model,
|
|
228
|
-
if not
|
|
228
|
+
model, lv_iter = select.get_selected()
|
|
229
|
+
if not lv_iter:
|
|
229
230
|
return
|
|
230
231
|
|
|
231
|
-
self.on_show_json(None, (model,
|
|
232
|
-
# self.on_show_attachments(None, (model,
|
|
232
|
+
self.on_show_json(None, (model, lv_iter, model[lv_iter]))
|
|
233
|
+
# self.on_show_attachments(None, (model, lv_iter, model[lv_iter]))
|
|
233
234
|
return
|
|
234
235
|
|
|
235
236
|
if event.button != 3:
|
|
@@ -237,44 +238,44 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
237
238
|
|
|
238
239
|
# Create popup menu
|
|
239
240
|
select = self.tree.get_selection()
|
|
240
|
-
model,
|
|
241
|
+
model, lv_iter = select.get_selected()
|
|
241
242
|
values = None
|
|
242
|
-
if
|
|
243
|
-
values = model[
|
|
243
|
+
if lv_iter:
|
|
244
|
+
values = model[lv_iter]
|
|
244
245
|
|
|
245
|
-
if not
|
|
246
|
+
if not lv_iter:
|
|
246
247
|
P = tree.get_path_at_pos(event.x, event.y)
|
|
247
248
|
if P:
|
|
248
249
|
print(P[0].to_string())
|
|
249
|
-
|
|
250
|
-
values = model[
|
|
250
|
+
lv_iter = model.get_iter(P[0])
|
|
251
|
+
values = model[lv_iter]
|
|
251
252
|
|
|
252
253
|
if not values:
|
|
253
254
|
return
|
|
254
255
|
|
|
255
256
|
menu = Gtk.Menu()
|
|
256
257
|
item_show = Gtk.MenuItem(label="Show JSOn")
|
|
257
|
-
item_show.connect("activate", self.on_show_json, (model,
|
|
258
|
+
item_show.connect("activate", self.on_show_json, (model, lv_iter, values))
|
|
258
259
|
menu.append(item_show)
|
|
259
260
|
|
|
260
261
|
item_set_stage = Gtk.MenuItem(label="Set Stage")
|
|
261
|
-
item_set_stage.connect("activate", self.on_set_stage, (model,
|
|
262
|
+
item_set_stage.connect("activate", self.on_set_stage, (model, lv_iter, values))
|
|
262
263
|
menu.append(item_set_stage)
|
|
263
264
|
|
|
264
265
|
item_show_att = Gtk.MenuItem(label="Edit Attachments")
|
|
265
|
-
item_show_att.connect("activate", self.on_show_attachments, (model,
|
|
266
|
+
item_show_att.connect("activate", self.on_show_attachments, (model, lv_iter, values))
|
|
266
267
|
menu.append(item_show_att)
|
|
267
268
|
|
|
268
269
|
item_show_com = Gtk.MenuItem(label="Edit Comments")
|
|
269
|
-
item_show_com.connect("activate", self.on_show_comments, (model,
|
|
270
|
+
item_show_com.connect("activate", self.on_show_comments, (model, lv_iter, values))
|
|
270
271
|
menu.append(item_show_com)
|
|
271
272
|
|
|
272
273
|
item_show_def = Gtk.MenuItem(label="Edit Defects")
|
|
273
|
-
item_show_def.connect("activate", self.on_show_defects, (model,
|
|
274
|
+
item_show_def.connect("activate", self.on_show_defects, (model, lv_iter, values))
|
|
274
275
|
menu.append(item_show_def)
|
|
275
276
|
|
|
276
277
|
item_del = Gtk.MenuItem(label="Delete")
|
|
277
|
-
item_del.connect("activate", self.on_delete_tests, (model,
|
|
278
|
+
item_del.connect("activate", self.on_delete_tests, (model, lv_iter, values))
|
|
278
279
|
menu.append(item_del)
|
|
279
280
|
menu.show_all()
|
|
280
281
|
|
|
@@ -282,17 +283,17 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
282
283
|
|
|
283
284
|
def on_show_json(self, item, data):
|
|
284
285
|
"""Test JSon."""
|
|
285
|
-
model,
|
|
286
|
+
model, lv_iter, val = data
|
|
286
287
|
payload = val[TestList.Json]
|
|
287
288
|
value, dlg = create_json_data_editor(payload)
|
|
288
289
|
rc = dlg.run()
|
|
289
290
|
if rc == Gtk.ResponseType.OK:
|
|
290
291
|
payload = value.values
|
|
291
|
-
model.set_value(
|
|
292
|
-
model.set_value(
|
|
293
|
-
model.set_value(
|
|
294
|
-
model.set_value(
|
|
295
|
-
model.set_value(
|
|
292
|
+
model.set_value(lv_iter, TestList.Json, payload)
|
|
293
|
+
model.set_value(lv_iter, TestList.SN, payload["component"])
|
|
294
|
+
model.set_value(lv_iter, TestList.RunNumber, payload["runNumber"])
|
|
295
|
+
model.set_value(lv_iter, TestList.Date, handle_test_date(payload["date"]))
|
|
296
|
+
model.set_value(lv_iter, TestList.Institute, handle_test_date(payload["institution"]))
|
|
296
297
|
|
|
297
298
|
|
|
298
299
|
dlg.hide()
|
|
@@ -300,48 +301,48 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
300
301
|
|
|
301
302
|
def on_show_attachments(self, item, data):
|
|
302
303
|
"""Show the attachmetns."""
|
|
303
|
-
model,
|
|
304
|
+
model, lv_iter, val = data
|
|
304
305
|
|
|
305
306
|
SA = ShowAttachments("Test Attachments", self.session, val[TestList.Attachments], parent=self)
|
|
306
307
|
response = SA.run()
|
|
307
308
|
if response == Gtk.ResponseType.OK:
|
|
308
|
-
model.set_value(
|
|
309
|
-
model.set_value(
|
|
309
|
+
model.set_value(lv_iter, TestList.Attachments, SA.attachments)
|
|
310
|
+
model.set_value(lv_iter, TestList.Nattch, len(SA.attachments))
|
|
310
311
|
|
|
311
312
|
SA.hide()
|
|
312
313
|
SA.destroy()
|
|
313
314
|
|
|
314
315
|
def on_show_comments(self, item, data):
|
|
315
316
|
"""Show comments"""
|
|
316
|
-
model,
|
|
317
|
+
model, lv_iter, val = data
|
|
317
318
|
SC = ShowComments("Test Comments", val[TestList.Comments], self)
|
|
318
319
|
rc = SC.run()
|
|
319
320
|
if rc == Gtk.ResponseType.OK:
|
|
320
|
-
model.set_value(
|
|
321
|
-
model.set_value(
|
|
321
|
+
model.set_value(lv_iter, TestList.Comments, SC.comments)
|
|
322
|
+
model.set_value(lv_iter, TestList.Ncomm, len(SC.comments))
|
|
322
323
|
|
|
323
324
|
SC.hide()
|
|
324
325
|
SC.destroy()
|
|
325
326
|
|
|
326
327
|
def on_show_defects(self, item, data):
|
|
327
328
|
"""Show comments"""
|
|
328
|
-
model,
|
|
329
|
+
model, lv_iter, val = data
|
|
329
330
|
SD = ShowDefects("Test Defects", val[TestList.Defects], self)
|
|
330
331
|
rc = SD.run()
|
|
331
332
|
if rc == Gtk.ResponseType.OK:
|
|
332
|
-
model.set_value(
|
|
333
|
-
model.set_value(
|
|
333
|
+
model.set_value(lv_iter, TestList.Defects, SD.defects)
|
|
334
|
+
model.set_value(lv_iter, TestList.Ndef, len(SD.defects))
|
|
334
335
|
|
|
335
336
|
SD.hide()
|
|
336
337
|
SD.destroy()
|
|
337
338
|
|
|
338
339
|
def on_delete_tests(self, item, data):
|
|
339
340
|
"""Test edit."""
|
|
340
|
-
model,
|
|
341
|
+
model, lv_iter, val = data
|
|
341
342
|
rc = dbGtkUtils.ask_for_confirmation("Remove this test?",
|
|
342
343
|
"{} - {}".format(val[TestList.SN], val[TestList.TestType]))
|
|
343
344
|
if rc:
|
|
344
|
-
model.remove(
|
|
345
|
+
model.remove(lv_iter)
|
|
345
346
|
|
|
346
347
|
def get_test_institute(self):
|
|
347
348
|
"""Select an institue."""
|
|
@@ -373,7 +374,7 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
373
374
|
|
|
374
375
|
def on_set_stage(self, item, data):
|
|
375
376
|
"""Set the test stage."""
|
|
376
|
-
model,
|
|
377
|
+
model, lv_iter, val = data
|
|
377
378
|
SN = val[TestList.SN]
|
|
378
379
|
combo, currentStage = self.get_component_stages(SN)
|
|
379
380
|
|
|
@@ -392,9 +393,9 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
392
393
|
rc = dlg.run()
|
|
393
394
|
if rc == Gtk.ResponseType.OK:
|
|
394
395
|
new_stage = combo.get_active_text()
|
|
395
|
-
model[
|
|
396
|
-
data = model[
|
|
397
|
-
changed = (new_stage != model[
|
|
396
|
+
model[lv_iter][TestList.Stage] = new_stage
|
|
397
|
+
data = model[lv_iter][TestList.Json]
|
|
398
|
+
changed = (new_stage != model[lv_iter][TestList.currentStage])
|
|
398
399
|
data["isRetroactive"] = changed
|
|
399
400
|
if changed:
|
|
400
401
|
data["stage"] = new_stage
|
|
@@ -402,7 +403,7 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
402
403
|
if "stage" in data:
|
|
403
404
|
del data["stage"]
|
|
404
405
|
|
|
405
|
-
model[
|
|
406
|
+
model[lv_iter][TestList.Json] = data
|
|
406
407
|
|
|
407
408
|
|
|
408
409
|
dlg.hide()
|
|
@@ -437,9 +438,9 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
437
438
|
for ifile in files:
|
|
438
439
|
try:
|
|
439
440
|
has_errors = False
|
|
440
|
-
data = json.loads(open(ifile).read())
|
|
441
|
+
data = json.loads(open(ifile, 'r', encoding="UTF-8").read())
|
|
441
442
|
errors, missing = check_data(data)
|
|
442
|
-
if len(missing):
|
|
443
|
+
if len(missing) > 0:
|
|
443
444
|
self.write_message("{}\n".format(Path(ifile).name))
|
|
444
445
|
self.write_message("Some keys are missing in the JSon file.\n")
|
|
445
446
|
self.write_message("{}\n".format("\n".join(['\t'+line for line in missing])))
|
|
@@ -469,10 +470,12 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
469
470
|
if path.exists():
|
|
470
471
|
path = path.expanduser().resolve()
|
|
471
472
|
else:
|
|
472
|
-
path = folder / path
|
|
473
|
+
path = folder / path.name
|
|
473
474
|
|
|
474
475
|
if path.exists():
|
|
475
|
-
attachments.append(ITkDButils.Attachment(path,
|
|
476
|
+
attachments.append(ITkDButils.Attachment(path=path,
|
|
477
|
+
title=att["title"],
|
|
478
|
+
desc=att["description"]))
|
|
476
479
|
else:
|
|
477
480
|
self.write_message("Ignoring atachment {}".format(data["path"]))
|
|
478
481
|
|
|
@@ -596,15 +599,15 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
596
599
|
def upload_test(self):
|
|
597
600
|
"""Uploads tests and attachments."""
|
|
598
601
|
model = self.tree.get_model()
|
|
599
|
-
|
|
600
|
-
while
|
|
602
|
+
lv_iter = model.get_iter_first()
|
|
603
|
+
while lv_iter:
|
|
601
604
|
past_iter = None
|
|
602
|
-
values = model[
|
|
605
|
+
values = model[lv_iter]
|
|
603
606
|
payload = values[TestList.Json]
|
|
604
607
|
payload["comments"] = values[TestList.Comments]
|
|
605
608
|
payload["defects"] = values[TestList.Defects]
|
|
606
609
|
|
|
607
|
-
rc = ITkDButils.upload_test(self.session, payload, values[TestList.Attachments])
|
|
610
|
+
rc = ITkDButils.upload_test(self.session, payload, values[TestList.Attachments], check_runNumber=True)
|
|
608
611
|
if rc:
|
|
609
612
|
ipos = rc.find("The following details may help:")
|
|
610
613
|
msg = rc[ipos:]
|
|
@@ -613,9 +616,9 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
|
|
|
613
616
|
|
|
614
617
|
else:
|
|
615
618
|
self.write_message("Upload {}-{} successfull\n".format(payload["component"], payload["testType"]))
|
|
616
|
-
past_iter =
|
|
619
|
+
past_iter = lv_iter
|
|
617
620
|
|
|
618
|
-
|
|
621
|
+
lv_iter = model.iter_next(lv_iter)
|
|
619
622
|
if past_iter:
|
|
620
623
|
model.remove(past_iter)
|
|
621
624
|
|
|
@@ -16,7 +16,6 @@ try:
|
|
|
16
16
|
import itkdb_gtk
|
|
17
17
|
|
|
18
18
|
except ImportError:
|
|
19
|
-
from pathlib import Path
|
|
20
19
|
cwd = Path(__file__).parent.parent
|
|
21
20
|
sys.path.append(cwd.as_posix())
|
|
22
21
|
|
|
@@ -124,11 +123,11 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
124
123
|
grid.attach(Gtk.Label(label="Serial No."), 0, 0, 1, 1)
|
|
125
124
|
grid.attach(self.SN, 1, 0, 1, 1)
|
|
126
125
|
grid.attach(self.btn_state, 2, 0, 1, 1)
|
|
127
|
-
|
|
126
|
+
|
|
128
127
|
|
|
129
128
|
grid.attach(Gtk.Label(label="Prod. Sheet"), 0, 1, 1, 1)
|
|
130
129
|
grid.attach(self.btnPSF, 1, 1, 1, 1)
|
|
131
|
-
|
|
130
|
+
|
|
132
131
|
btn = Gtk.Button(label="Reset")
|
|
133
132
|
btn.connect("clicked", self.on_reset)
|
|
134
133
|
grid.attach(btn, 2, 1, 1, 1)
|
|
@@ -209,7 +208,7 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
209
208
|
|
|
210
209
|
btn = Gtk.Button(label="Upload Tests")
|
|
211
210
|
btn.set_tooltip_text("Upload all tests")
|
|
212
|
-
|
|
211
|
+
|
|
213
212
|
btn.connect("clicked", self.on_upload)
|
|
214
213
|
btnBox.add(btn)
|
|
215
214
|
|
|
@@ -361,7 +360,7 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
361
360
|
|
|
362
361
|
# Check if we need to assemble the module
|
|
363
362
|
self.check_assembly(self.DESY_comp)
|
|
364
|
-
|
|
363
|
+
|
|
365
364
|
self.check_components()
|
|
366
365
|
|
|
367
366
|
def on_fat_set(self, *args):
|
|
@@ -394,7 +393,7 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
394
393
|
self.update_scroll_window("delamination", j_del)
|
|
395
394
|
self.update_scroll_window("grounding", j_gnd)
|
|
396
395
|
self.update_scroll_window("metrology", j_mtr)
|
|
397
|
-
|
|
396
|
+
|
|
398
397
|
self.check_tests(True)
|
|
399
398
|
|
|
400
399
|
def read_avs_files(self, widgets):
|
|
@@ -473,7 +472,7 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
473
472
|
def on_check_components(self, *args):
|
|
474
473
|
"""Button clicked."""
|
|
475
474
|
self.check_components()
|
|
476
|
-
|
|
475
|
+
|
|
477
476
|
def check_components(self):
|
|
478
477
|
"""Check that components are in DB."""
|
|
479
478
|
for cmp, cmp_SN in self.DESY_comp.items():
|
|
@@ -558,7 +557,7 @@ class AVSPanel(dbGtkUtils.ITkDBWindow):
|
|
|
558
557
|
if rc is None:
|
|
559
558
|
print("Could not set final stage of {}".format(cSN))
|
|
560
559
|
|
|
561
|
-
if len(error_txt):
|
|
560
|
+
if len(error_txt)>0:
|
|
562
561
|
dbGtkUtils.complain("Assembly of {} could not be completeed:".format(this_petal),
|
|
563
562
|
"\n".join(error_txt))
|
|
564
563
|
|
|
@@ -708,4 +707,4 @@ def main():
|
|
|
708
707
|
sys.exit()
|
|
709
708
|
|
|
710
709
|
if __name__ == "__main__":
|
|
711
|
-
main()
|
|
710
|
+
main()
|