itkdb-gtk 0.10.10.dev8__tar.gz → 0.11.0__tar.gz

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.

Files changed (40) hide show
  1. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/PKG-INFO +1 -1
  2. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/CreateShipments.py +4 -2
  3. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/GetShipments.py +43 -23
  4. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/GlueWeight.py +34 -50
  5. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ITkDButils.py +2 -2
  6. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/PanelVisualInspection.py +4 -3
  7. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/PetalReceptionTests.py +6 -4
  8. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/UploadMultipleTests.py +72 -63
  9. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/UploadTest.py +4 -2
  10. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/VisualInspection.py +5 -5
  11. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/WireBondGui.py +32 -1
  12. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/__init__.py +1 -1
  13. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/dashBoard.py +42 -19
  14. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/PKG-INFO +1 -1
  15. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/pyproject.toml +1 -1
  16. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/testBatch.py +42 -3
  17. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/README.md +0 -0
  18. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ITkDB.desktop +0 -0
  19. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ITkDB.svg +0 -0
  20. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ITkDBlogin.py +0 -0
  21. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/SensorUtils.py +0 -0
  22. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ShowAttachments.py +0 -0
  23. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ShowComments.py +0 -0
  24. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/ShowDefects.py +0 -0
  25. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/UploadModuleIV.py +0 -0
  26. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/dbGtkUtils.py +0 -0
  27. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/readGoogleSheet.py +0 -0
  28. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk/untrash_component.py +0 -0
  29. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/SOURCES.txt +0 -0
  30. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/dependency_links.txt +0 -0
  31. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/entry_points.txt +0 -0
  32. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/requires.txt +0 -0
  33. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/itkdb_gtk.egg-info/top_level.txt +0 -0
  34. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/setup.cfg +0 -0
  35. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/testAnimated.py +0 -0
  36. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/testComponent.py +0 -0
  37. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/testRange.py +0 -0
  38. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/testThread.py +0 -0
  39. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/test_attachment.py +0 -0
  40. {itkdb_gtk-0.10.10.dev8 → itkdb_gtk-0.11.0}/test/test_holes.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: itkdb_gtk
3
- Version: 0.10.10.dev8
3
+ Version: 0.11.0
4
4
  Summary: A collection of Gtk based GUI to access ITkDB.
5
5
  Author-email: Carlos Lacasta <carlos.lacasta@cern.ch>
6
6
  Project-URL: Homepage, https://gitlab.cern.ch/atlas-itk/sw/db/itk-pdb-gtk-gui-utils
@@ -41,7 +41,7 @@ class CreateShipments(dbGtkUtils.ITkDBWindow):
41
41
  self.attachment = None
42
42
  global gtk_runs
43
43
  if gtk_runs:
44
- super().__init__(session=session, title="Upload AVS Data",
44
+ super().__init__(session=session, title="Create Shipment",
45
45
  help_link=help_link, gtk_runs=gtk_runs)
46
46
  self.init_window()
47
47
 
@@ -358,6 +358,8 @@ class CreateShipments(dbGtkUtils.ITkDBWindow):
358
358
  def main():
359
359
  """Main entry."""
360
360
  # main entry of the program
361
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch"
362
+
361
363
  dlg = ITkDBlogin.ITkDBlogin()
362
364
  client = dlg.get_client()
363
365
  if client is None:
@@ -366,7 +368,7 @@ def main():
366
368
  sys.exit()
367
369
 
368
370
  client.user_gui = dlg
369
- IS = CreateShipments(client)
371
+ IS = CreateShipments(client, help_link="{}/createShipment.html".format(HELP_LINK))
370
372
  IS.set_accept_focus(True)
371
373
  IS.present()
372
374
  IS.connect("destroy", Gtk.main_quit)
@@ -136,6 +136,12 @@ class ReceiveShipments(dbGtkUtils.ITkDBWindow):
136
136
  btn.connect("clicked", self.receive_items)
137
137
  grid.attach(btn, 2, 3, 1, 1)
138
138
 
139
+ self.check_all = Gtk.ToggleButton(label="Check A_ll", use_underline=True)
140
+ self.check_all.set_active(1)
141
+ self.check_all.set_tooltip_text("If toggled, items will need to be `received`\none by one by unchecking the check box.")
142
+ grid.attach(self.check_all, 3, 3, 1, 1)
143
+
144
+
139
145
  # Add a Separator
140
146
  self.mainBox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.VERTICAL), False, True, 0)
141
147
 
@@ -186,14 +192,14 @@ class ReceiveShipments(dbGtkUtils.ITkDBWindow):
186
192
  try:
187
193
  txt = find_vtrx(self.session, txt)
188
194
  except ValueError as e:
189
- self.write_message("Error: {}".format(e))
195
+ self.write_message("Error: {}\n".format(e))
190
196
  return
191
197
 
192
198
  # search code in the list
193
199
  if self.store:
194
200
  lv_iter = self.store.get_iter_first()
195
201
  while lv_iter:
196
- if (self.store.get_value(lv_iter, 0) == txt):
202
+ if self.store.get_value(lv_iter, 0) == txt:
197
203
  self.write_message("...found\n")
198
204
  self.store[lv_iter][3] = False
199
205
 
@@ -275,7 +281,7 @@ class ReceiveShipments(dbGtkUtils.ITkDBWindow):
275
281
  valid_sender = True
276
282
  if self.institute is not None:
277
283
  valid_sender = s['sender']['code'] == self.institute
278
-
284
+
279
285
  if s["recipient"]["code"] == self.recipient and valid_sender:
280
286
  store = self.get_tree_view_model()
281
287
  cmb_store.append([s['name'], s['id']])
@@ -300,34 +306,46 @@ class ReceiveShipments(dbGtkUtils.ITkDBWindow):
300
306
  else:
301
307
  self.cmb_shipment.set_active(-1)
302
308
  self.cmb_shipment.get_child().set_text("")
303
-
304
-
305
- self.tree.set_model(Gtk.ListStore(str, str, str, bool))
309
+ self.tree.set_model(Gtk.ListStore(str, str, str, bool))
310
+
311
+ def mark_all_as_delivered(self):
312
+ """Mark all items in current shipment as delivered."""
313
+ if self.store is None:
314
+ return
315
+
316
+ lv_iter = self.store.get_iter_first()
317
+ while lv_iter:
318
+ val = self.store[lv_iter][3]
319
+ self.store[lv_iter][3] = not val
320
+ lv_iter = self.store.iter_next(lv_iter)
306
321
 
307
322
  def receive_items(self, *args):
308
323
  """Receive shipment items."""
309
324
  data = {}
310
325
  names = {}
326
+ if not self.store:
327
+ self.write_message("Empty list of items.\n")
328
+ return
311
329
 
312
- # self.store is the model of the tree view
313
- if self.store:
314
- lv_iter = self.store.get_iter_first()
315
- while lv_iter:
316
- shpmnt = self.store.get_value(lv_iter, 2)
317
- if shpmnt not in data:
318
- data[shpmnt] = create_shipment_status(shpmnt)
319
- names[shpmnt] = self.store.get_value(lv_iter, 4)
330
+ if not self.check_all.get_active():
331
+ self.mark_all_as_delivered()
320
332
 
321
- item = {
322
- "code": self.store[lv_iter][5],
323
- "delivered": not self.store[lv_iter][3]
324
- }
325
- data[shpmnt]["shipmentItems"].append(item)
333
+ # self.store is the model of the tree view
334
+ lv_iter = self.store.get_iter_first()
335
+ while lv_iter:
336
+ shpmnt = self.store.get_value(lv_iter, 2)
337
+ if shpmnt not in data:
338
+ data[shpmnt] = create_shipment_status(shpmnt)
339
+ names[shpmnt] = self.store.get_value(lv_iter, 4)
340
+
341
+ item = {
342
+ "code": self.store[lv_iter][5],
343
+ "delivered": not self.store[lv_iter][3]
344
+ }
345
+ data[shpmnt]["shipmentItems"].append(item)
326
346
 
327
- lv_iter = self.store.iter_next(lv_iter)
347
+ lv_iter = self.store.iter_next(lv_iter)
328
348
 
329
- else:
330
- self.write_message("Empty list of items.\n")
331
349
 
332
350
  for oid, S in data.items():
333
351
  # Check that all items are there
@@ -507,6 +525,8 @@ def create_shipment_status(shpmnt):
507
525
 
508
526
  def main():
509
527
  """Main entry."""
528
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/receiveShipments.html"
529
+
510
530
  dlg = ITkDBlogin.ITkDBlogin()
511
531
  client = dlg.get_client()
512
532
  if client is None:
@@ -515,7 +535,7 @@ def main():
515
535
  sys.exit()
516
536
 
517
537
  client.user_gui = dlg
518
- IS = ReceiveShipments(client)
538
+ IS = ReceiveShipments(client, help_link=HELP_LINK)
519
539
  IS.set_accept_focus(True)
520
540
  IS.present()
521
541
  IS.connect("destroy", Gtk.main_quit)
@@ -8,13 +8,14 @@ from pathlib import Path
8
8
 
9
9
  try:
10
10
  import itkdb_gtk
11
-
11
+
12
12
  except ImportError:
13
- from pathlib import Path
14
13
  cwd = Path(__file__).parent.parent
15
14
  sys.path.append(cwd.as_posix())
16
15
 
17
- from itkdb_gtk import dbGtkUtils, ITkDBlogin, ITkDButils
16
+ from itkdb_gtk import dbGtkUtils, ITkDBlogin, ITkDButils, UploadMultipleTests
17
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch"
18
+
18
19
 
19
20
  import gi
20
21
  gi.require_version("Gtk", "3.0")
@@ -83,18 +84,17 @@ def remove_defaul_keys(data, default_value=-9999):
83
84
  return data
84
85
 
85
86
 
86
- class GlueWeight(Gtk.Window):
87
+ class GlueWeight(dbGtkUtils.ITkDBWindow):
87
88
  """Upluead Glue Weight test."""
88
89
 
89
90
  def __init__(self, session, ifile=None, help_link=None):
90
91
  """Initialization.
91
-
92
+
92
93
  Args:
93
94
  session: ITkDB session_
94
95
  ifile (optional): Input file. Defaults to None.
95
96
 
96
97
  """
97
- global gtk_runs
98
98
  self.ifile = ifile
99
99
  self.session = session
100
100
  self.modules = []
@@ -112,34 +112,24 @@ class GlueWeight(Gtk.Window):
112
112
  self.skeleton = ITkDButils.get_test_skeleton(
113
113
  session, "MODULE", "GLUE_WEIGHT", defaults)
114
114
 
115
+ global gtk_runs
115
116
  if gtk_runs:
