pyqttoolkit 0.9.0__tar.gz → 0.9.1__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 (144) hide show
  1. pyqttoolkit-0.9.1/PKG-INFO +69 -0
  2. pyqttoolkit-0.9.1/README.md +27 -0
  3. pyqttoolkit-0.9.1/pyproject.toml +3 -0
  4. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/_version.py +3 -3
  5. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/scripting/script_runner.py +4 -3
  6. pyqttoolkit-0.9.1/pyqttoolkit.egg-info/PKG-INFO +69 -0
  7. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit.egg-info/SOURCES.txt +1 -0
  8. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit.egg-info/requires.txt +4 -4
  9. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/setup.py +6 -4
  10. pyqttoolkit-0.9.0/PKG-INFO +0 -45
  11. pyqttoolkit-0.9.0/README.md +0 -3
  12. pyqttoolkit-0.9.0/pyqttoolkit.egg-info/PKG-INFO +0 -45
  13. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/LICENSE.txt +0 -0
  14. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/LICENSE_SHORT +0 -0
  15. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/MANIFEST.in +0 -0
  16. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/__init__.py +0 -0
  17. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/application/__init__.py +0 -0
  18. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/application/application.py +0 -0
  19. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/application/garbage_collector.py +0 -0
  20. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/colors/__init__.py +0 -0
  21. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/__init__.py +0 -0
  22. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/base.py +0 -0
  23. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/composite.py +0 -0
  24. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/default.py +0 -0
  25. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/environment.py +0 -0
  26. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/multi_json_file.py +0 -0
  27. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/with_signal.py +0 -0
  28. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/config/with_value_changed.py +0 -0
  29. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/__init__.py +0 -0
  30. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/bits.py +0 -0
  31. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/cache.py +0 -0
  32. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/interval.py +0 -0
  33. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/message.py +0 -0
  34. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/data/names.py +0 -0
  35. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/datetime/__init__.py +0 -0
  36. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/datetime/datetime.py +0 -0
  37. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/datetime/qdatetime.py +0 -0
  38. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/dependencies/__init__.py +0 -0
  39. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/errors/__init__.py +0 -0
  40. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/exceptions/__init__.py +0 -0
  41. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/filesystem/__init__.py +0 -0
  42. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/logs/__init__.py +0 -0
  43. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/metadata/__init__.py +0 -0
  44. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/metadata/dataframe_metadata_manager.py +0 -0
  45. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/metadata/dict_metadata_manager.py +0 -0
  46. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/metadata/id_generator.py +0 -0
  47. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/metadata/metadata_manager_base.py +0 -0
  48. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/__init__.py +0 -0
  49. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/code_text.py +0 -0
  50. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/dataframetable.py +0 -0
  51. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/dictpropertytree.py +0 -0
  52. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/dicttable.py +0 -0
  53. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/json_text.py +0 -0
  54. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/list_model.py +0 -0
  55. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/module.py +0 -0
  56. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/roles.py +0 -0
  57. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/series_data.py +0 -0
  58. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/span.py +0 -0
  59. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/models/validation.py +0 -0
  60. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/__init__.py +0 -0
  61. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/events/__init__.py +0 -0
  62. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/events/add_signal.py +0 -0
  63. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/events/module_opening.py +0 -0
  64. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/events/rejectable.py +0 -0
  65. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/launcher_config.py +0 -0
  66. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/modules/module.py +0 -0
  67. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/properties/__init__.py +0 -0
  68. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/properties/auto.py +0 -0
  69. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/properties/throttled.py +0 -0
  70. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/scripting/__init__.py +0 -0
  71. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/scripting/script_context.py +0 -0
  72. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/scripting/script_template.py +0 -0
  73. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/__init__.py +0 -0
  74. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/autosave.py +0 -0
  75. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/email.py +0 -0
  76. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/event_registry.py +0 -0
  77. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/file_dialog.py +0 -0
  78. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/hotkey_manager.py +0 -0
  79. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/link_manager.py +0 -0
  80. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/message_board.py +0 -0
  81. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/module_service.py +0 -0
  82. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/object_converter.py +0 -0
  83. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/project_updater.py +0 -0
  84. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/task_runner.py +0 -0
  85. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/theme_manager.py +0 -0
  86. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/services/tool_window_service.py +0 -0
  87. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/viewmanagers/__init__.py +0 -0
  88. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/viewmanagers/tool.py +0 -0
  89. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/__init__.py +0 -0
  90. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/bulk_value_selector.py +0 -0
  91. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/check_box.py +0 -0
  92. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/code/__init__.py +0 -0
  93. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/code/code_edit.py +0 -0
  94. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/code/python_syntax.py +0 -0
  95. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/combo_box.py +0 -0
  96. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/count_selector.py +0 -0
  97. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/datetime.py +0 -0
  98. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/datetime_range_selector.py +0 -0
  99. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/default_text_line_edit.py +0 -0
  100. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/delegates.py +0 -0
  101. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/dtype_edit.py +0 -0
  102. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/editable_combo_box.py +0 -0
  103. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/file_selector.py +0 -0
  104. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/icon.py +0 -0
  105. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/icon_button.py +0 -0
  106. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/json_edit.py +0 -0
  107. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/labelled.py +0 -0
  108. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/__init__.py +0 -0
  109. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/collabsible.py +0 -0
  110. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/group_box.py +0 -0
  111. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/group_panel.py +0 -0
  112. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/lines.py +0 -0
  113. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/layout/link.py +0 -0
  114. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/line_edit.py +0 -0
  115. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/linkable.py +0 -0
  116. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/list_view.py +0 -0
  117. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/main_window.py +0 -0
  118. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/metadata_selector.py +0 -0
  119. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/modulewindow.py +0 -0
  120. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/__init__.py +0 -0
  121. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/legend_control.py +0 -0
  122. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/matplotlib/__init__.py +0 -0
  123. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/matplotlib/base.py +0 -0
  124. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/matplotlib/colorbar.py +0 -0
  125. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/matplotlib/colormap.py +0 -0
  126. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/matplotlib/font.py +0 -0
  127. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/plot_options.py +0 -0
  128. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/plot_toolbar_options.py +0 -0
  129. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/size.py +0 -0
  130. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/tool_type.py +0 -0
  131. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/plot/toolbar.py +0 -0
  132. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/popout.py +0 -0
  133. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/popup.py +0 -0
  134. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/property_tree.py +0 -0
  135. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/shrunk_push_button.py +0 -0
  136. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/steppable_combo_box.py +0 -0
  137. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/styleable.py +0 -0
  138. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/table.py +0 -0
  139. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/text_edit.py +0 -0
  140. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit/views/tool_window.py +0 -0
  141. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit.egg-info/dependency_links.txt +0 -0
  142. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/pyqttoolkit.egg-info/top_level.txt +0 -0
  143. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/setup.cfg +0 -0
  144. {pyqttoolkit-0.9.0 → pyqttoolkit-0.9.1}/versioneer.py +0 -0
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyqttoolkit
3
+ Version: 0.9.1
4
+ Summary: A toolkit for PyQt 5
5
+ Home-page: https://github.com/BitBloomTech/pyqttoolkit
6
+ Author: Bitbloom Ltd
7
+ Author-email: info@bitbloom.tech
8
+ License: GPLv3
9
+ Platform: any
10
+ Requires-Python: >=3.14
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE.txt
13
+ License-File: LICENSE_SHORT
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: jinja2>=3.1.6
16
+ Requires-Dist: pandas
17
+ Requires-Dist: appdirs
18
+ Provides-Extra: test
19
+ Requires-Dist: tox>=4; extra == "test"
20
+ Requires-Dist: pytest; extra == "test"
21
+ Requires-Dist: pytest-cov; extra == "test"
22
+ Requires-Dist: pytest-xvfb; extra == "test"
23
+ Requires-Dist: pytest-asyncio; extra == "test"
24
+ Requires-Dist: pytest-qt; extra == "test"
25
+ Provides-Extra: publish
26
+ Requires-Dist: build>=1.6.1; extra == "publish"
27
+ Requires-Dist: twine>=7.0.0; extra == "publish"
28
+ Provides-Extra: ui
29
+ Requires-Dist: pyqt5; extra == "ui"
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: description
33
+ Dynamic: description-content-type
34
+ Dynamic: home-page
35
+ Dynamic: license
36
+ Dynamic: license-file
37
+ Dynamic: platform
38
+ Dynamic: provides-extra
39
+ Dynamic: requires-dist
40
+ Dynamic: requires-python
41
+ Dynamic: summary
42
+
43
+ # PyQtToolkit
44
+
45
+ A toolkit for PyQt
46
+
47
+ ## Development and packaging
48
+
49
+ Use Python 3.14 or newer. Install the optional Qt bindings when developing UI
50
+ features; installing the base package does not install PyQt5.
51
+
52
+ ```sh
53
+ python -m venv .venv
54
+ . .venv/bin/activate
55
+ python -m pip install --upgrade pip
56
+ python -m pip install '.[ui,test,publish]'
57
+ python -m tox -e py314
58
+ python -m build
59
+ python -m twine check --strict dist/*
60
+ ```
61
+
62
+ The isolated build backend uses setuptools and the bundled Versioneer code to
63
+ produce a wheel and source distribution. Build from a Git checkout or an unpacked
64
+ source distribution so the release version can be determined. The `publish` extra
65
+ provides the build and upload tools; it is not needed by library consumers.
66
+
67
+ The tox environment runs the full Qt test suite offscreen, including the task-runner
68
+ tests, and checks package license headers. See [the validation report](docs/dependency-validation.md)
69
+ for tested dependency versions, platform limits and source-review boundaries.
@@ -0,0 +1,27 @@
1
+ # PyQtToolkit
2
+
3
+ A toolkit for PyQt
4
+
5
+ ## Development and packaging
6
+
7
+ Use Python 3.14 or newer. Install the optional Qt bindings when developing UI
8
+ features; installing the base package does not install PyQt5.
9
+
10
+ ```sh
11
+ python -m venv .venv
12
+ . .venv/bin/activate
13
+ python -m pip install --upgrade pip
14
+ python -m pip install '.[ui,test,publish]'
15
+ python -m tox -e py314
16
+ python -m build
17
+ python -m twine check --strict dist/*
18
+ ```
19
+
20
+ The isolated build backend uses setuptools and the bundled Versioneer code to
21
+ produce a wheel and source distribution. Build from a Git checkout or an unpacked
22
+ source distribution so the release version can be determined. The `publish` extra
23
+ provides the build and upload tools; it is not needed by library consumers.
24
+
25
+ The tox environment runs the full Qt test suite offscreen, including the task-runner
26
+ tests, and checks package license headers. See [the validation report](docs/dependency-validation.md)
27
+ for tested dependency versions, platform limits and source-review boundaries.
@@ -0,0 +1,3 @@
1
+ [build-system]
2
+ requires = ["setuptools>=83"]
3
+ build-backend = "setuptools.build_meta"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-07-01T10:30:05+0000",
11
+ "date": "2026-10-20T09:25:30+0100",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "b1ba30656aa9ca36005ade1db4f14f251f5cc51b",
15
- "version": "0.9.0"
14
+ "full-revisionid": "06c8bebf565d6ca91beb9a0fb7d8b171ebfd80fc",
15
+ "version": "0.9.1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -73,9 +73,10 @@ class ScriptRunner:
73
73
  self._context = context
