zebra-day 0.3.9__tar.gz → 1.0.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 (207) hide show
  1. zebra_day-1.0.2/MANIFEST.in +25 -0
  2. zebra_day-1.0.2/MODERNIZE.md +76 -0
  3. zebra_day-1.0.2/PKG-INFO +786 -0
  4. {zebra_day-0.3.9 → zebra_day-1.0.2}/README.md +244 -55
  5. zebra_day-1.0.2/pyproject.toml +147 -0
  6. zebra_day-1.0.2/requirements-dev.txt +15 -0
  7. zebra_day-1.0.2/requirements.txt +11 -0
  8. {zebra_day-0.3.9 → zebra_day-1.0.2}/setup.py +14 -2
  9. zebra_day-1.0.2/tests/test_core_functions.py +172 -0
  10. zebra_day-1.0.2/zebra_day/__init__.py +35 -0
  11. zebra_day-1.0.2/zebra_day/cli/__init__.py +240 -0
  12. zebra_day-1.0.2/zebra_day/cli/cognito.py +121 -0
  13. zebra_day-1.0.2/zebra_day/cli/gui.py +255 -0
  14. zebra_day-1.0.2/zebra_day/cli/printer.py +168 -0
  15. zebra_day-1.0.2/zebra_day/cli/template.py +176 -0
  16. zebra_day-1.0.2/zebra_day/etc/label_styles/tube_2inX1inHDv3.zpl +21 -0
  17. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.022846_printer_config.json +1 -0
  18. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.033657_printer_config.json +1 -0
  19. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.039597_printer_config.json +3 -0
  20. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.047295_printer_config.json +1 -0
  21. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.055804_printer_config.json +1 -0
  22. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:50:25.061337_printer_config.json +3 -0
  23. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.073326_printer_config.json +1 -0
  24. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.081950_printer_config.json +1 -0
  25. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.088251_printer_config.json +3 -0
  26. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.096501_printer_config.json +1 -0
  27. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.104767_printer_config.json +1 -0
  28. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.110364_printer_config.json +3 -0
  29. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.118239_printer_config.json +1 -0
  30. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.125950_printer_config.json +1 -0
  31. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.349866_printer_config.json +1 -0
  32. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.361085_printer_config.json +3 -0
  33. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.558323_printer_config.json +1 -0
  34. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:24.565756_printer_config.json +3 -0
  35. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.739070_printer_config.json +16 -0
  36. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.753796_printer_config.json +1 -0
  37. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.760201_printer_config.json +3 -0
  38. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.768747_printer_config.json +1 -0
  39. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.775312_printer_config.json +3 -0
  40. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.782533_printer_config.json +1 -0
  41. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.789287_printer_config.json +1 -0
  42. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.794230_printer_config.json +3 -0
  43. zebra_day-1.0.2/zebra_day/etc/old_printer_config/2026-02-01_01:51:29.800021_printer_config.json +5 -0
  44. zebra_day-1.0.2/zebra_day/etc/printer_config.json +16 -0
  45. zebra_day-1.0.2/zebra_day/etc/tmp_printers0.json +5 -0
  46. zebra_day-1.0.2/zebra_day/etc/tmp_printers374.json +5 -0
  47. zebra_day-1.0.2/zebra_day/etc/tmp_printers383.json +5 -0
  48. zebra_day-1.0.2/zebra_day/etc/tmp_printers450.json +5 -0
  49. zebra_day-1.0.2/zebra_day/etc/tmp_printers504.json +5 -0
  50. zebra_day-1.0.2/zebra_day/etc/tmp_printers608.json +5 -0
  51. zebra_day-1.0.2/zebra_day/etc/tmp_printers657.json +5 -0
  52. zebra_day-1.0.2/zebra_day/etc/tmp_printers838.json +5 -0
  53. zebra_day-1.0.2/zebra_day/etc/tmp_printers839.json +5 -0
  54. zebra_day-1.0.2/zebra_day/etc/tmp_printers933.json +5 -0
  55. zebra_day-1.0.2/zebra_day/etc/tmp_printers957.json +5 -0
  56. zebra_day-1.0.2/zebra_day/exceptions.py +88 -0
  57. zebra_day-1.0.2/zebra_day/files/.hold +0 -0
  58. zebra_day-1.0.2/zebra_day/files/hold +0 -0
  59. zebra_day-1.0.2/zebra_day/files/test_png_17696.png +0 -0
  60. zebra_day-1.0.2/zebra_day/files/test_png_23477.png +0 -0
  61. zebra_day-1.0.2/zebra_day/files/test_png_28157.png +0 -0
  62. zebra_day-1.0.2/zebra_day/files/test_png_35832.png +0 -0
  63. zebra_day-1.0.2/zebra_day/files/test_png_36400.png +0 -0
  64. zebra_day-1.0.2/zebra_day/files/test_png_40816.png +0 -0
  65. zebra_day-1.0.2/zebra_day/files/test_png_49564.png +0 -0
  66. zebra_day-1.0.2/zebra_day/files/test_png_53848.png +0 -0
  67. zebra_day-1.0.2/zebra_day/files/test_png_62542.png +0 -0
  68. zebra_day-1.0.2/zebra_day/files/test_png_91597.png +0 -0
  69. zebra_day-1.0.2/zebra_day/files/test_png_93633.png +0 -0
  70. zebra_day-1.0.2/zebra_day/files/tmpbjo3k7q1.png +0 -0
  71. zebra_day-1.0.2/zebra_day/files/tmpigtr4pwy.png +0 -0
  72. zebra_day-1.0.2/zebra_day/files/zpl_label_tube_2inX1in_2026-02-01_01:51:24.370964.png +0 -0
  73. zebra_day-1.0.2/zebra_day/logging_config.py +74 -0
  74. zebra_day-1.0.2/zebra_day/logs/.hold +0 -0
  75. zebra_day-1.0.2/zebra_day/logs/print_requests.log +2 -0
  76. zebra_day-1.0.2/zebra_day/paths.py +143 -0
  77. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/print_mgr.py +270 -118
  78. zebra_day-1.0.2/zebra_day/static/favicon.svg +20 -0
  79. zebra_day-1.0.2/zebra_day/static/js/zebra_modern.js +172 -0
  80. zebra_day-1.0.2/zebra_day/static/lsmc.css +354 -0
  81. zebra_day-1.0.2/zebra_day/static/zebra_modern.css +771 -0
  82. zebra_day-1.0.2/zebra_day/templates/base.html +36 -0
  83. zebra_day-1.0.2/zebra_day/templates/bpr.html +72 -0
  84. zebra_day-1.0.2/zebra_day/templates/build_new_config.html +36 -0
  85. zebra_day-1.0.2/zebra_day/templates/build_print_request.html +32 -0
  86. zebra_day-1.0.2/zebra_day/templates/chg_ui_style.html +19 -0
  87. zebra_day-1.0.2/zebra_day/templates/edit_template.html +128 -0
  88. zebra_day-1.0.2/zebra_day/templates/edit_zpl.html +37 -0
  89. zebra_day-1.0.2/zebra_day/templates/index.html +82 -0
  90. zebra_day-1.0.2/zebra_day/templates/legacy/base.html +37 -0
  91. zebra_day-1.0.2/zebra_day/templates/legacy/bpr.html +72 -0
  92. zebra_day-1.0.2/zebra_day/templates/legacy/build_new_config.html +36 -0
  93. zebra_day-1.0.2/zebra_day/templates/legacy/build_print_request.html +32 -0
  94. zebra_day-1.0.2/zebra_day/templates/legacy/chg_ui_style.html +19 -0
  95. zebra_day-1.0.2/zebra_day/templates/legacy/edit_template.html +128 -0
  96. zebra_day-1.0.2/zebra_day/templates/legacy/edit_zpl.html +37 -0
  97. zebra_day-1.0.2/zebra_day/templates/legacy/index.html +82 -0
  98. zebra_day-1.0.2/zebra_day/templates/legacy/list_prior_configs.html +24 -0
  99. zebra_day-1.0.2/zebra_day/templates/legacy/print_result.html +30 -0
  100. zebra_day-1.0.2/zebra_day/templates/legacy/printer_details.html +25 -0
  101. zebra_day-1.0.2/zebra_day/templates/legacy/printer_status.html +70 -0
  102. zebra_day-1.0.2/zebra_day/templates/legacy/save_result.html +17 -0
  103. zebra_day-1.0.2/zebra_day/templates/legacy/send_print_request.html +34 -0
  104. zebra_day-1.0.2/zebra_day/templates/legacy/simple_print.html +94 -0
  105. zebra_day-1.0.2/zebra_day/templates/legacy/view_pstation_json.html +29 -0
  106. zebra_day-1.0.2/zebra_day/templates/list_prior_configs.html +24 -0
  107. zebra_day-1.0.2/zebra_day/templates/modern/base.html +98 -0
  108. zebra_day-1.0.2/zebra_day/templates/modern/config.html +141 -0
  109. zebra_day-1.0.2/zebra_day/templates/modern/dashboard.html +160 -0
  110. zebra_day-1.0.2/zebra_day/templates/modern/print_request.html +141 -0
  111. zebra_day-1.0.2/zebra_day/templates/modern/print_result.html +88 -0
  112. zebra_day-1.0.2/zebra_day/templates/modern/printer_detail.html +117 -0
  113. zebra_day-1.0.2/zebra_day/templates/modern/printers.html +133 -0
  114. zebra_day-1.0.2/zebra_day/templates/modern/save_result.html +46 -0
  115. zebra_day-1.0.2/zebra_day/templates/modern/template_editor.html +172 -0
  116. zebra_day-1.0.2/zebra_day/templates/modern/templates.html +122 -0
  117. zebra_day-1.0.2/zebra_day/templates/print_result.html +30 -0
  118. zebra_day-1.0.2/zebra_day/templates/printer_details.html +25 -0
  119. zebra_day-1.0.2/zebra_day/templates/printer_status.html +70 -0
  120. zebra_day-1.0.2/zebra_day/templates/save_result.html +17 -0
  121. zebra_day-1.0.2/zebra_day/templates/send_print_request.html +34 -0
  122. zebra_day-1.0.2/zebra_day/templates/simple_print.html +94 -0
  123. zebra_day-1.0.2/zebra_day/templates/view_pstation_json.html +29 -0
  124. zebra_day-1.0.2/zebra_day/web/__init__.py +9 -0
  125. zebra_day-1.0.2/zebra_day/web/app.py +171 -0
  126. zebra_day-1.0.2/zebra_day/web/auth.py +172 -0
  127. zebra_day-1.0.2/zebra_day/web/middleware.py +159 -0
  128. zebra_day-1.0.2/zebra_day/web/routers/__init__.py +2 -0
  129. zebra_day-1.0.2/zebra_day/web/routers/api.py +163 -0
  130. zebra_day-1.0.2/zebra_day/web/routers/ui.py +1051 -0
  131. zebra_day-1.0.2/zebra_day/zpl_renderer.py +273 -0
  132. zebra_day-1.0.2/zebra_day.egg-info/PKG-INFO +786 -0
  133. zebra_day-1.0.2/zebra_day.egg-info/SOURCES.txt +192 -0
  134. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day.egg-info/entry_points.txt +1 -0
  135. zebra_day-1.0.2/zebra_day.egg-info/requires.txt +34 -0
  136. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day.egg-info/top_level.txt +0 -1
  137. zebra_day-0.3.9/PKG-INFO +0 -14
  138. zebra_day-0.3.9/zebra_day/bin/#print_zpl_from_file.py# +0 -16
  139. zebra_day-0.3.9/zebra_day/bin/#probe_zebra_printer.py# +0 -6
  140. zebra_day-0.3.9/zebra_day/bin/check_sgd_wml.py +0 -32
  141. zebra_day-0.3.9/zebra_day/bin/probe_zebra_w_sgd.py +0 -33
  142. zebra_day-0.3.9/zebra_day/bin/reset_zebra_custom_menus.py +0 -30
  143. zebra_day-0.3.9/zebra_day/bin/set_no_wml.py +0 -21
  144. zebra_day-0.3.9/zebra_day/bin/set_zebra_ip_w_sgd.py +0 -33
  145. zebra_day-0.3.9/zebra_day/etc/printer_config.json +0 -76
  146. zebra_day-0.3.9/zebra_day/logs/print_requests.log +0 -1238
  147. zebra_day-0.3.9/zebra_day.egg-info/PKG-INFO +0 -14
  148. zebra_day-0.3.9/zebra_day.egg-info/SOURCES.txt +0 -74
  149. zebra_day-0.3.9/zebra_day.egg-info/requires.txt +0 -6
  150. {zebra_day-0.3.9 → zebra_day-1.0.2}/LICENSE +0 -0
  151. {zebra_day-0.3.9 → zebra_day-1.0.2}/setup.cfg +0 -0
  152. {zebra_day-0.3.9 → zebra_day-1.0.2}/tests/__init__.py +0 -0
  153. {zebra_day-0.3.9 → zebra_day-1.0.2}/tests/test_creating_labels.py +0 -0
  154. {zebra_day-0.3.9 → zebra_day-1.0.2}/tests/test_setup_printers_json.py +0 -0
  155. {zebra_day-0.3.9 → zebra_day-1.0.2}/tests/test_web_server.py +0 -0
  156. {zebra_day-0.3.9/zebra_day → zebra_day-1.0.2/zebra_day/bin}/__init__.py +0 -0
  157. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/fetch_zebra_config.py +0 -0
  158. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/generate_coord_grid_zpl.py +0 -0
  159. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/print_zpl_from_file.py +0 -0
  160. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/probe_new_label_dimensions.py +0 -0
  161. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/scan_for_networed_zebra_printers.py +0 -0
  162. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/scan_for_networed_zebra_printers_arp_scan.sh +0 -0
  163. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/scan_for_networed_zebra_printers_curl.sh +0 -0
  164. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/bin/zserve.py +0 -0
  165. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/cmd_mgr.py +0 -0
  166. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/Monoid-Regular-HalfTight-Dollar-0-1-l.ttf +0 -0
  167. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/blank.zpl +0 -0
  168. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/cornersStripOf4Squares_1inX1in.zpl +0 -0
  169. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/corners_1inX2in.zpl +0 -0
  170. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/corners_20cmX30cm.zpl +0 -0
  171. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/corners_smallTube.zpl +0 -0
  172. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/corners_unspecifiedDimensions.zpl +0 -0
  173. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/generic_2inX1in.zpl +0 -0
  174. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/plate_1inX0.25in.zpl +0 -0
  175. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/plate_1inX0.25inHD.zpl +0 -0
  176. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdotHD_prod.zpl +0 -0
  177. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_corners.zpl +0 -0
  178. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_prod.zpl +0 -0
  179. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_prodAlt1.zpl +0 -0
  180. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_prodAlt1b.zpl +0 -0
  181. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_prodV2.zpl +0 -0
  182. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/smallTubeWdot_reagent.zpl +0 -0
  183. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/stripOf4Squares_1inX1in.zpl +0 -0
  184. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/test_800dX800dCoordinateArray.zpl +0 -0
  185. /zebra_day-0.3.9/zebra_day/bin/__init__.py → /zebra_day-1.0.2/zebra_day/etc/label_styles/tmps/.hold +0 -0
  186. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tmps/tmp_zpl_templates.here +0 -0
  187. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_20mmX30mmA.zpl +0 -0
  188. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_2inX0.3in.zpl +0 -0
  189. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_2inX0.5in.zpl +0 -0
  190. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_2inX0.5inHD.zpl +0 -0
  191. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_2inX1in.zpl +0 -0
  192. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/label_styles/tube_2inX1inHD.zpl +0 -0
  193. /zebra_day-0.3.9/zebra_day/files/hold → /zebra_day-1.0.2/zebra_day/etc/old_printer_config/.hold +0 -0
  194. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/etc/printer_config.template.json +0 -0
  195. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/datschund.css +0 -0
  196. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/datschund.png +0 -0
  197. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/daylily.png +0 -0
  198. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/general.css +0 -0
  199. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/moon.jpeg +0 -0
  200. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/oakland.css +0 -0
  201. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/petrichor.css +0 -0
  202. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/popday_daylily.css +0 -0
  203. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/style.css +0 -0
  204. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/triangles.css +0 -0
  205. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/tron.css +0 -0
  206. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day/static/zebras.css +0 -0
  207. {zebra_day-0.3.9 → zebra_day-1.0.2}/zebra_day.egg-info/dependency_links.txt +0 -0