116
- super().__init__(title="Upload Glue Weight", help_link=help_link)
117
+ super().__init__(session=session,
118
+ title="Upload Glue Weight",
119
+ help_link=help_link)
117
120
  self.init_window()
121
+ else:
122
+ self.pdb_user = ITkDButils.get_db_user(session)
118
123
 
119
124
  def init_window(self):
120
125
  """Initialize window."""
121
126
  #
122
127
  # Prepare HeaderBar
123
- hb = Gtk.HeaderBar()
124
- hb.set_show_close_button(True)
125
- hb.props.title = "DB Upload Module Glue Weight"
126
- self.set_titlebar(hb)
127
-
128
- button = Gtk.Button()
129
- icon = Gio.ThemedIcon(name="document-send-symbolic")
130
- image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON)
131
- button.add(image)
132
- button.set_tooltip_text("Click to upload test shown in notebook.")
133
- button.connect("clicked", self.upload_current_test)
134
- hb.pack_end(button)
135
-
136
- self.userLabel = Gtk.Label()
137
- self.userLabel.set_text(self.session.user.name)
138
- hb.pack_start(self.userLabel)
139
-
140
- # Create main content box
141
- self.mainBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
142
- self.add(self.mainBox)
128
+ self.set_border_width(10)
129
+
130
+ # Prepare HeaderBar
131
+ self.hb.props.title = "Glue height"
132
+
143
133
  # file entry and search button
144
134
  self.file_name = Gtk.FileChooserButton()
145
135
  self.file_name.connect("file-set", self.on_file_set)
@@ -167,6 +157,11 @@ class GlueWeight(Gtk.Window):
167
157
  self.modules = self.parse_file(self.ifile)
168
158
  self.populate_notebook()
169
159
 
160
+
161
+
162
+ # The text view
163
+ self.mainBox.pack_end(self.message_panel.frame, True, True, 5)
164
+
170
165
  # The button box
171
166
  btnBox = Gtk.ButtonBox(orientation=Gtk.Orientation.HORIZONTAL)
172
167
  self.buttons = []
@@ -183,19 +178,10 @@ class GlueWeight(Gtk.Window):
183
178
  self.buttons.append(btn)
184
179
  btnBox.add(btn)
185
180
 
186
- btn = Gtk.Button(label="Quit")
187
- btn.connect("clicked", self.quit)
188
- btnBox.add(btn)
189
-
190
181
  self.mainBox.pack_start(btnBox, False, True, 0)
191
182
 
192
183
  self.show_all()
193
184
 
194
- def quit(self, *args):
195
- """Quits the application."""
196
- self.hide()
197
- self.destroy()
198
-
199
185
  def create_test_window(self, test_json, test_name, label):
200
186
  """Create the dialog for a DB test and add it to the notebook.
201
187
 
@@ -257,7 +243,7 @@ class GlueWeight(Gtk.Window):
257
243
 
258
244
  def read_file(self, path):
259
245
  """Parse file."""
260
- with open(path, "r") as ifile:
246
+ with open(path, "r", encoding="UTF-8") as ifile:
261
247
  self.modules = self.parse_file(ifile)
262
248
 
263
249
  def parse_file(self, ifile, module_sep="MODULE_SN"):
@@ -346,22 +332,20 @@ class GlueWeight(Gtk.Window):
346
332
 
347
333
  def upload_tests(self):
348
334
  """Upload tests to DB."""
349
- if len(self.test_list):
335
+ W = UploadMultipleTests.UploadMultipleTests(
336
+ self.session,
337
+ help_link="{}/uploadMultipleTests.html".format(HELP_LINK)
338
+ )
339
+
340
+ if len(self.test_list)>0:
350
341
  for G in self.test_list:
351
342
  m = G.values
352
- print("### Uploading {} for module {}".format(m["testType"], m["component"]))
353
- resp = ITkDButils.upload_test(self.session, m)
354
-
355
- if resp is not None:
356
- print(resp)
343
+ W.add_test_data_to_view(m)
344
+
357
345
 
358
346
  else:
359
347
  for m in self.modules:
360
- print("### Uploading {} for module {}".format(m["testType"], m["component"]))
361
- resp = ITkDButils.upload_test(self.session, m)
362
-
363
- if resp is not None:
364
- print(resp)
348
+ W.add_test_data_to_view(m)
365
349
 
366
350
 
367
351
  def main():
@@ -386,7 +370,7 @@ def main():
386
370
 
387
371
  else:
388
372
  try:
389
- ifile = open(options.files[0], 'r')
373
+ ifile = open(options.files[0], 'r') if len(options.files)>0 else None
390
374
 
391
375
  except Exception as e:
392
376
  print(e)
@@ -399,7 +383,7 @@ def main():
399
383
  print("Could not connect to DB with provided credentials.")
400
384
  sys.exit()
401
385
 
402
- GW = GlueWeight(session, ifile)
386
+ GW = GlueWeight(session, ifile, help_link=HELP_LINK)
403
387
  if gtk_runs:
404
388
  GW.show_all()
405
389
  GW.set_accept_focus(True)
@@ -298,11 +298,11 @@ def upload_test(client, data, attachments=None, check_runNumber=False):
298
298
 
299
299
  if data["runNumber"] in runN:
300
300
  # if the given runNumber is there, try to create a new one.
301
- print("runNumber {} already in {} of {}".format(data["runNumber"], data["testType"], data["component"]))
301
+ #print("runNumber {} already in {} of {}".format(data["runNumber"], data["testType"], data["component"]))
302
302
  try:
303
303
  irun = int(data["runNumber"])
304
304
  for i in range(irun+1, 100):
305
- newRn = "{}".format(i+1)
305
+ newRn = "{}".format(i)
306
306
  if newRn not in runN:
307
307
  data["runNumber"] = newRn
308
308
  break
@@ -21,7 +21,6 @@ import gi
21
21
  gi.require_version("Gtk", "3.0")
22
22
  from gi.repository import Gtk, Gdk, Gio, GObject
23
23
 
24
- HELP_LINK="https://itkdb-gtk.docs.cern.ch/panelVisualInspection.html"
25
24
 
26
25
  class TestJson(GObject.Object):
27
26
  """To store test JSOn."""
@@ -41,7 +40,7 @@ class PanelVisualInspection(dbGtkUtils.ITkDBWindow):
41
40
  SN, ORDER, PASSED, N_FILES, F_LIST, TEST_J, ALL = range(7)
42
41
  F_DEFECT, F_NAME, F_PATH = range(3)
43
42
 
44
- def __init__(self, session, title="PanelVisualInspection", help_link=HELP_LINK):
43
+ def __init__(self, session, title="PanelVisualInspection", help_link=None):
45
44
  super().__init__(title=title,
46
45
  session=session,
47
46
  show_search="Find object with given SN.",
@@ -564,6 +563,8 @@ class PanelVisualInspection(dbGtkUtils.ITkDBWindow):
564
563
  def main():
565
564
  """Main entry."""
566
565
  # DB login
566
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/panelVisualInspection.html"
567
+
567
568
  dlg = ITkDBlogin.ITkDBlogin()
568
569
  client = dlg.get_client()
569
570
  if client is None:
@@ -573,7 +574,7 @@ def main():
573
574
 
574
575
  client.user_gui = dlg
575
576
 
576
- gTest = PanelVisualInspection(client)
577
+ gTest = PanelVisualInspection(client, help_link=HELP_LINK)
577
578
 
578
579
  gTest.present()
579
580
  gTest.connect("destroy", Gtk.main_quit)
@@ -154,7 +154,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
154
154
  """