74
74
  with redirect_output(self._context, self._skip_empty_output_lines):
75
75
  # Use one namespace so functions defined by the script can
76
- # resolve each other recursively through their globals.
77
- namespace = self._globals(context)
78
- namespace.update(context.locals)
76
+ # resolve each other recursively through their globals. Add
77
+ # runner globals last so context locals cannot replace
78
+ # protected entries such as __builtins__.
79
+ namespace = {**context.locals, **self._globals(context)}
79
80
  #pylint: disable=exec-used
80
81
  exec(code, namespace, namespace)
81
82
  #pylint: enable=exec-used
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyqttoolkit
3
+ Version: 0.9.1
4
+ Summary: A toolkit for PyQt 5
5
+ Home-page: https://github.com/BitBloomTech/pyqttoolkit
6
+ Author: Bitbloom Ltd
7
+ Author-email: info@bitbloom.tech
8
+ License: GPLv3
9
+ Platform: any
10
+ Requires-Python: >=3.14
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE.txt
13
+ License-File: LICENSE_SHORT
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: jinja2>=3.1.6
16
+ Requires-Dist: pandas
17
+ Requires-Dist: appdirs
18
+ Provides-Extra: test
19
+ Requires-Dist: tox>=4; extra == "test"
20
+ Requires-Dist: pytest; extra == "test"
21
+ Requires-Dist: pytest-cov; extra == "test"
22
+ Requires-Dist: pytest-xvfb; extra == "test"
23
+ Requires-Dist: pytest-asyncio; extra == "test"
24
+ Requires-Dist: pytest-qt; extra == "test"
25
+ Provides-Extra: publish
26
+ Requires-Dist: build>=1.6.1; extra == "publish"
27
+ Requires-Dist: twine>=7.0.0; extra == "publish"
28
+ Provides-Extra: ui
29
+ Requires-Dist: pyqt5; extra == "ui"
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: description
33
+ Dynamic: description-content-type
34
+ Dynamic: home-page
35
+ Dynamic: license
36
+ Dynamic: license-file
37
+ Dynamic: platform
38
+ Dynamic: provides-extra
39
+ Dynamic: requires-dist
40
+ Dynamic: requires-python
41
+ Dynamic: summary
42
+
43
+ # PyQtToolkit
44
+
45
+ A toolkit for PyQt
46
+
47
+ ## Development and packaging
48
+
49
+ Use Python 3.14 or newer. Install the optional Qt bindings when developing UI
50
+ features; installing the base package does not install PyQt5.
51
+
52
+ ```sh
53
+ python -m venv .venv
54
+ . .venv/bin/activate
55
+ python -m pip install --upgrade pip
56
+ python -m pip install '.[ui,test,publish]'
57
+ python -m tox -e py314
58
+ python -m build
59
+ python -m twine check --strict dist/*
60
+ ```
61
+
62
+ The isolated build backend uses setuptools and the bundled Versioneer code to
63
+ produce a wheel and source distribution. Build from a Git checkout or an unpacked
64
+ source distribution so the release version can be determined. The `publish` extra
65
+ provides the build and upload tools; it is not needed by library consumers.
66
+
67
+ The tox environment runs the full Qt test suite offscreen, including the task-runner
68
+ tests, and checks package license headers. See [the validation report](docs/dependency-validation.md)
69
+ for tested dependency versions, platform limits and source-review boundaries.
@@ -2,6 +2,7 @@ LICENSE.txt
2
2
  LICENSE_SHORT
