boris-behav-obs 8.26.1__tar.gz → 8.27__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.
Files changed (129) hide show
  1. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/PKG-INFO +1 -1
  2. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/core.py +67 -12
  3. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/preferences.py +0 -1
  4. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/version.py +1 -1
  5. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/PKG-INFO +1 -1
  6. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/pyproject.toml +2 -2
  7. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/LICENSE.TXT +0 -0
  8. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/MANIFEST.in +0 -0
  9. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/README.TXT +0 -0
  10. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/README.rst +0 -0
  11. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/__init__.py +0 -0
  12. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/__main__.py +0 -0
  13. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/about.py +0 -0
  14. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/add_modifier.py +0 -0
  15. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/add_modifier_ui.py +0 -0
  16. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/advanced_event_filtering.py +0 -0
  17. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/behav_coding_map_creator.py +0 -0
  18. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/behavior_binary_table.py +0 -0
  19. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/behaviors_coding_map.py +0 -0
  20. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/boris_cli.py +0 -0
  21. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/cmd_arguments.py +0 -0
  22. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/coding_pad.py +0 -0
  23. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/config.py +0 -0
  24. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/config_file.py +0 -0
  25. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/connections.py +0 -0
  26. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/converters.py +0 -0
  27. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/converters_ui.py +0 -0
  28. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/cooccurence.py +0 -0
  29. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/core_qrc.py +0 -0
  30. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/core_ui.py +0 -0
  31. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/db_functions.py +0 -0
  32. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/dev.py +0 -0
  33. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/dialog.py +0 -0
  34. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/duration_widget.py +0 -0
  35. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/edit_event.py +0 -0
  36. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/edit_event_ui.py +0 -0
  37. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/event_operations.py +0 -0
  38. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/events_cursor.py +0 -0
  39. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/events_snapshots.py +0 -0
  40. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/exclusion_matrix.py +0 -0
  41. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/export_events.py +0 -0
  42. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/export_observation.py +0 -0
  43. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/external_processes.py +0 -0
  44. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/geometric_measurement.py +0 -0
  45. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/gui_utilities.py +0 -0
  46. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/image_overlay.py +0 -0
  47. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/import_observations.py +0 -0
  48. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/irr.py +0 -0
  49. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/latency.py +0 -0
  50. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/map_creator.py +0 -0
  51. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/measurement_widget.py +0 -0
  52. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/media_file.py +0 -0
  53. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/menu_options.py +0 -0
  54. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/modifiers_coding_map.py +0 -0
  55. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/mpv.py +0 -0
  56. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/mpv2.py +0 -0
  57. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/observation.py +0 -0
  58. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/observation_operations.py +0 -0
  59. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/observation_ui.py +0 -0
  60. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/observations_list.py +0 -0
  61. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/otx_parser.py +0 -0
  62. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/param_panel.py +0 -0
  63. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/param_panel_ui.py +0 -0
  64. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/player_dock_widget.py +0 -0
  65. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/plot_data_module.py +0 -0
  66. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/plot_events.py +0 -0
  67. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/plot_events_rt.py +0 -0
  68. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/plot_spectrogram_rt.py +0 -0
  69. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/plot_waveform_rt.py +0 -0
  70. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/__init__.py +0 -0
  71. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/const.py +0 -0
  72. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/dict.py +0 -0
  73. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/func.py +0 -0
  74. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/interval.py +0 -0
  75. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/portion/io.py +0 -0
  76. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/preferences_ui.py +0 -0
  77. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/project.py +0 -0
  78. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/project_functions.py +0 -0
  79. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/project_import_export.py +0 -0
  80. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/project_ui.py +0 -0
  81. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/__init__.py +0 -0
  82. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/__main__.py +0 -0
  83. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/colorsystem.py +0 -0
  84. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/dark/__init__.py +0 -0
  85. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/dark/darkstyle_rc.py +0 -0
  86. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/dark/palette.py +0 -0
  87. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/example/__init__.py +0 -0
  88. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/example/__main__.py +0 -0
  89. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/example/ui/__init__.py +0 -0
  90. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/light/__init__.py +0 -0
  91. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/light/lightstyle_rc.py +0 -0
  92. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/light/palette.py +0 -0
  93. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/palette.py +0 -0
  94. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/utils/__init__.py +0 -0
  95. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/utils/__main__.py +0 -0
  96. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/utils/images.py +0 -0
  97. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qdarkstyle/utils/scss.py +0 -0
  98. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qrc_boris.py +0 -0
  99. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/qrc_boris5.py +0 -0
  100. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/select_modifiers.py +0 -0
  101. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/select_observations.py +0 -0
  102. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/select_subj_behav.py +0 -0
  103. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/state_events.py +0 -0
  104. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/subjects_pad.py +0 -0
  105. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/synthetic_time_budget.py +0 -0
  106. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/time_budget_functions.py +0 -0
  107. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/time_budget_widget.py +0 -0
  108. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/transitions.py +0 -0
  109. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/utilities.py +0 -0
  110. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/video_equalizer.py +0 -0
  111. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/video_equalizer_ui.py +0 -0
  112. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/video_operations.py +0 -0
  113. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/vlc_local.py +0 -0
  114. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris/write_event.py +0 -0
  115. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/SOURCES.txt +0 -0
  116. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/dependency_links.txt +0 -0
  117. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/entry_points.txt +0 -0
  118. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/requires.txt +0 -0
  119. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/boris_behav_obs.egg-info/top_level.txt +0 -0
  120. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/setup.cfg +0 -0
  121. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_db_functions.py +0 -0
  122. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_export_observation.py +0 -0
  123. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_irr.py +0 -0
  124. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_observation_gui.py +0 -0
  125. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_otx_parser.py +0 -0
  126. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_preferences_gui.py +0 -0
  127. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_project_functions.py +0 -0
  128. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_time_budget.py +0 -0
  129. {boris_behav_obs-8.26.1 → boris_behav_obs-8.27}/tests/test_utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: boris-behav-obs
