PrEditor 2.2.0__tar.gz → 2.4.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.
Files changed (202) hide show
  1. {preditor-2.2.0 → preditor-2.4.0}/.github/workflows/release.yml +3 -3
  2. {preditor-2.2.0 → preditor-2.4.0}/.github/workflows/static-analysis-and-test.yml +12 -12
  3. {preditor-2.2.0 → preditor-2.4.0}/PKG-INFO +32 -1
  4. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/PKG-INFO +32 -1
  5. {preditor-2.2.0 → preditor-2.4.0}/README.md +31 -0
  6. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/console_base.py +7 -5
  7. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/group_tab_widget.py +5 -2
  8. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/loggerwindow.py +17 -2
  9. {preditor-2.2.0 → preditor-2.4.0}/preditor/prefs.py +1 -1
  10. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/settings.ini +1 -1
  11. {preditor-2.2.0 → preditor-2.4.0}/preditor/stream/director.py +4 -0
  12. {preditor-2.2.0 → preditor-2.4.0}/preditor/version.py +3 -3
  13. {preditor-2.2.0 → preditor-2.4.0}/.coveragerc +0 -0
  14. {preditor-2.2.0 → preditor-2.4.0}/.github/ISSUE_TEMPLATE/BUG_REPORT.md +0 -0
  15. {preditor-2.2.0 → preditor-2.4.0}/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +0 -0
  16. {preditor-2.2.0 → preditor-2.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  17. {preditor-2.2.0 → preditor-2.4.0}/.gitignore +0 -0
  18. {preditor-2.2.0 → preditor-2.4.0}/.pre-commit-config.yaml +0 -0
  19. {preditor-2.2.0 → preditor-2.4.0}/CODE_OF_CONDUCT.md +0 -0
  20. {preditor-2.2.0 → preditor-2.4.0}/CONTRIBUTING.md +0 -0
  21. {preditor-2.2.0 → preditor-2.4.0}/LICENSE +0 -0
  22. {preditor-2.2.0 → preditor-2.4.0}/MANIFEST.in +0 -0
  23. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/SOURCES.txt +0 -0
  24. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/dependency_links.txt +0 -0
  25. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/entry_points.txt +0 -0
  26. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/requires.txt +0 -0
  27. {preditor-2.2.0 → preditor-2.4.0}/PrEditor.egg-info/top_level.txt +0 -0
  28. {preditor-2.2.0 → preditor-2.4.0}/examples/add_to_app.py +0 -0
  29. {preditor-2.2.0 → preditor-2.4.0}/examples/output_capture_and_show.py +0 -0
  30. {preditor-2.2.0 → preditor-2.4.0}/examples/output_console.py +0 -0
  31. {preditor-2.2.0 → preditor-2.4.0}/examples/output_console.ui +0 -0
  32. {preditor-2.2.0 → preditor-2.4.0}/preditor/__init__.py +0 -0
  33. {preditor-2.2.0 → preditor-2.4.0}/preditor/__main__.py +0 -0
  34. {preditor-2.2.0 → preditor-2.4.0}/preditor/about_module.py +0 -0
  35. {preditor-2.2.0 → preditor-2.4.0}/preditor/cli.py +0 -0
  36. {preditor-2.2.0 → preditor-2.4.0}/preditor/config.py +0 -0
  37. {preditor-2.2.0 → preditor-2.4.0}/preditor/constants.py +0 -0
  38. {preditor-2.2.0 → preditor-2.4.0}/preditor/contexts.py +0 -0
  39. {preditor-2.2.0 → preditor-2.4.0}/preditor/cores/__init__.py +0 -0
  40. {preditor-2.2.0 → preditor-2.4.0}/preditor/cores/core.py +0 -0
  41. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/.hab.json +0 -0
  42. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/maya/PrEditor_maya.mod +0 -0
  43. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/maya/README.md +0 -0
  44. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/maya/plug-ins/PrEditor_maya.py +0 -0
  45. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/studiomax/PackageContents.xml +0 -0
  46. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/studiomax/PrEditor-PrEditor_Show.mcr +0 -0
  47. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/studiomax/README.md +0 -0
  48. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/studiomax/preditor.ms +0 -0
  49. {preditor-2.2.0 → preditor-2.4.0}/preditor/dccs/studiomax/preditor_menu.mnx +0 -0
  50. {preditor-2.2.0 → preditor-2.4.0}/preditor/debug.py +0 -0
  51. {preditor-2.2.0 → preditor-2.4.0}/preditor/delayable_engine/__init__.py +0 -0
  52. {preditor-2.2.0 → preditor-2.4.0}/preditor/delayable_engine/delayables.py +0 -0
  53. {preditor-2.2.0 → preditor-2.4.0}/preditor/enum.py +0 -0
  54. {preditor-2.2.0 → preditor-2.4.0}/preditor/excepthooks.py +0 -0
  55. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/__init__.py +0 -0
  56. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/app.py +0 -0
  57. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/codehighlighter.py +0 -0
  58. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/completer.py +0 -0
  59. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/console.py +0 -0
  60. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/dialog.py +0 -0
  61. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/drag_tab_bar.py +0 -0
  62. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/editor_chooser.py +0 -0
  63. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/errordialog.py +0 -0
  64. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/find_files.py +0 -0
  65. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/fuzzy_search/__init__.py +0 -0
  66. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/fuzzy_search/fuzzy_search.py +0 -0
  67. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/__init__.py +0 -0
  68. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/grouped_tab_menu.py +0 -0
  69. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/grouped_tab_models.py +0 -0
  70. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/grouped_tab_widget.py +0 -0
  71. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/group_tab_widget/one_tab_widget.py +0 -0
  72. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/level_buttons.py +0 -0
  73. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/logger_window_handler.py +0 -0
  74. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/logger_window_plugin.py +0 -0
  75. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/newtabwidget.py +0 -0
  76. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/output_console.py +0 -0
  77. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/qtdesigner/__init__.py +0 -0
  78. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/qtdesigner/_log_plugin.py +0 -0
  79. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/qtdesigner/console_base_plugin.py +0 -0
  80. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/qtdesigner/console_predit_plugin.py +0 -0
  81. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/set_text_editor_path_dialog.py +0 -0
  82. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/status_label.py +0 -0
  83. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/suggest_path_quotes_dialog.py +0 -0
  84. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/editor_chooser.ui +0 -0
  85. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/errordialog.ui +0 -0
  86. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/find_files.ui +0 -0
  87. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/loggerwindow.ui +0 -0
  88. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/set_text_editor_path_dialog.ui +0 -0
  89. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/ui/suggest_path_quotes_dialog.ui +0 -0
  90. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/window.py +0 -0
  91. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/workbox_mixin.py +0 -0
  92. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/workbox_text_edit.py +0 -0
  93. {preditor-2.2.0 → preditor-2.4.0}/preditor/gui/workboxwidget.py +0 -0
  94. {preditor-2.2.0 → preditor-2.4.0}/preditor/logging_config.py +0 -0
  95. {preditor-2.2.0 → preditor-2.4.0}/preditor/osystem.py +0 -0
  96. {preditor-2.2.0 → preditor-2.4.0}/preditor/plugins.py +0 -0
  97. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/error_mail.html +0 -0
  98. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/error_mail_inline.html +0 -0
  99. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/README.md +0 -0
  100. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/arrow_forward.png +0 -0
  101. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/check-bold.png +0 -0
  102. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/chevron-down.png +0 -0
  103. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/chevron-up.png +0 -0
  104. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/close-thick.png +0 -0
  105. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/comment-edit.png +0 -0
  106. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/content-copy.png +0 -0
  107. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/content-cut.png +0 -0
  108. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/content-duplicate.png +0 -0
  109. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/content-paste.png +0 -0
  110. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/content-save.png +0 -0
  111. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/debug_disabled.png +0 -0
  112. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/eye-check.png +0 -0
  113. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/file-plus.png +0 -0
  114. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/file-remove.png +0 -0
  115. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/format-align-left.png +0 -0
  116. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/format-letter-case-lower.png +0 -0
  117. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/format-letter-case-upper.png +0 -0
  118. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/format-letter-case.svg +0 -0
  119. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/information.png +0 -0
  120. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_critical.png +0 -0
  121. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_custom.png +0 -0
  122. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_debug.png +0 -0
  123. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_error.png +0 -0
  124. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_info.png +0 -0
  125. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_not_set.png +0 -0
  126. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/logging_warning.png +0 -0
  127. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/marker.png +0 -0
  128. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/play.png +0 -0
  129. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/playlist-play.png +0 -0
  130. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/plus-minus-variant.png +0 -0
  131. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/preditor.ico +0 -0
  132. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/preditor.png +0 -0
  133. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/preditor.psd +0 -0
  134. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/preditor.svg +0 -0
  135. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/regex.svg +0 -0
  136. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/restart.svg +0 -0
  137. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/skip-forward-outline.png +0 -0
  138. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/skip-next-outline.png +0 -0
  139. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/skip-next.png +0 -0
  140. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/skip-previous.png +0 -0
  141. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/subdirectory-arrow-right.png +0 -0
  142. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/text-search-variant.png +0 -0
  143. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/img/warning-big.png +0 -0
  144. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/lang/python.json +0 -0
  145. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/pref_updates/pref_updates.json +0 -0
  146. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/stylesheet/Bright.css +0 -0
  147. {preditor-2.2.0 → preditor-2.4.0}/preditor/resource/stylesheet/Dark.css +0 -0
  148. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/__init__.py +0 -0
  149. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/delayables/__init__.py +0 -0
  150. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/delayables/smart_highlight.py +0 -0
  151. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/delayables/spell_check.py +0 -0
  152. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/documenteditor.py +0 -0
  153. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/finddialog.py +0 -0
  154. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/__init__.py +0 -0
  155. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/bash.ini +0 -0
  156. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/batch.ini +0 -0
  157. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/cpp.ini +0 -0
  158. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/css.ini +0 -0
  159. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/eyeonscript.ini +0 -0
  160. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/html.ini +0 -0
  161. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/javascript.ini +0 -0
  162. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/lua.ini +0 -0
  163. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/maxscript.ini +0 -0
  164. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/mel.ini +0 -0
  165. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/mu.ini +0 -0
  166. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/nsi.ini +0 -0
  167. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/perl.ini +0 -0
  168. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/puppet.ini +0 -0
  169. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/python.ini +0 -0
  170. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/ruby.ini +0 -0
  171. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/sql.ini +0 -0
  172. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/xml.ini +0 -0
  173. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/config/yaml.ini +0 -0
  174. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lang/language.py +0 -0
  175. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/__init__.py +0 -0
  176. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/cpplexer.py +0 -0
  177. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/javascriptlexer.py +0 -0
  178. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/maxscriptlexer.py +0 -0
  179. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/mellexer.py +0 -0
  180. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/mulexer.py +0 -0
  181. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/lexers/pythonlexer.py +0 -0
  182. {preditor-2.2.0 → preditor-2.4.0}/preditor/scintilla/ui/finddialog.ui +0 -0
  183. {preditor-2.2.0 → preditor-2.4.0}/preditor/settings.py +0 -0
  184. {preditor-2.2.0 → preditor-2.4.0}/preditor/stream/__init__.py +0 -0
  185. {preditor-2.2.0 → preditor-2.4.0}/preditor/stream/console_handler.py +0 -0
  186. {preditor-2.2.0 → preditor-2.4.0}/preditor/stream/manager.py +0 -0
  187. {preditor-2.2.0 → preditor-2.4.0}/preditor/streamhandler_helper.py +0 -0
  188. {preditor-2.2.0 → preditor-2.4.0}/preditor/utils/__init__.py +0 -0
  189. {preditor-2.2.0 → preditor-2.4.0}/preditor/utils/call_stack.py +0 -0
  190. {preditor-2.2.0 → preditor-2.4.0}/preditor/utils/cute.py +0 -0
  191. {preditor-2.2.0 → preditor-2.4.0}/preditor/utils/stylesheets.py +0 -0
  192. {preditor-2.2.0 → preditor-2.4.0}/preditor/utils/text_search.py +0 -0
  193. {preditor-2.2.0 → preditor-2.4.0}/preditor/weakref.py +0 -0
  194. {preditor-2.2.0 → preditor-2.4.0}/pyproject.toml +0 -0
  195. {preditor-2.2.0 → preditor-2.4.0}/requirements-cli.txt +0 -0
  196. {preditor-2.2.0 → preditor-2.4.0}/requirements-dev.txt +0 -0
  197. {preditor-2.2.0 → preditor-2.4.0}/requirements-qsci5.txt +0 -0
  198. {preditor-2.2.0 → preditor-2.4.0}/requirements-qsci6.txt +0 -0
  199. {preditor-2.2.0 → preditor-2.4.0}/requirements-shortcut.txt +0 -0
  200. {preditor-2.2.0 → preditor-2.4.0}/requirements.txt +0 -0
  201. {preditor-2.2.0 → preditor-2.4.0}/setup.cfg +0 -0
  202. {preditor-2.2.0 → preditor-2.4.0}/tox.ini +0 -0
@@ -11,12 +11,12 @@ jobs:
11
11
 
12
12
  steps:
13
13
  - name: Checkout code
14
- uses: actions/checkout@v4
14
+ uses: actions/checkout@v6
15
15
  with:
16
16
  fetch-depth: 0
17
17
 
18
18
  - name: Setup Python
19
- uses: actions/setup-python@v5
19
+ uses: actions/setup-python@v6
20
20
  with:
21
21
  python-version: "3.x"
22
22
 
@@ -31,7 +31,7 @@ jobs:
31
31
 
32
32
  # Upload the built pip packages so we can inspect them
33
33
  - name: Upload packages.
34
- uses: actions/upload-artifact@v4
34
+ uses: actions/upload-artifact@v7
35
35
  with:
36
36
  name: pip-packages
37
37
  path: |
@@ -17,10 +17,10 @@ jobs:
17
17
 
18
18
  steps:
19
19
  - name: Checkout code
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@v6
21
21
 
22
22
  - name: Setup Python
23
- uses: actions/setup-python@v5
23
+ uses: actions/setup-python@v6
24
24
  with:
25
25
  python-version: "3.11"
26
26
 
@@ -60,10 +60,10 @@ jobs:
60
60
 
61
61
  steps:
62
62
  - name: Checkout code
63
- uses: actions/checkout@v4
63
+ uses: actions/checkout@v6
64
64
 
65
65
  - name: Setup Python
66
- uses: actions/setup-python@v5
66
+ uses: actions/setup-python@v6
67
67
  with:
68
68
  python-version: ${{ matrix.python }}
69
69
 
@@ -77,7 +77,7 @@ jobs:
77
77
  tox -e begin,py -- --tb short
78
78
 
79
79
  - name: Upload coverage
80
- uses: actions/upload-artifact@v4
80
+ uses: actions/upload-artifact@v7
81
81
  with:
82
82
  name: coverage-${{ matrix.os }}-${{ matrix.python }}
83
83
  path: .coverage/*
@@ -97,10 +97,10 @@ jobs:
97
97
  runs-on: ubuntu-latest
98
98
  steps:
99
99
  - name: Checkout code
100
- uses: actions/checkout@v4
100
+ uses: actions/checkout@v6
101
101
 
102
102
  - name: Setup Python
103
- uses: actions/setup-python@v5
103
+ uses: actions/setup-python@v6
104
104
  with:
105
105
  python-version: "3.x"
106
106
 
@@ -115,7 +115,7 @@ jobs:
115
115
  tox -e begin
116
116
 
117
117
  - name: Download coverage artifacts
118
- uses: actions/download-artifact@v4
118
+ uses: actions/download-artifact@v8
119
119
  with:
120
120
  path: .coverage/
121
121
  pattern: coverage-*
@@ -136,7 +136,7 @@ jobs:
136
136
  # python -m coverage report --fail-under=100
137
137
 
138
138
  - name: Upload HTML report if check failed.
139
- uses: actions/upload-artifact@v4
139
+ uses: actions/upload-artifact@v7
140
140
  with:
141
141
  name: html-report
142
142
  path: htmlcov
@@ -160,12 +160,12 @@ jobs:
160
160
 
161
161
  steps:
162
162
  - name: Checkout code
163
- uses: actions/checkout@v4
163
+ uses: actions/checkout@v6
164
164
  with:
165
165
  fetch-depth: 0
166
166
 
167
167
  - name: Setup Python
168
- uses: actions/setup-python@v5
168
+ uses: actions/setup-python@v6
169
169
  with:
170
170
  python-version: "3.x"
171
171
 
@@ -179,7 +179,7 @@ jobs:
179
179
  python -m build --wheel --sdist
180
180
 
181
181
  - name: Upload packages.
182
- uses: actions/upload-artifact@v4
182
+ uses: actions/upload-artifact@v7
183
183
  with:
184
184
  name: pip-packages
185
185
  path: |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PrEditor
3
- Version: 2.2.0
3
+ Version: 2.4.0
4
4
  Summary: A python REPL and Editor and console based on Qt.
5
5
  Author-email: Blur Studio <opensource@blur.com>
6
6
  License: LGPL-3.0
@@ -262,6 +262,37 @@ or add menu items. When using this plugin, make sure to use the
262
262
  to the LoggingLevelButton's handlers sub-menus. This allows you to install a
263
263
  handler instance on a specific logging object.
264
264
 
265
+ # Testing
266
+
267
+ We use [tox](https://tox.wiki/) to run tests across multiple python versions and to run
268
+ linting/formatting checks. This ensures that the code works correctly across all
269
+ supported versions of python.
270
+
271
+ While you can run `pytest` directly, using `tox` is recommended as it ensures all
272
+ dependencies are correctly installed and runs the full suite of checks.
273
+
274
+ To run all tests and checks:
275
+ ```batch
276
+ tox
277
+ ```
278
+
279
+ You can speed up testing by `-p` to make the tests run in parallel.
280
+
281
+ To run only a specific environment (e.g., python 3.11):
282
+ ```batch
283
+ tox -e py311
284
+ ```
285
+
286
+ To run a specific test file or pass arguments to pytest, use `--`:
287
+ ```batch
288
+ tox -e py311 -- tests/test_stream.py
289
+ ```
290
+
291
+ To run only the linting checks:
292
+ ```batch
293
+ tox -e black,flake8,deptry
294
+ ```
295
+
265
296
  # Qt Designer integration
266
297
 
267
298
  PrEditor includes some reusable widgets that are useful to integrate into your
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PrEditor
3
- Version: 2.2.0
3
+ Version: 2.4.0
4
4
  Summary: A python REPL and Editor and console based on Qt.
5
5
  Author-email: Blur Studio <opensource@blur.com>
6
6
  License: LGPL-3.0
@@ -262,6 +262,37 @@ or add menu items. When using this plugin, make sure to use the
262
262
  to the LoggingLevelButton's handlers sub-menus. This allows you to install a
263
263
  handler instance on a specific logging object.
264
264
 
265
+ # Testing
266
+
267
+ We use [tox](https://tox.wiki/) to run tests across multiple python versions and to run
268
+ linting/formatting checks. This ensures that the code works correctly across all
269
+ supported versions of python.
270
+
271
+ While you can run `pytest` directly, using `tox` is recommended as it ensures all
272
+ dependencies are correctly installed and runs the full suite of checks.
273
+
274
+ To run all tests and checks:
275
+ ```batch
276
+ tox
277
+ ```
278
+
279
+ You can speed up testing by `-p` to make the tests run in parallel.
280
+
281
+ To run only a specific environment (e.g., python 3.11):
282
+ ```batch
283
+ tox -e py311
284
+ ```
285
+
286
+ To run a specific test file or pass arguments to pytest, use `--`:
287
+ ```batch
288
+ tox -e py311 -- tests/test_stream.py
289
+ ```
290
+
291
+ To run only the linting checks:
292
+ ```batch
293
+ tox -e black,flake8,deptry
294
+ ```
295
+
265
296
  # Qt Designer integration
266
297
 
267
298
  PrEditor includes some reusable widgets that are useful to integrate into your
@@ -216,6 +216,37 @@ or add menu items. When using this plugin, make sure to use the
216
216
  to the LoggingLevelButton's handlers sub-menus. This allows you to install a
217
217
  handler instance on a specific logging object.
218
218
 
219
+ # Testing
220
+
221
+ We use [tox](https://tox.wiki/) to run tests across multiple python versions and to run
222
+ linting/formatting checks. This ensures that the code works correctly across all
223
+ supported versions of python.
224
+
225
+ While you can run `pytest` directly, using `tox` is recommended as it ensures all
226
+ dependencies are correctly installed and runs the full suite of checks.
227
+
228
+ To run all tests and checks:
229
+ ```batch
230
+ tox
231
+ ```
232
+
233
+ You can speed up testing by `-p` to make the tests run in parallel.
234
+
235
+ To run only a specific environment (e.g., python 3.11):
236
+ ```batch
237
+ tox -e py311
238
+ ```
239
+
240
+ To run a specific test file or pass arguments to pytest, use `--`:
241
+ ```batch
242
+ tox -e py311 -- tests/test_stream.py
243
+ ```
244
+
245
+ To run only the linting checks:
246
+ ```batch
247
+ tox -e black,flake8,deptry
248
+ ```
249
+
219
250
  # Qt Designer integration
220
251
 
221
252
  PrEditor includes some reusable widgets that are useful to integrate into your
@@ -8,7 +8,7 @@ from fractions import Fraction
8
8
  from typing import Optional
9
9
 
10
10
  from Qt import QtCompat
11
- from Qt.QtCore import Property, Qt
11
+ from Qt.QtCore import Property, Qt, QTimer
12
12
  from Qt.QtGui import (
13
13
  QColor,
14
14
  QFontMetrics,
@@ -308,9 +308,9 @@ class ConsoleBase(QTextEdit):
308
308
  workbox = self.controller.workbox_for_name(name)
309
309
  if not workbox:
310
310
  return None
311
- if lineNum > workbox.lines():
311
+ if lineNum > workbox.__num_lines__():
312
312
  return None
313
- txt = workbox.text(lineNum).strip() + "\n"
313
+ txt = workbox.__text_part__(lineNum=lineNum).strip() + "\n"
314
314
  return txt
315
315
 
316
316
  def init_actions(self):
@@ -514,8 +514,10 @@ class ConsoleBase(QTextEdit):
514
514
  if not self._first_show:
515
515
  return False
516
516
 
517
- # Configure the stream callbacks if enabled
518
- self.update_streams()
517
+ # Configure the stream callbacks if enabled. Delay calling these until
518
+ # the UI has been fully shown. This is prevents some DCC's like
519
+ # Houdini 21.0(possibly Qt6) from segfaulting.
520
+ QTimer.singleShot(0, self.update_streams)
519
521
 
520
522
  # Redefine highlight variables now that stylesheet may have been updated
521
523
  self.codeHighlighter().defineHighlightVariables()
@@ -375,6 +375,9 @@ class GroupTabWidget(OneTabWidget):
375
375
  missing_name = f"{group_name}/{name}"
376
376
  workboxes_missing_id.append(missing_name)
377
377
  continue
378
+ else:
379
+ # If only the tempfile is set, use it as the workbox_id
380
+ workbox_id = Path(tempfile).stem
378
381
 
379
382
  orphaned_by_instance = tab.get('orphaned_by_instance', False)
380
383
 
@@ -389,7 +392,7 @@ class GroupTabWidget(OneTabWidget):
389
392
 
390
393
  # There is a file on disk, add the tab, creating the group
391
394
  # tab if it hasn't already been created.
392
- prefs = dict(
395
+ localprefs = dict(
393
396
  workbox_id=workbox_id,
394
397
  filename=filename,
395
398
  backup_file=backup_file,
@@ -398,7 +401,7 @@ class GroupTabWidget(OneTabWidget):
398
401
  tempfile=tempfile,
399
402
  )
400
403
  tab_widget, editor = self.add_new_tab(
401
- group_name, title=name, prefs=prefs
404
+ group_name, title=name, prefs=localprefs
402
405
  )
403
406
 
404
407
  editor.__set_last_workbox_name__(editor.__workbox_name__())
@@ -897,7 +897,13 @@ class LoggerWindow(Window):
897
897
 
898
898
  # Present a QFontDialog for user to choose a font
899
899
  title = "Pick a {} font. Current font is: {}".format(kind, curFontFamily)
900
- newFont, okClicked = QFontDialog.getFont(origFont, self, title, options=options)
900
+ fontReturn = QFontDialog.getFont(origFont, self, title, options=options)
901
+
902
+ # QFontDialog.getFont returns a different order for Qt5 vs Qt6
903
+ if isinstance(fontReturn[0], bool):
904
+ okClicked, newFont = fontReturn
905
+ else:
906
+ newFont, okClicked = fontReturn
901
907
 
902
908
  if okClicked:
903
909
  if doGui:
@@ -1327,7 +1333,16 @@ class LoggerWindow(Window):
1327
1333
  """Clears the console before executing all workbox code"""
1328
1334
  if self.uiClearBeforeRunningCHK.isChecked():
1329
1335
  self.clearLog()
1330
- self.current_workbox().__exec_all__()
1336
+ workbox = self.current_workbox()
1337
+ if workbox is None:
1338
+ # If the user has not picked the workbox editor class but tries to use
1339
+ # the shortcut for them, raise a user friendly warning.
1340
+ raise RuntimeError(
1341
+ "You must choose an Editor Class in the workbox section before "
1342
+ "you can run code from it. (To run console code don't use Shift "
1343
+ "or Ctrl when pressing Return.)"
1344
+ )
1345
+ workbox.__exec_all__()
1331
1346
 
1332
1347
  if self.uiAutoPromptCHK.isChecked():
1333
1348
  console = self.console()
@@ -294,7 +294,7 @@ def get_prefs_updates():
294
294
  updates (dict): The dict of defined updates
295
295
  """
296
296
  updates = {}
297
- path = resourcePath(r"pref_updates\pref_updates.json")
297
+ path = resourcePath("pref_updates/pref_updates.json")
298
298
  try:
299
299
  updates = utils.Json(path).load()
300
300
  except (FileNotFoundError, json.decoder.JSONDecodeError):
@@ -22,4 +22,4 @@ bdev_path_temp = /tmp/
22
22
  bdev_path_blur = $HOME/.blur
23
23
  bdev_path_prefs_shared = $BDEV_PATH_PREFS
24
24
  bdev_path_prefs = $BDEV_PATH_BLUR/userprefs
25
- bdev_cmd_browse = nemo %(filepath)s
25
+ bdev_cmd_browse = xdg-open %(filepath)s
@@ -104,6 +104,10 @@ class Director(io.TextIOWrapper):
104
104
  raw = _DirectorBuffer(manager, state, old_stream, name)
105
105
  buffer = io.BufferedWriter(raw)
106
106
 
107
+ # Disable newline translation in this TextIOWrapper so that it doesn't
108
+ # double up on Windows (where the old_stream will likely also do translation)
109
+ kwargs.setdefault("newline", "")
110
+
107
111
  super().__init__(buffer, encoding="utf-8", write_through=True, *args, **kwargs)
108
112
 
109
113
  def __repr__(self):
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.2.0'
32
- __version_tuple__ = version_tuple = (2, 2, 0)
31
+ __version__ = version = '2.4.0'
32
+ __version_tuple__ = version_tuple = (2, 4, 0)
33
33
 
34
- __commit_id__ = commit_id = 'g78a8e2938'
34
+ __commit_id__ = commit_id = 'g42f5e5010'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes