maxson-gui-utils 0.1.2__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 (177) hide show
  1. maxson_gui_utils-0.1.2/LICENSE +10 -0
  2. maxson_gui_utils-0.1.2/MANIFEST.in +4 -0
  3. maxson_gui_utils-0.1.2/PKG-INFO +45 -0
  4. maxson_gui_utils-0.1.2/README.md +18 -0
  5. maxson_gui_utils-0.1.2/pyproject.toml +109 -0
  6. maxson_gui_utils-0.1.2/setup.cfg +4 -0
  7. maxson_gui_utils-0.1.2/src/maxson_gui_utils/VERSION +2 -0
  8. maxson_gui_utils-0.1.2/src/maxson_gui_utils/__init__.py +80 -0
  9. maxson_gui_utils-0.1.2/src/maxson_gui_utils/__main__.py +7 -0
  10. maxson_gui_utils-0.1.2/src/maxson_gui_utils/_version.py +23 -0
  11. maxson_gui_utils-0.1.2/src/maxson_gui_utils/cli.py +152 -0
  12. maxson_gui_utils-0.1.2/src/maxson_gui_utils/config.py +9 -0
  13. maxson_gui_utils-0.1.2/src/maxson_gui_utils/context.py +17 -0
  14. maxson_gui_utils-0.1.2/src/maxson_gui_utils/core.py +3 -0
  15. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/__init__.py +0 -0
  16. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.icns +0 -0
  17. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_128x128.png +0 -0
  18. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_16x16.png +0 -0
  19. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_16x16@2x.png +0 -0
  20. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_256x256.png +0 -0
  21. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_256x256@2x.png +0 -0
  22. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_512x512.png +0 -0
  23. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green.iconset/icon_512x512@2x.png +0 -0
  24. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/max-green_256x256.ico +0 -0
  25. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/water-green.svg +7 -0
  26. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/water-green_1024x1024.png +0 -0
  27. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/icons/water-green_256x256.png +0 -0
  28. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/__init__.py +0 -0
  29. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/border-accent-hover.png +0 -0
  30. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/border-accent.png +0 -0
  31. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/border-basic.png +0 -0
  32. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/border-hover.png +0 -0
  33. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/border-invalid.png +0 -0
  34. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/card.png +0 -0
  35. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-accent.png +0 -0
  36. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-basic.png +0 -0
  37. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-hover.png +0 -0
  38. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-tri-accent.png +0 -0
  39. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-tri-basic.png +0 -0
  40. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-tri-hover.png +0 -0
  41. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-unsel-accent.png +0 -0
  42. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-unsel-basic.png +0 -0
  43. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-unsel-hover.png +0 -0
  44. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/check-unsel-pressed.png +0 -0
  45. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/combo-button-basic.png +0 -0
  46. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/combo-button-focus.png +0 -0
  47. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/combo-button-hover.png +0 -0
  48. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/down.png +0 -0
  49. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/empty.png +0 -0
  50. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/hor-accent.png +0 -0
  51. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/hor-basic.png +0 -0
  52. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/hor-hover.png +0 -0
  53. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/notebook.png +0 -0
  54. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/off-accent.png +0 -0
  55. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/off-basic.png +0 -0
  56. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/off-hover.png +0 -0
  57. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/on-accent.png +0 -0
  58. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/on-basic.png +0 -0
  59. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/on-hover.png +0 -0
  60. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-accent.png +0 -0
  61. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-basic.png +0 -0
  62. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-hover.png +0 -0
  63. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-tri-accent.png +0 -0
  64. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-tri-basic.png +0 -0
  65. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-tri-hover.png +0 -0
  66. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-unsel-accent.png +0 -0
  67. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-unsel-basic.png +0 -0
  68. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-unsel-hover.png +0 -0
  69. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/radio-unsel-pressed.png +0 -0
  70. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/rect-accent-hover.png +0 -0
  71. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/rect-accent.png +0 -0
  72. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/rect-basic.png +0 -0
  73. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/rect-hover.png +0 -0
  74. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/right.png +0 -0
  75. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/scale-hor.png +0 -0
  76. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/scale-vert.png +0 -0
  77. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/separator.png +0 -0
  78. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/sizegrip.png +0 -0
  79. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/spin-button-down-basic.png +0 -0
  80. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/spin-button-down-focus.png +0 -0
  81. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/spin-button-up.png +0 -0
  82. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/tab-accent.png +0 -0
  83. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/tab-basic.png +0 -0
  84. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/tab-hover.png +0 -0
  85. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-hor-accent.png +0 -0
  86. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-hor-basic.png +0 -0
  87. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-hor-hover.png +0 -0
  88. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-vert-accent.png +0 -0
  89. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-vert-basic.png +0 -0
  90. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/thumb-vert-hover.png +0 -0
  91. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/tree-basic.png +0 -0
  92. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/tree-pressed.png +0 -0
  93. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/up.png +0 -0
  94. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/vert-accent.png +0 -0
  95. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/vert-basic.png +0 -0
  96. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark/vert-hover.png +0 -0
  97. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-dark.tcl +536 -0
  98. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/border-accent-hover.png +0 -0
  99. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/border-accent.png +0 -0
  100. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/border-basic.png +0 -0
  101. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/border-hover.png +0 -0
  102. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/border-invalid.png +0 -0
  103. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/card.png +0 -0
  104. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-accent.png +0 -0
  105. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-basic.png +0 -0
  106. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-hover.png +0 -0
  107. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-tri-accent.png +0 -0
  108. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-tri-basic.png +0 -0
  109. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-tri-hover.png +0 -0
  110. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-unsel-accent.png +0 -0
  111. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-unsel-basic.png +0 -0
  112. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-unsel-hover.png +0 -0
  113. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/check-unsel-pressed.png +0 -0
  114. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/combo-button-basic.png +0 -0
  115. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/combo-button-focus.png +0 -0
  116. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/combo-button-hover.png +0 -0
  117. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/down-focus.png +0 -0
  118. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/down.png +0 -0
  119. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/empty.png +0 -0
  120. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/hor-accent.png +0 -0
  121. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/hor-basic.png +0 -0
  122. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/hor-hover.png +0 -0
  123. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/notebook.png +0 -0
  124. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/off-accent.png +0 -0
  125. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/off-basic.png +0 -0
  126. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/off-hover.png +0 -0
  127. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/on-accent.png +0 -0
  128. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/on-basic.png +0 -0
  129. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/on-hover.png +0 -0
  130. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-accent.png +0 -0
  131. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-basic.png +0 -0
  132. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-hover.png +0 -0
  133. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-tri-accent.png +0 -0
  134. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-tri-basic.png +0 -0
  135. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-tri-hover.png +0 -0
  136. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-unsel-accent.png +0 -0
  137. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-unsel-basic.png +0 -0
  138. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-unsel-hover.png +0 -0
  139. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/radio-unsel-pressed.png +0 -0
  140. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/rect-accent-hover.png +0 -0
  141. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/rect-accent.png +0 -0
  142. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/rect-basic.png +0 -0
  143. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/rect-hover.png +0 -0
  144. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/right-focus.png +0 -0
  145. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/right.png +0 -0
  146. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/scale-hor.png +0 -0
  147. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/scale-vert.png +0 -0
  148. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/separator.png +0 -0
  149. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/sizegrip.png +0 -0
  150. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/spin-button-down-basic.png +0 -0
  151. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/spin-button-down-focus.png +0 -0
  152. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/spin-button-up.png +0 -0
  153. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/tab-accent.png +0 -0
  154. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/tab-basic.png +0 -0
  155. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/tab-hover.png +0 -0
  156. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-hor-accent.png +0 -0
  157. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-hor-basic.png +0 -0
  158. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-hor-hover.png +0 -0
  159. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-vert-accent.png +0 -0
  160. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-vert-basic.png +0 -0
  161. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/thumb-vert-hover.png +0 -0
  162. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/tree-basic.png +0 -0
  163. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/tree-pressed.png +0 -0
  164. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/up.png +0 -0
  165. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/vert-accent.png +0 -0
  166. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/vert-basic.png +0 -0
  167. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light/vert-hover.png +0 -0
  168. maxson_gui_utils-0.1.2/src/maxson_gui_utils/data/themes/forest/forest-light.tcl +544 -0
  169. maxson_gui_utils-0.1.2/src/maxson_gui_utils/gui.py +191 -0
  170. maxson_gui_utils-0.1.2/src/maxson_gui_utils/helpers.py +3 -0
  171. maxson_gui_utils-0.1.2/src/maxson_gui_utils/logging_setup.py +177 -0
  172. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/PKG-INFO +45 -0
  173. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/SOURCES.txt +175 -0
  174. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/dependency_links.txt +1 -0
  175. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/entry_points.txt +3 -0
  176. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/requires.txt +4 -0
  177. maxson_gui_utils-0.1.2/src/maxson_gui_utils.egg-info/top_level.txt +1 -0