3
3
  MANIFEST.in
4
4
  README.md
5
+ pyproject.toml
5
6
  setup.cfg
6
7
  setup.py
7
8
  versioneer.py
@@ -1,14 +1,14 @@
1
1
  matplotlib
2
- jinja2
2
+ jinja2>=3.1.6
3
3
  pandas
4
4
  appdirs
5
5
 
6
6
  [publish]
7
- setuptools
8
- twine
7
+ build>=1.6.1
8
+ twine>=7.0.0
9
9
 
10
10
  [test]
11
- tox
11
+ tox>=4
12
12
  pytest
13
13
  pytest-cov
14
14
  pytest-xvfb
@@ -1,6 +1,9 @@
1
1
  from setuptools import setup, find_packages
2
2
  from os import path
3
+ import sys
3
4
 
5
+ # The build backend may execute setup.py without the source root on sys.path.
6
+ sys.path.insert(0, path.abspath(path.dirname(__file__)))
4
7
  import versioneer
5
8
 
6
9
  PACKAGE_NAME = 'pyqttoolkit'
@@ -12,13 +15,13 @@ with open(path.join(_here, 'README.md')) as fp:
12
15
 
13
16
  install_requires = [
14
17
  'matplotlib',
15
- 'jinja2',
18
+ 'jinja2>=3.1.6',
16
19
  'pandas',
17
20
  'appdirs'
18
21
  ]