3
- Version: 8.26.1
3
+ Version: 8.27
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -53,6 +53,8 @@ import gzip
53
53
  from collections import deque
54
54
 
55
55
  import matplotlib
56
+ import zipfile
57
+ import shutil
56
58
 
57
59
  matplotlib.use("Qt5Agg")
58
60
 
@@ -1360,28 +1362,81 @@ class MainWindow(QMainWindow, Ui_MainWindow):
1360
1362
  def actionCheckUpdate_activated(self, flagMsgOnlyIfNew=False):
1361
1363
  """
1362
1364
  check BORIS web site for updates
1365
+ ask user for updating
1363
1366
  """
1364
1367
 
1368
+ versionURL = "https://www.boris.unito.it/static/ver4.dat"
1365
1369
  try:
1366
- versionURL = "https://www.boris.unito.it/static/ver4.dat"
1367
1370
  last_version = urllib.request.urlopen(versionURL).read().strip().decode("utf-8")
1368
- if util.versiontuple(last_version) > util.versiontuple(__version__):
1369
- msg = (
1370
- f"A new version is available: v. <b>{last_version}</b><br>"
1371
- 'Go to <a href="https://www.boris.unito.it">'
1372
- "https://www.boris.unito.it</a> to install it."
1371
+ except Exception:
1372
+ QMessageBox.warning(self, cfg.programName, "Can not check for updates...")
1373
+ return
1374
+
1375
+ # record check timestamp
1376
+ config_file.save(self, lastCheckForNewVersion=int(time.mktime(time.localtime())))
1377
+
1378
+ if util.versiontuple(last_version) > util.versiontuple(__version__):
1379
+ if (
1380
+ dialog.MessageDialog(
1381
+ cfg.programName,
1382
+ (
1383
+ f"A new version is available: v. {last_version}.<br><br>"
1384
+ 'For updating manually go to <a href="https://www.boris.unito.it">https://www.boris.unito.it</a>.<br>'
1385
+ ),
1386
+ (cfg.CANCEL, "Update automatically"),
1373
1387
  )
1374
- # https://github.com/olivierfriard/BORIS/archive/refs/tags/v{last_version}.zip
1375
- else:
1376
- msg = f"The version you are using is the last one: <b>{__version__}</b>"
1388
+ == cfg.CANCEL
1389
+ ):
1390
+ return
1391
+
1392
+ else:
1393
+ msg = f"The version you are using is the last one: <b>{__version__}</b>"
1394
+ QMessageBox.information(self, cfg.programName, msg)
1395
+
1396
+ # any news?
1377
1397
  newsURL = "https://www.boris.unito.it/static/news.dat"
1378
1398
  news = urllib.request.urlopen(newsURL).read().strip().decode("utf-8")
1379
- config_file.save(self, lastCheckForNewVersion=int(time.mktime(time.localtime())))
1380
- QMessageBox.information(self, cfg.programName, msg)
1381
1399
  if news:
1382
1400
  QMessageBox.information(self, cfg.programName, news)
1401
+ return
1402
+
1403
+ # check if a .git is present
1404
+ if (pl.Path(__file__).parent.parent / pl.Path(".git")).is_dir():
1405
+ QMessageBox.critical(self, cfg.programName, "A .git directory is present, BORIS cannot be automatically updated.")
1406
+ return
1407
+
1408
+ # download zip archive
1409
+ try:
1410
+ zip_content = urllib.request.urlopen(f"https://github.com/olivierfriard/BORIS/archive/refs/tags/v{last_version}.zip").read()
1383
1411
  except Exception:
1384
- QMessageBox.warning(self, cfg.programName, "Can not check for updates...")
1412
+ QMessageBox.critical(self, cfg.programName, "Cannot download the new version")
1413
+ return
1414
+
1415
+ temp_zip = tempfile.NamedTemporaryFile(suffix=".zip")
1416
+ try:
1417
+ with open(temp_zip.name, "wb") as f_out:
1418
+ f_out.write(zip_content)
1419
+ except Exception:
1420
+ QMessageBox.critical(self, cfg.programName, "A problem occurred during saving the new version of BORIS.")
1421
+ return
1422
+
1423
+ # extract to temp dir
1424
+ try:
1425
+ temp_dir = tempfile.TemporaryDirectory()
1426
+ with zipfile.ZipFile(temp_zip.name, "r") as zip_ref:
1427
+ zip_ref.extractall(temp_dir.name)
1428
+ except Exception:
1429
+ QMessageBox.critical(self, cfg.programName, "A problem occurred during the unzip of the new version.")
1430
+ return
1431
+
1432
+ # copy from temp dir to current BORIS dir
1433
+ try:
1434
+ shutil.copytree(f"{temp_dir.name}/BORIS-{last_version}", pl.Path(__file__).parent.parent, dirs_exist_ok=True)
1435
+ except Exception:
1436
+ QMessageBox.critical(self, cfg.programName, "A problem occurred during the copy the new version of BORIS.")
1437
+ return
1438
+
1439
+ QMessageBox.information(self, cfg.programName, f"BORIS was updated to v. {last_version}. Restart the program to apply the changes.")
1385
1440
 
1386
1441
  def seek_mediaplayer(self, new_time: dec, player=0) -> int:
1387
1442
  """
@@ -54,7 +54,6 @@ class Preferences(QDialog, Ui_prefDialog):
54
54
  self.pbCancel.clicked.connect(self.reject)
55
55
 
56
56
  self.flag_refresh = False
57
- self.flag_reset_frames_memory = False
58
57
 
59
58
  def refresh_preferences(self):
60
59
  """
@@ -20,5 +20,5 @@ This file is part of BORIS.
20
20
 
21
21
  """
22
22
 
23
- __version__ = "8.26.1"
23
+ __version__ = "8.27"
24
24
  __version_date__ = "2024-06-06"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: boris-behav-obs
3
- Version: 8.26.1
3
+ Version: 8.27
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "boris-behav-obs"
3
- version = "8.26.1"
3
+ version = "8.27"
4
4
  description = "BORIS - Behavioral Observation Research Interactive Software"
5
5
  authors = [{ name="Olivier Friard", email="olivier.friard@unito.it" }]
6
6
  readme = "README.rst"
@@ -58,7 +58,7 @@ line-length = 140
58
58
  exclude = ["*_ui.py", "mpv*"]
59
59
 
60
60
  [tool.bumpver]
61
- current_version = "8.26.1"
61
+ current_version = "8.27"
62
62
  version_pattern = "MAJOR.MINOR.PATCH"
63
63
 
64
64