155
155
  if institute is None:
156
156
  institute = self.institute
157
-
157
+
158
158
  defaults = {
159
159
  "institution": institute,
160
160
  "runNumber": "1",
@@ -187,7 +187,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
187
187
  self.dbObject = ITkDButils.get_DB_component(self.session, SN)
188
188
 
189
189
  except Exception as E:
190
- self.write_message(str(E))
190
+ self.write_message(str(E)+'\n')
191
191
  dbGtkUtils.complain("Could not find object in DB", str(E))
192
192
  self.dbObject = None
193
193
  return
@@ -198,7 +198,7 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
198
198
  """Add a new defect."""
199
199
  page = self.notebook.get_nth_page(self.notebook.get_current_page())
200
200
  values = dbGtkUtils.get_a_list_of_values("Insert new defect", ("Type", "Description/v"))
201
- if len(values):
201
+ if len(values)>0:
202
202
  defect = {"name": values[0], "description": values[1]}
203
203
  page.dict_dialog.values["defects"].append(defect)
204
204
  page.dict_dialog.refresh()
@@ -280,6 +280,8 @@ class PetalReceptionTests(dbGtkUtils.ITkDBWindow):
280
280
  def main():
281
281
  """Main entry."""
282
282
  # DB login
283
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/petalReceptionTests.html"
284
+
283
285
  dlg = ITkDBlogin.ITkDBlogin()
284
286
  client = dlg.get_client()
285
287
  if client is None:
@@ -289,7 +291,7 @@ def main():
289
291
 
290
292
  client.user_gui = dlg
291
293
 
292
- gTest = PetalReceptionTests(client)
294
+ gTest = PetalReceptionTests(client, help_link=HELP_LINK)
293
295
 
294
296
  gTest.present()
295
297
  gTest.connect("destroy", Gtk.main_quit)
@@ -468,73 +468,81 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
468
468
  self.write_message("Something went wrong with the stages\n")
469
469
  return [None, None]
470
470
 
471
+ def add_test_data_to_view(self, data, ifile=None, folder=None):
472
+ """Add a test data to the tree view."""
473
+ has_errors = False
474
+ default_site = None
475
+
476
+ errors, missing = check_data(data)
477
+ if len(missing) > 0:
478
+ self.write_message("Some keys are missing in the JSon file.\n")
479
+ self.write_message("{}\n".format("\n".join(['\t'+line for line in missing])))
480
+
481
+ if "institution" in missing and len(missing) == 1:
482
+ if default_site is None:
483
+ site, use_default = self.get_test_institute()
484
+ if use_default:
485
+ default_site = site
486
+ else:
487
+ site = default_site
488
+
489
+ if site:
490
+ data["institution"] = site
491
+ self.write_message("Setting Institution to {}\n".format(data["institution"]))
492
+
493
+ else:
494
+ has_errors = True
495
+ dbGtkUtils.complain("Invalid JSON file\n{}".format('\n'.join(errors)),"--")
496
+
497
+ if not has_errors:
498
+ attachments = []
499
+ if "attachments" in data:
500
+ for att in data["attachments"]:
501
+ path = Path(att["path"])
502
+ if path.exists():
503
+ path = path.expanduser().resolve()
504
+ else:
505
+ if folder is not None:
506
+ path = folder / path.name
507
+
508
+ if path.exists():
509
+ attachments.append(ITkDButils.Attachment(path=path,
510
+ title=att["title"],
511
+ desc=att["description"]))
512
+ else:
513
+ self.write_message("Ignoring atachment {}".format(data["path"]))
514
+
515
+ # We need to delete this, which is "unofficial"
516
+ del data["attachments"]
517
+
518
+ model = self.tree.get_model()
519
+ comments = data.get("comments", [])
520
+ defects = data.get("defects", [])
521
+ the_date = handle_test_date(data["date"])
522
+ combo, currentStage = self.get_component_stages(data["component"])
523
+ if data["passed"]:
524
+ if data["problems"]:
525
+ color = "orange"
526
+ else:
527
+ color = self.def_color
528
+ else:
529
+ color = "firebrick"
530
+
531
+ model.append([data["component"], data["testType"], data["runNumber"], the_date,
532
+ data["institution"], currentStage, currentStage,
533
+ ifile, data, len(attachments), attachments,
534
+ len(comments), comments, len(defects), defects, color])
535
+
471
536
  def add_tests_to_view(self, files):
472
537
  """Add the input fiels to the treeview."""
473
- default_site = None
474
538
  for ifile in files:
475
539
  try:
476
- has_errors = False
477
- data = json.loads(open(ifile, 'r', encoding="UTF-8").read())
478
- errors, missing = check_data(data)
479
- if len(missing) > 0:
480
- self.write_message("{}\n".format(Path(ifile).name))
481
- self.write_message("Some keys are missing in the JSon file.\n")
482
- self.write_message("{}\n".format("\n".join(['\t'+line for line in missing])))
483
-
484
- if "institution" in missing and len(missing) == 1:
485
- if default_site is None:
486
- site, use_default = self.get_test_institute()
487
- if use_default:
488
- default_site = site
489
- else:
490
- site = default_site
491
-
492
- if site:
493
- data["institution"] = site
494
- self.write_message("Setting Institution to {}\n".format(data["institution"]))
540
+ self.write_message("{}\n".format(Path(ifile).name))
541
+ folder = Path(ifile).parent
495
542
 
496
- else:
497
- has_errors = True
498
- dbGtkUtils.complain("Invalid JSON file\n{}".format('\n'.join(errors)), ifile)
499
-
500
- if not has_errors:
501
- attachments = []
502
- if "attachments" in data:
503
- folder = Path(ifile).parent
504
- for att in data["attachments"]:
505
- path = Path(att["path"])
506
- if path.exists():
507
- path = path.expanduser().resolve()
508
- else:
509
- path = folder / path.name
510
-
511
- if path.exists():
512
- attachments.append(ITkDButils.Attachment(path=path,
513
- title=att["title"],
514
- desc=att["description"]))
515
- else:
516
- self.write_message("Ignoring atachment {}".format(data["path"]))
517
-
518
- # We need to delete tis, which is "unofficial"
519
- del data["attachments"]
520
-
521
- model = self.tree.get_model()
522
- comments = data.get("comments", [])
523
- defects = data.get("defects", [])
524
- the_date = handle_test_date(data["date"])
525
- combo, currentStage = self.get_component_stages(data["component"])
526
- if data["passed"]:
527
- if data["problems"]:
528
- color = "orange"
529
- else:
530
- color = self.def_color
531
- else:
532
- color = "firebrick"
543
+ data = json.loads(open(ifile, 'r', encoding="UTF-8").read())
544
+ self.add_test_data_to_view(data, ifile=ifile, folder=folder)
533
545
 
534
- model.append([data["component"], data["testType"], data["runNumber"], the_date,
535
- data["institution"], currentStage, currentStage,
536
- ifile, data, len(attachments), attachments,
537
- len(comments), comments, len(defects), defects, color])
538
546
 
539
547
  except Exception as E:
540
548
  self.write_message("Cannot load file {}\n".format(ifile))
@@ -677,7 +685,8 @@ class UploadMultipleTests(dbGtkUtils.ITkDBWindow):
677
685
 
678
686
 
679
687
  def main():
680
- """Main entry."""
688
+ """Main entry."""
689
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/uploadMultipleTests.html"
681
690
  # DB login
682
691
  dlg = ITkDBlogin.ITkDBlogin()
683
692
  client = dlg.get_client()
@@ -689,7 +698,7 @@ def main():
689
698
  client.user_gui = dlg
690
699
 
691
700
  # Start GUI
692
- UpT = UploadMultipleTests(client)
701
+ UpT = UploadMultipleTests(client, help_link=HELP_LINK)
693
702
 
694
703
  if gtk_runs:
695
704
  UpT.present()
@@ -211,7 +211,7 @@ class UploadTest(dbGtkUtils.ITkDBWindow):
211
211
  ifile = Path(self.payload).expanduser().resolve().as_posix()
212
212
  self.testF.set_filename(ifile)
213
213
  self.on_test_file(self.testF)
214
- self.write_message("Loaded {}".format(the_path.name))
214
+ self.write_message("Loaded {}\n".format(the_path.name))
215
215
 
216
216
  else:
217
217
  print("Input file does not exists: {}".format(self.payload))
@@ -452,12 +452,13 @@ class UploadTest(dbGtkUtils.ITkDBWindow):
452
452
  dbGtkUtils.complain("Failed uploading test", msg)
453
453
 
454
454
  else:
455
- self.write_message("Upload successfull")
455
+ self.write_message("Upload successfull\n")
456
456
  dbGtkUtils.ask_for_confirmation("Upload successfull", "")
457
457
 
458
458
 
459
459
  def main():
460
460
  """Main entry."""
461
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/uploadSingleTest.html"
461
462
  parser = argparse.ArgumentParser()
462
463
 
463
464
  parser.add_argument("--test-file", help="Name of json file with test data")
@@ -483,6 +484,7 @@ def main():
483
484
  # Start GUI
484
485
  UpT = UploadTest(client,
485
486
  payload=args.test_file,
487
+ help_link=HELP_LINK,
486
488
  attachment=ITkDButils.Attachment(path=args.attachment,
487
489
  title=args.attach_title,
488
490
  desc=args.attach_desc))
@@ -21,8 +21,6 @@ import gi
21
21
  gi.require_version("Gtk", "3.0")
22
22
  from gi.repository import Gtk, Gio
23
23
 
24
- HELP_LINK="https://itkdb-gtk.docs.cern.ch/moduleVisualInspection.html"
25
-
26
24
 
27
25
  module_type = re.compile("20USE(M[0-5]{1}|[345]{1}[LR]{1})[0-9]{7}")
28
26
  sensor_type = re.compile("20USES[0-5]{1}[0-9]{7}")
@@ -31,7 +29,7 @@ sensor_type = re.compile("20USES[0-5]{1}[0-9]{7}")
31
29
  class ModuleVisualInspection(dbGtkUtils.ITkDBWindow):
32
30
  """Module/Sensor Visual Inspection."""
33
31
 
34
- def __init__(self, session, title="Visual Inspection", help_link=HELP_LINK):
32
+ def __init__(self, session, title="Visual Inspection", help_link=None):
35
33
  super().__init__(title=title,
36
34
  session=session,
37
35
  show_search="Find object with given SN.",
@@ -68,7 +66,7 @@ class ModuleVisualInspection(dbGtkUtils.ITkDBWindow):
68
66
  lbl.set_xalign(0)
69
67
  grid.attach(lbl, 0, irow, 1, 1)
70
68
  grid.attach(receiver, 1, irow, 1, 1)
71
-
69
+
72
70
  self.obj_type = None
73
71
  self.obj_type_label = Gtk.Label()
74
72
  self.obj_type_label.set_xalign(0)
@@ -273,6 +271,8 @@ class ModuleVisualInspection(dbGtkUtils.ITkDBWindow):
273
271
 
274
272
  def main():
275
273
  """Main entry."""
274
+ HELP_LINK="https://itkdb-gtk.docs.cern.ch/moduleVisualInspection.html"
275
+
276
276
  # DB login
277
277
  dlg = ITkDBlogin.ITkDBlogin()
278
278
  client = dlg.get_client()
@@ -283,7 +283,7 @@ def main():
283
283
 
284
284
  client.user_gui = dlg
285
285
 
286
- gTest = ModuleVisualInspection(client)
286
+ gTest = ModuleVisualInspection(client, help_link=HELP_LINK)
287
287
 
288
288
  gTest.present()
289
289
  gTest.connect("destroy", Gtk.main_quit)
@@ -935,6 +935,16 @@ class WireBond(dbGtkUtils.ITkDBWindow):
935
935
  skeleton["comments"].append(msg)
936
936
  skeleton["passed"] = False
937
937
  self.write_message("{}\n".format(msg))
938
+ for key in skeleton["results"]["FAILED_HYBRID_TO_PB"]:
939
+ defect = {
940
+ "description": "Unbonded: Hybrid to PB",
941
+ "name": "UNBODED",
942
+ "properties": {
943
+ "wire_number": range_to_list(key)
944
+ }
945
+ }
946
+ skeleton["defects"].append(defect)
947
+
938
948
 
939
949
  def compute_module_to_frame(self, skeleton):
940
950
  """Compute number of failures and repairs."""
@@ -945,6 +955,15 @@ class WireBond(dbGtkUtils.ITkDBWindow):
945
955
  skeleton["comments"].append(msg)
946
956
  skeleton["passed"] = False
947
957
  self.write_message("{}\n".format(msg))
958
+ for key in skeleton["results"]["FAILED_MODULE_TO_FRAME"]:
959
+ defect = {
960
+ "description": "Unbonded: Module to Frame",
961
+ "name": "UNBODED",
962
+ "properties": {
963
+ "wire_number": range_to_list(key)
964
+ }
965
+ }
966
+ skeleton["defects"].append(defect)
948
967
 
949
968
  def compute_unconnected(self, results):
950
969
  """Compute number of unconnected."""
@@ -956,6 +975,7 @@ class WireBond(dbGtkUtils.ITkDBWindow):
956
975
 
957
976
  M = ModuleHoles(param=param, win=self)
958
977
 
978
+ defects = []
959
979
  for test, values in results.items():
960
980
  if test.find("FAILED") < 0:
961
981
  continue
@@ -972,6 +992,17 @@ class WireBond(dbGtkUtils.ITkDBWindow):
972
992
  H.add_channel(irow, out)
973
993
  H.holes[irow] = find_holes(H.channels[irow])
974
994
 
995
+ # add defects
996
+ defects.append(
997
+ {
998
+ "description": "Unbonded Channel",
999
+ "name": "UNBONDED",
1000
+ "properties": {
1001
+ "front_end_row": irow,
1002
+ "wire_number": out
1003
+ }
1004
+ }
1005
+ )
975
1006
 
976
1007
  # Now get sensor strips.
977
1008
  M.ready()
@@ -981,7 +1012,7 @@ class WireBond(dbGtkUtils.ITkDBWindow):
981
1012
 
982
1013
  out = {}
983
1014
  out["comments"] = []
984
- out["defects"] = []
1015
+ out["defects"] = defects
985
1016
  for irow in range(4):
986
1017
  key = "MAX_CONT_UNCON_ROW{}".format(irow+1)
987
1018
  out[key] = mx_consecutive[irow]
@@ -1,6 +1,6 @@
1
1
  """ itkdb-gtk python module
2
2
  """
3
- __version__ = "0.10.10.dev8"
3
+ __version__ = "0.11.0"
4
4
 
5
5
 
6
6
  def dash_board():
@@ -60,7 +60,6 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
60
60
  PETAL_CORE_THERMAL = 12
61
61
  PETAL_INFORMATION = 13
62
62
 
63
-
64
63
  def __init__(self, session):
65
64
  """Initialization."""
66
65
  super().__init__(title="ITkDB Dashboard", session=session, help_link=HELP_LINK)
@@ -119,7 +118,6 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
119
118
  btnModVI.connect("clicked", self.module_VI)
120
119
  grid.attach(btnModVI, 0, irow, 1, 1)
121
120
 
122
-
123
121
  if HAS_PETALQC:
124
122
  irow +=1
125
123
  btnPetalInfo = Gtk.Button(label="AVS Petal Info")
@@ -135,7 +133,6 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
135
133
  btnPetalThermal.connect("clicked", self.petal_thermal)
136
134
  grid.attach(btnPetalThermal, 1, irow, 1, 1)
137
135
 
138
-
139
136
  irow += 1
140
137
  grid.attach(Gtk.Label(), 0, irow, 1, 1)
141
138
 
@@ -166,7 +163,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
166
163
  return
167
164
 
168
165
  self.mask |= bt
169
- W = UploadTest.UploadTest(self.session, help_link=HELP_LINK)
166
+ W = UploadTest.UploadTest(
167
+ self.session,
168
+ help_link="{}/uploadSingleTest.html".format(HELP_LINK)
169
+ )
170
170
  W.connect("destroy", self.app_closed, bitn)
171
171
 
172
172
  def upload_multiple_tests(self, *args):
@@ -177,7 +177,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
177
177
  return
178
178
 
179
179
  self.mask |= bt
180
- W = UploadMultipleTests.UploadMultipleTests(self.session, help_link=HELP_LINK)
180
+ W = UploadMultipleTests.UploadMultipleTests(
181
+ self.session,
182
+ help_link="{}/uploadMultipleTests.html".format(HELP_LINK)
183
+ )
181
184
  W.connect("destroy", self.app_closed, bitn)
182
185
 
183
186
  def create_shipment(self, *args):
@@ -188,7 +191,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
188
191
  return
189
192
 
190
193
  self.mask |= bt
191
- W = CreateShipments.CreateShipments(self.session, help_link=HELP_LINK)
194
+ W = CreateShipments.CreateShipments(
195
+ self.session,
196
+ help_link="{}/createShipment.html".format(HELP_LINK)
197
+ )
192
198
  W.connect("destroy", self.app_closed, bitn)
193
199
 
194
200
  def receive_shipment(self, *args):
@@ -199,7 +205,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
199
205
  return
200
206
 
201
207
  self.mask |= bt
202
- W = GetShipments.ReceiveShipments(self.session, help_link=HELP_LINK)
208
+ W = GetShipments.ReceiveShipments(
209
+ self.session,
210
+ help_link="{}/receiveShipments.html".format(HELP_LINK)
211
+ )
203
212
  W.connect("destroy", self.app_closed, bitn)
204
213
 
205
214
  def petal_gnd(self, *args):
@@ -210,7 +219,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
210
219
  return
211
220
 
212
221
  self.mask |= bt
213
- W = PetalReceptionTests.PetalReceptionTests(self.session, help_link=HELP_LINK)
222
+ W = PetalReceptionTests.PetalReceptionTests(
223
+ self.session,
224
+ help_link="{}/petalReceptionTests.html".format(HELP_LINK)
225
+ )
214
226
  W.connect("destroy", self.app_closed, bitn)
215
227
 
216
228
  def glue_weight(self, *args):
@@ -232,7 +244,10 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
232
244
  return
233
245
 
234
246
  self.mask |= bt
235
- W = UploadModuleIV.IVwindow(self.session, help_link=HELP_LINK)
247
+ W = UploadModuleIV.IVwindow(
248
+ self.session,
249
+ help_link="{}/uploadModuleIV.html".format(HELP_LINK)
250
+ )
236
251
  W.connect("destroy", self.app_closed, bitn)
237
252
 
238
253
  def wire_bond(self, *args):
@@ -243,7 +258,11 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
243
258
  return
244
259
 
245
260
  self.mask |= bt
246
- W = WireBondGui.WireBond(session=self.session, title="Wirebond", help_link=HELP_LINK)
261
+ W = WireBondGui.WireBond(
262
+ session=self.session,
263
+ title="Wirebond",
264
+ help_link="{}//wirebondTest.html".format(HELP_LINK),
265
+ )
247
266
  W.connect("destroy", self.app_closed, bitn)
248
267
  W.show_all()
249
268
 
@@ -255,9 +274,11 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
255
274
  return
256
275
 
257
276
  self.mask |= bt
258
- W = PanelVisualInspection.PanelVisualInspection(session=self.session,
259
- title="Panel Visual Inspection",
260
- help_link=HELP_LINK)
277
+ W = PanelVisualInspection.PanelVisualInspection(
278
+ session=self.session,
279
+ title="Panel Visual Inspection",
280
+ help_link="{}/panelVisualInspection.html".format(HELP_LINK),
281
+ )
261
282
  W.connect("destroy", self.app_closed, bitn)
262
283
  W.show_all()
263
284
 
@@ -269,13 +290,14 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
269
290
  return
270
291
 
271
292
  self.mask |= bt
272
- W = VisualInspection.ModuleVisualInspection(session=self.session,
273
- title="Module/Sensor Visual Inspection",
274
- help_link=HELP_LINK)
293
+ W = VisualInspection.ModuleVisualInspection(
294
+ session=self.session,
295
+ title="Module/Sensor Visual Inspection",
296
+ help_link="{}/moduleVisualInspection.html".format(HELP_LINK),
297
+ )
275
298
  W.connect("destroy", self.app_closed, bitn)
276
299
  W.show_all()
277
300
 
278
-
279
301
  def upload_petal_info(self, *srgs):
280
302
  """Upload petal Info."""
281
303
  if not HAS_PETALQC:
@@ -291,13 +313,11 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
291
313
  W.connect("destroy", self.app_closed, bitn)
292
314
  W.show_all()
293
315
 
294
-
295
316
  def petal_metrology(self, *args):
296
317
  """Do petal metrology"""
297
318
  if not HAS_PETALQC:
298
319
  return
299
320
 
300
-
301
321
  bitn = DashWindow.PETAL_CORE_METRO
302
322
  bt = 1 << bitn
303
323
  if self.mask & bt:
@@ -321,10 +341,13 @@ class DashWindow(dbGtkUtils.ITkDBWindow):
321
341
 
322
342
  self.mask |= bt
323
343
  opt = IRPetalParam()
344
+ opt.files = []
345
+ opt.golden = None
324
346
  opt.folder = None
325
347
  opt.out = None
326
348
  opt.alias = None
327
349
  opt.SN = None
350
+ opt.desy = False
328
351
  W = CoreThermal(opt, self.session, title="Petal Thermal Test.")
329
352
  W.connect("destroy", self.app_closed, bitn)
330
353
  W.show_all()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: itkdb_gtk
3
- Version: 0.10.10.dev8
3
+ Version: 0.11.0
4
4
  Summary: A collection of Gtk based GUI to access ITkDB.
5
5
  Author-email: Carlos Lacasta <carlos.lacasta@cern.ch>
6
6
  Project-URL: Homepage, https://gitlab.cern.ch/atlas-itk/sw/db/itk-pdb-gtk-gui-utils
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "itkdb_gtk"
7
- version = "0.10.10.dev8"
7
+ version = "0.11.0"
8
8
  authors = [
9
9
  { name="Carlos Lacasta", email="carlos.lacasta@cern.ch" },
10
10
  ]
@@ -41,10 +41,49 @@ def list_petal_core_batches(session):
41
41
  rc = {}
42
42
  for B in batch_list:
43
43
  rc[B["code"] ]= B["id"]
44
-
44
+
45
45
  return rc
46
46
 
47
47
 
48
+ def create_petal_core_batchType(session):
49
+ """Creates the batches."""
50
+ out = session.post(
51
+ "createBatchType",
52
+ json={
53
+ "code": "PETAL_CORE",
54
+ "name": "Petal Core",
55
+ "state": "active",
56
+ "project": "S",
57
+ },
58
+ )
59
+ out = session.post(
60
+ "createBatch",
61
+ json={
62
+ "project": "S",
63
+ "batchType": "PETAL_CORE",
64
+ "number": "PETAL_CORE_PROTO",
65
+ "ownerInstituteList": ["IFIC", "AVS", "DESYHH"],
66
+ },
67
+ )
68
+ out = session.post(
69
+ "createBatch",
70
+ json={
71
+ "project": "S",
72
+ "batchType": "PETAL_CORE",
73
+ "number": "PETAL_CORE_PREPROD",
74
+ "ownerInstituteList": ["IFIC", "AVS", "DESYHH"],
75
+ },
76
+ )
77
+ out = session.post(
78
+ "createBatch",
79
+ json={
80
+ "project": "S",
81
+ "batchType": "PETAL_CORE",
82
+ "number": "PETAL_CORE_PROD",
83
+ "ownerInstituteList": ["IFIC", "AVS", "DESYHH"],
84
+ },
85
+ )
86
+
48
87
 
49
88
  def main(session):
50
89
  batch_list = list_petal_core_batches(session)
@@ -78,10 +117,10 @@ def main(session):
78
117
  if __name__ == "__main__":
79
118
  # ITk_PB authentication
80
119
  dlg = ITkDBlogin.ITkDBlogin()
81
- session = dlg.get_client()
120
+ db_session = dlg.get_client()
82
121
 
83
122
  try:
84
- main(session)
123
+ main(db_session)
85
124
 
86
125
  except Exception as E:
87
126
  print(E)
File without changes
File without changes