19
22
 
20
23
  tests_require = [
21
- 'tox',
24
+ 'tox>=4',
22
25
  'pytest',
23
26
  'pytest-cov',
24
27
  'pytest-xvfb',
@@ -28,14 +31,13 @@ tests_require = [
28
31
 
29
32
  extras_require = {
30
33
  'test': tests_require,
31
- 'publish': ['setuptools', 'twine'],
34
+ 'publish': ['build>=1.6.1', 'twine>=7.0.0'],
32
35
  'ui': ['pyqt5']
33
36
  }
34
37
 
35
38
  setup(
36
39
  name=PACKAGE_NAME,
37
40
  install_requires=install_requires,
38
- tests_require=tests_require,
39
41
  extras_require=extras_require,
40
42
  packages=find_packages(exclude=('tests*',)),
41
43
  cmdclass=versioneer.get_cmdclass(),
@@ -1,45 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: pyqttoolkit
3
- Version: 0.9.0
4
- Summary: A toolkit for PyQt 5
5
- Home-page: https://github.com/BitBloomTech/pyqttoolkit
6
- Author: Bitbloom Ltd
7
- Author-email: info@bitbloom.tech
8
- License: GPLv3
9
- Platform: any
10
- Requires-Python: >=3.14
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE.txt
13
- License-File: LICENSE_SHORT
14
- Requires-Dist: matplotlib
15
- Requires-Dist: jinja2
16
- Requires-Dist: pandas
17
- Requires-Dist: appdirs
18
- Provides-Extra: test
19
- Requires-Dist: tox; extra == "test"
20
- Requires-Dist: pytest; extra == "test"
21
- Requires-Dist: pytest-cov; extra == "test"
22
- Requires-Dist: pytest-xvfb; extra == "test"
23
- Requires-Dist: pytest-asyncio; extra == "test"
24
- Requires-Dist: pytest-qt; extra == "test"
25
- Provides-Extra: publish
26
- Requires-Dist: setuptools; extra == "publish"
27
- Requires-Dist: twine; extra == "publish"
28
- Provides-Extra: ui
29
- Requires-Dist: pyqt5; extra == "ui"
30
- Dynamic: author
31
- Dynamic: author-email
32
- Dynamic: description
33
- Dynamic: description-content-type
34
- Dynamic: home-page
35
- Dynamic: license
36
- Dynamic: license-file
37
- Dynamic: platform
38
- Dynamic: provides-extra
39
- Dynamic: requires-dist
40
- Dynamic: requires-python
41
- Dynamic: summary
42
-
43
- # PyQtToolkit
44
-
45
- A toolkit for PyQt
@@ -1,3 +0,0 @@
1
- # PyQtToolkit
2
-
3
- A toolkit for PyQt
@@ -1,45 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: pyqttoolkit
3
- Version: 0.9.0
4
- Summary: A toolkit for PyQt 5
5
- Home-page: https://github.com/BitBloomTech/pyqttoolkit
6
- Author: Bitbloom Ltd
7
- Author-email: info@bitbloom.tech
8
- License: GPLv3
9
- Platform: any
10
- Requires-Python: >=3.14
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE.txt
13
- License-File: LICENSE_SHORT
14
- Requires-Dist: matplotlib
15
- Requires-Dist: jinja2
16
- Requires-Dist: pandas
17
- Requires-Dist: appdirs
18
- Provides-Extra: test
19
- Requires-Dist: tox; extra == "test"
20
- Requires-Dist: pytest; extra == "test"
21
- Requires-Dist: pytest-cov; extra == "test"
22
- Requires-Dist: pytest-xvfb; extra == "test"
23
- Requires-Dist: pytest-asyncio; extra == "test"
24
- Requires-Dist: pytest-qt; extra == "test"
25
- Provides-Extra: publish
26
- Requires-Dist: setuptools; extra == "publish"
27
- Requires-Dist: twine; extra == "publish"
28
- Provides-Extra: ui
29
- Requires-Dist: pyqt5; extra == "ui"
30
- Dynamic: author
31
- Dynamic: author-email
32
- Dynamic: description
33
- Dynamic: description-content-type
34
- Dynamic: home-page
35
- Dynamic: license
36
- Dynamic: license-file
37
- Dynamic: platform
38
- Dynamic: provides-extra
39
- Dynamic: requires-dist
40
- Dynamic: requires-python
41
- Dynamic: summary
42
-
43
- # PyQtToolkit
44
-
45
- A toolkit for PyQt
File without changes
File without changes
File without changes
File without changes
File without changes