@@ -0,0 +1,25 @@
1
+ # Include documentation
2
+ include README.md
3
+ include LICENSE
4
+ include MODERNIZE.md
5
+
6
+ # Include package data
7
+ recursive-include zebra_day/bin *
8
+ recursive-include zebra_day/etc *
9
+ recursive-include zebra_day/static *
10
+ recursive-include zebra_day/files *
11
+ recursive-include zebra_day/logs *
12
+
13
+ # Include requirements files
14
+ include requirements.txt
15
+ include requirements-dev.txt
16
+ include pyproject.toml
17
+
18
+ # Exclude compiled files and caches
19
+ global-exclude *.pyc
20
+ global-exclude *.pyo
21
+ global-exclude __pycache__
22
+ global-exclude *.so
23
+ global-exclude .git*
24
+ global-exclude .DS_Store
25
+
@@ -0,0 +1,76 @@
1
+ # MODERNIZE.md - zebra_day Modernization Status
2
+
3
+ > **Status**: ALL PHASES COMPLETE as of 1.0.0
4
+
5
+ This document tracked the modernization of zebra_day from 0.5.0 to 1.0.0.
6
+
7
+ ---
8
+
9
+ ## Completed Modernization Summary
10
+
11
+ ### Phase 0 - Hygiene + Guardrails
12
+ - [x] Removed duplicate dependencies
13
+ - [x] Moved dev-only deps to optional extras
14
+ - [x] Implemented structured logging
15
+ - [x] Created custom exceptions
16
+ - [x] Added comprehensive unit tests (16 tests passing)
17
+
18
+ ### Phase 1 - Packaging Modernization
19
+ - [x] Migrated to pyproject.toml (PEP 517/518)
20
+ - [x] Defined optional extras: dev, lint, docs, auth, all
21
+ - [x] Package builds correctly as wheel and sdist
22
+ - [x] PyPI-ready (twine check passes)
23
+
24
+ ### Phase 2 - XDG Filesystem Safety
25
+ - [x] Implemented zebra_day/paths.py with XDG Base Directory support
26
+ - [x] Config: ~/.config/zebra_day/ (Linux) or ~/Library/Preferences/zebra_day/ (macOS)
27
+ - [x] Data: ~/.local/share/zebra_day/ (Linux) or ~/Library/Application Support/zebra_day/ (macOS)
28
+ - [x] Logs: ~/.local/state/zebra_day/ (Linux) or ~/Library/Logs/zebra_day/ (macOS)
29
+ - [x] Replaced os.system() calls with pathlib + shutil
30
+
31
+ ### Phase 3 - Web Stack Modernization
32
+ - [x] Migrated from CherryPy to FastAPI + Uvicorn
33
+ - [x] Implemented Jinja2 templates (26 templates total)
34
+ - [x] Created versioned API (/api/v1/...)
35
+ - [x] Added OpenAPI documentation (/docs, /redoc)
36
+ - [x] Implemented optional Cognito authentication
37
+ - [x] Created modern UI with Ursa-inspired design system
38
+ - [x] Preserved legacy UI at /legacy prefix
39
+
40
+ ### Phase 4 - Observability
41
+ - [x] Added health endpoints (/healthz, /readyz)
42
+ - [x] Implemented request logging middleware
43
+ - [x] Added structured logging with timestamps
44
+
45
+ ### Phase 5 - CI/CD
46
+ - [x] GitHub Actions workflow with lint, test, build, publish jobs
47
+ - [x] Python version matrix (3.10, 3.11, 3.12, 3.13)
48
+ - [x] Ruff linting, Black formatting, mypy type checking
49
+ - [x] Automated PyPI publishing on release
50
+
51
+ ### Bonus: Local ZPL Rendering
52
+ - [x] Replaced external Labelary API with local renderer
53
+ - [x] Implemented zebra_day/zpl_renderer.py using Pillow + zint-bindings
54
+
55
+ ---
56
+
57
+ ## Commands Reference
58
+
59
+ ```bash
60
+ # Development
61
+ pytest -v # Run tests
62
+ ruff check zebra_day tests # Lint
63
+ black --check zebra_day tests # Format check
64
+ mypy zebra_day # Type check
65
+
66
+ # CLI
67
+ zday --help # Show all commands
68
+ zday info # Show config paths and status
69
+ zday bootstrap # First-time setup
70
+ zday gui start # Start web server
71
+ zday gui stop # Stop web server
72
+
73
+ # Build
74
+ python -m build # Build wheel and sdist
75
+ twine check dist/* # Verify package
76
+ ```