@@ -0,0 +1,10 @@
1
+ MIT
2
+
3
+ Copyright © 2026 George Clayton Bennett
4
+ https://github.com/City-of-Memphis-Wastewater/maxson-gui-utils/
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
7
+
8
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9
+
10
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,4 @@
1
+ include src/maxson_gui_utils/data/*
2
+ recursive-include src/maxson_gui_utils/data/themes *
3
+ recursive-include src/maxson_gui_utils/data/icons *
4
+
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.4
2
+ Name: maxson-gui-utils
3
+ Version: 0.1.2
4
+ Summary: A Python application.
5
+ Author-email: Your Name <you@example.com>
6
+ Maintainer-email: Your Name <you@example.com>
7
+ License-Expression: MIT
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3 :: Only
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Typing :: Typed
18
+ Classifier: Development Status :: 3 - Alpha
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: dworshak-config>=0.2.8
23
+ Requires-Dist: pyhabitat>=1.3.9
24
+ Requires-Dist: typer>=0.27.0
25
+ Requires-Dist: typer-helptree>=0.2.12
26
+ Dynamic: license-file
27
+
28
+ # maxson-gui-utils
29
+
30
+ Centralized theme and TKinter helpers.
31
+ Used alongside maxson-build-utils.
32
+
33
+ ---
34
+
35
+ ## Helptree
36
+
37
+ See the `maxson-gui-utils` Typer CLI structure.
38
+
39
+ ```
40
+ maxson-gui-utils helptree
41
+ ```
42
+
43
+ <p align="center">
44
+ <img src="https://raw.githubusercontent.com/City-of-Memphis-Wastewater/maxson-gui-utils/main/assets/assets/maxson-gui-utils_v0.1.0_helptree.svg" width="100%" alt="SVG of the CLI helptree">
45
+ </p>
@@ -0,0 +1,18 @@
1
+ # maxson-gui-utils
2
+
3
+ Centralized theme and TKinter helpers.
4
+ Used alongside maxson-build-utils.
5
+
6
+ ---
7
+
8
+ ## Helptree
9
+
10
+ See the `maxson-gui-utils` Typer CLI structure.
11
+
12
+ ```
13
+ maxson-gui-utils helptree
14
+ ```
15
+
16
+ <p align="center">
17
+ <img src="https://raw.githubusercontent.com/City-of-Memphis-Wastewater/maxson-gui-utils/main/assets/assets/maxson-gui-utils_v0.1.0_helptree.svg" width="100%" alt="SVG of the CLI helptree">
18
+ </p>
@@ -0,0 +1,109 @@
1
+ [project]
2
+ name = "maxson-gui-utils"
3
+ dynamic = ["version"]
4
+ description = "A Python application."
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+
8
+ dependencies = [
9
+ "dworshak-config>=0.2.8",
10
+ "pyhabitat>=1.3.9",
11
+ "typer>=0.27.0",
12
+ "typer-helptree>=0.2.12",
13
+ ]
14
+
15
+ license = "MIT"
16
+ license-files = ["LICENSE"]
17
+
18
+ authors = [
19
+ { name = "Your Name", email = "you@example.com" }
20
+ ]
21
+
22
+ maintainers = [
23
+ { name = "Your Name", email = "you@example.com" }
24
+ ]
25
+
26
+ classifiers = [
27
+ "Programming Language :: Python :: 3",
28
+ "Programming Language :: Python :: 3 :: Only",
29
+ "Programming Language :: Python :: 3.10",
30
+ "Programming Language :: Python :: 3.11",
31
+ "Programming Language :: Python :: 3.12",
32
+ "Programming Language :: Python :: 3.13",
33
+ "Programming Language :: Python :: 3.14",
34
+ "Operating System :: OS Independent",
35
+ "Intended Audience :: Developers",
36
+ "Typing :: Typed",
37
+ "Development Status :: 3 - Alpha",
38
+ #"Development Status :: 4 - Beta",
39
+ #"Development Status :: 5 - Production/Stable",
40
+ ]
41
+
42
+ keywords = [
43
+
44
+ ]
45
+
46
+ #[project.urls]
47
+ #Homepage = ""
48
+ #Repository = ""
49
+ #Issues = ""
50
+ #Changelog = ""
51
+
52
+ [project.scripts]
53
+ "maxson-gui-utils" = "maxson_gui_utils.__main__:app"
54
+ "mgu" = "maxson_gui_utils.__main__:app"
55
+
56
+ [dependency-groups]
57
+ test = [
58
+ "pytest>=8.0.0",
59
+ "pytest-cov>=4.1.0",
60
+ ]
61
+ dev = [
62
+ { include-group = "test" },
63
+ "build>=1.3.0",
64
+ "pyinstaller>=6.17.0 ; platform_system == 'Linux' and platform_machine != 'aarch64'",
65
+ "shiv>=1.0.8",
66
+ "ruff>=0.7.0 ; platform_system == 'Linux' and platform_machine != 'aarch64'",
67
+ "maxson-build-utils>=0.1.33",
68
+ ]
69
+
70
+
71
+ [build-system]
72
+ requires = ["setuptools>=64", "wheel"]
73
+ build-backend = "setuptools.build_meta"
74
+
75
+ [tool.uv.sources]
76
+ "maxson-gui-utils" = { path = "src/maxson_gui_utils" }
77
+
78
+ #[tool.setuptools]
79
+ #packages = ["maxson_gui_utils"]
80
+
81
+ [tool.setuptools.packages.find]
82
+ where = ["src"]
83
+
84
+ [tool.setuptools.dynamic]
85
+ version = { file = "src/maxson_gui_utils/VERSION" }
86
+
87
+ [tool.setuptools.package-data]
88
+ "maxson_gui_utils" = [
89
+ "data/*",
90
+ "data/icons/*",
91
+ "data/icons/**/*",
92
+ "data/themes/*",
93
+ "data/themes/**/*",
94
+ ]
95
+
96
+ [tool.maxson-build-utils.names]
97
+ import = "maxson_gui_utils"
98
+ pretty = "Maxson Gui Utils"
99
+
100
+ [tool.maxson-build-utils.pyinstaller]
101
+ mode = "onedir"
102
+ windowed = false
103
+ collect_data_pkgs = ["maxson_gui_utils"]
104
+ collect_binary_pkgs = []
105
+
106
+ [tool.maxson-build-utils.packaging.msix]
107
+ publisher = "CN=806FDEBD-B014-4625-85AE-058C714FC7F2"
108
+ publisher_display_name = "George Clayton Bennett"
109
+ identity_name = "GeorgeClaytonBennett.MaxsonGuiUtils"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,2 @@
1
+ 0.1.2
2
+
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+ # src/maxson_gui_utils/__init__.py
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from ._version import __version__
8
+
9
+ # 1. Clean public-facing mapping
10
+ __all__ = [
11
+ "__version__",
12
+
13
+ "__gui_easteregg_enabled__",
14
+ ]
15
+
16
+
17
+ def _check_easteregg_env() -> bool:
18
+ """Helper to dynamically read environment state at call-time."""
19
+ env_flag = os.environ.get("MGU_GUI_EASTEREGG", "").strip().lower()
20
+ return env_flag in ("true", "1", "yes", "on")
21
+
22
+
23
+ # 2. Fully dynamic attribute routing
24
+ def __getattr__(name: str):
25
+
26
+ # Dynamic boolean evaluation for the breadcrumb attribute
27
+ if name == "__gui_easteregg_enabled__":
28
+ return _check_easteregg_env()
29
+
30
+ # Dynamic lookups for the GUI function invocation
31
+ if name == "start_gui":
32
+
33
+ def _missing_gui():
34
+ raise RuntimeError(
35
+ "start_gui requires pyhabitat and a Tkinter-capable environment"
36
+ )
37
+
38
+ _missing_gui.__name__ = "start_gui"
39
+ _missing_gui.__doc__ = (
40
+ "GUI support is unavailable in this environment."
41
+ )
42
+
43
+ if _check_easteregg_env():
44
+ try:
45
+ import pyhabitat
46
+
47
+ if pyhabitat.tkinter_is_available():
48
+ from .gui import start_gui
49
+
50
+ return start_gui
51
+ except ImportError:
52
+ pass
53
+
54
+ return _missing_gui
55
+
56
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
57
+
58
+
59
+ # 3. Dynamic introspection reflecting runtime changes
60
+ def __dir__():
61
+ exported = list(__all__)
62
+ if _check_easteregg_env():
63
+ exported.append("start_gui")
64
+
65
+ return sorted(
66
+ exported
67
+ + [
68
+ "__builtins__",
69
+ "__cached__",
70
+ "__doc__",
71
+ "__file__",
72
+ "__getattr__",
73
+ "__dir__",
74
+ "__loader__",
75
+ "__name__",
76
+ "__package__",
77
+ "__path__",
78
+ "__spec__",
79
+ ]
80
+ )
@@ -0,0 +1,7 @@
1
+ # src/maxson_gui_utils/__main__.py
2
+ from __future__ import annotations
3
+
4
+ from maxson_gui_utils.cli import app
5
+
6
+ if __name__ == "__main__":
7
+ app()
@@ -0,0 +1,23 @@
1
+
2
+ # src/maxson_gui_utils/_version.py
3
+ from pathlib import Path
4
+ from .context import APP_NAME
5
+ def get_version() -> str:
6
+ try:
7
+ version_file = Path(__file__).parent / "VERSION"
8
+ if version_file.exists():
9
+ return version_file.read_text(encoding="utf-8").strip()
10
+ except Exception:
11
+ pass
12
+
13
+ # Try metadata (Installed)
14
+ try:
15
+ from importlib.metadata import version, PackageNotFoundError
16
+ return version(APP_NAME)
17
+ except (ImportError, PackageNotFoundError):
18
+ pass
19
+
20
+
21
+ return "0.0.0-unknown"
22
+
23
+ __version__ = get_version()
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env python3
2
+ # src/maxson_gui_utils/cli.py
3
+
4
+ from __future__ import annotations
5
+
6
+ import logging
7
+ import os
8
+ import sys
9
+ from pathlib import Path
10
+ import pyhabitat
11
+ import typer
12
+ from typer.models import OptionInfo
13
+ from rich.console import Console
14
+ from typer_helptree import add_typer_helptree
15
+
16
+ from ._version import __version__
17
+ from .context import APP_NAME, DESCRIPTION_STR
18
+ from .logging_setup import (
19
+ configure_logging_all_debug,
20
+ configure_logging_for_application,
21
+ )
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+ console_stderr = Console(stderr=True)
26
+ console_stdout = Console()
27
+
28
+ # Force Rich to always enable colors, even when running from a .pyz bundle.
29
+ os.environ["FORCE_COLOR"] = "1"
30
+
31
+ # Optional but helpful for full terminal feature detection.
32
+ os.environ["TERM"] = "xterm-256color"
33
+
34
+ app = typer.Typer(
35
+ name=APP_NAME,
36
+ help=f"{DESCRIPTION_STR} (v{__version__})",
37
+ add_completion=False,
38
+ invoke_without_command=True,
39
+ no_args_is_help=True,
40
+ context_settings={
41
+ "ignore_unknown_options": True,
42
+ "allow_extra_args": True,
43
+ "help_option_names": ["-h", "--help"],
44
+ },
45
+ )
46
+
47
+
48
+ @app.callback(invoke_without_command=True)
49
+ def main(
50
+ ctx: typer.Context,
51
+ version: bool = typer.Option(
52
+ False,
53
+ "--version",
54
+ "-V",
55
+ help="Show application version and exit.",
56
+ ),
57
+ debug: bool = typer.Option(
58
+ False,
59
+ "--debug",
60
+ "-d",
61
+ help="Enable debug level logs for app.",
62
+ ),
63
+ all_debug: bool = typer.Option(
64
+ False,
65
+ "--all-debug",
66
+ help="Enable debug logs for app AND dependencies.",
67
+ ),
68
+ verbose: bool = typer.Option(
69
+ False,
70
+ "--verbose",
71
+ "-v",
72
+ help="Enable verbose info level logs.",
73
+ ),
74
+ log_file: Path | None = typer.Option(
75
+ None,
76
+ "--log-file",
77
+ help="Custom path to output log file.",
78
+ ),
79
+ ):
80
+ if version:
81
+ typer.echo(__version__)
82
+ raise typer.Exit()
83
+
84
+ if all_debug:
85
+ configure_logging_all_debug()
86
+ else:
87
+ configure_logging_for_application(
88
+ debug=debug,
89
+ verbose=verbose,
90
+ log_to_file=log_file is not None,
91
+ )
92
+
93
+ logger.debug("Executing command: %s", " ".join(sys.argv))
94
+
95
+ if ctx.invoked_subcommand is None and not ctx.resilient_parsing:
96
+ typer.echo(ctx.get_help())
97
+ raise typer.Exit()
98
+
99
+
100
+ add_typer_helptree(
101
+ app=app,
102
+ console=console_stderr,
103
+ version=__version__,
104
+ hidden=False,
105
+ )
106
+
107
+ @app.command(name="gui")
108
+ def gui_command(
109
+ auto_close: int = typer.Option(0,
110
+ "--auto-close", "-c",
111
+ help = "Delay in milliseconds after which the GUI window will close (for automated testing). Use 0 to disable auto-closing.",
112
+ min=0)
113
+ )->None:
114
+ """
115
+ Launch tkinter-based GUI.
116
+ """
117
+ assured_auto_close_value = 0
118
+
119
+ # --- Helper, consistent gui failure message. ---
120
+ def _gui_failure_msg():
121
+ console_stderr.print("[bold red]GUI failed to launch[/bold red]")
122
+ console_stderr.print("Use 'pdflinkcheck analyze CLI' instead.")
123
+ console_stderr.print(f"pyhabitat.tkinter_is_available() = {pyhabitat.tkinter_is_available()}")
124
+ console_stderr.print(f"pyhabitat.on_termux() = {pyhabitat.on_termux()}")
125
+
126
+ if isinstance(auto_close, OptionInfo):
127
+ # Case 1: Called implicitly from main() (pdflinkcheck with no args)
128
+ # We received the metadata object, so use the function's default value (0).
129
+ # We don't need to do anything here since final_auto_close_value is already 0.
130
+ pass
131
+ else:
132
+ # Case 2: Called explicitly by Typer (pdflinkcheck gui -c 3000)
133
+ # Typer has successfully converted the command line argument, and auto_close is an int.
134
+ assured_auto_close_value = int(auto_close)
135
+
136
+ if not pyhabitat.tkinter_is_available():
137
+ _gui_failure_msg()
138
+ return
139
+
140
+ from .gui import start_gui
141
+ start_gui(time_auto_close = assured_auto_close_value)
142
+
143
+ @app.command(name="placeholder")
144
+ def placeholder(
145
+ path: Path = Path("path"),
146
+ ):
147
+ """Placeholder."""
148
+ console_stderr.print(f"{path=}")
149
+
150
+
151
+ if __name__ == "__main__":
152
+ app()
@@ -0,0 +1,9 @@
1
+ # src/maxson_gui_utils/config.py
2
+ from __future__ import annotations
3
+
4
+
5
+ def get_config_mngr():
6
+ from .context import APP_DIR
7
+ from dworshak_config import DworshakConfig
8
+ return DworshakConfig(path=APP_DIR / "config.json")
9
+
@@ -0,0 +1,17 @@
1
+ # src/maxson_gui_utils/context.py
2
+ from __future__ import annotations
3
+
4
+ from pathlib import Path
5
+
6
+ PACKAGE_DIR = Path(__file__).resolve().parent
7
+ SRC_DIR = PACKAGE_DIR.parent
8
+ PROJECT_ROOT = SRC_DIR.parent
9
+
10
+ APP_NAME = "maxson-gui-utils"
11
+ APP_NAME_PRETTY = "Maxson Gui Utils"
12
+ IMPORT_NAME = "maxson_gui_utils"
13
+ SRC_FOLDER_NAME = "maxson_gui_utils"
14
+ DESCRIPTION_STR = "A Python application."
15
+ APP_DIR = Path.home() / ".maxson-gui-utils"
16
+ LOG_FILE_PATH = "/home/oolong/.maxson-gui-utils/maxson-gui-utils.log"
17
+ SERVICE = APP_NAME
@@ -0,0 +1,3 @@
1
+ # src/maxson_gui_utils/core.py
2
+
3
+ from __future__ import annotations
@@ -0,0 +1,7 @@
1
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
2
+
3
+ <svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800px" height="800px" viewBox="0 0 512 512" xml:space="preserve" fill="#1b6333">
4
+
5
+
6
+
7
+