zebra-day 2.0.0__py3-none-any.whl → 2.1.4__py3-none-any.whl

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 (101) hide show
  1. zebra_day/__init__.py +7 -2
  2. zebra_day/_version.py +1 -0
  3. zebra_day/cli/__init__.py +80 -30
  4. zebra_day/cli/cognito.py +15 -9
  5. zebra_day/cli/gui.py +21 -16
  6. zebra_day/cli/printer.py +34 -27
  7. zebra_day/cli/template.py +19 -15
  8. zebra_day/cmd_mgr.py +3 -6
  9. zebra_day/docs/gx420d-gx430d-ug-en.pdf +0 -0
  10. zebra_day/docs/hardware_config_guide.md +149 -0
  11. zebra_day/docs/programatic_guide.md +181 -0
  12. zebra_day/docs/qln420_zebra_manual.pdf +0 -0
  13. zebra_day/docs/uid_screed_light.md +38 -0
  14. zebra_day/docs/zd620-zd420-ug-en.pdf +0 -0
  15. zebra_day/docs/zebra_day_ui_guide.md +194 -0
  16. zebra_day/etc/printer_config.json +7 -1
  17. zebra_day/etc/printer_config.template.json +3 -17
  18. zebra_day/etc/tmp_printers139.json +10 -0
  19. zebra_day/etc/tmp_printers147.json +10 -0
  20. zebra_day/etc/tmp_printers34.json +10 -0
  21. zebra_day/etc/tmp_printers389.json +10 -0
  22. zebra_day/etc/tmp_printers398.json +10 -0
  23. zebra_day/etc/tmp_printers437.json +10 -0
  24. zebra_day/etc/tmp_printers439.json +10 -0
  25. zebra_day/etc/tmp_printers440.json +10 -0
  26. zebra_day/etc/tmp_printers508.json +10 -0
  27. zebra_day/etc/tmp_printers543.json +10 -0
  28. zebra_day/etc/tmp_printers835.json +10 -0
  29. zebra_day/etc/tmp_printers842.json +10 -0
  30. zebra_day/etc/tmp_printers931.json +10 -0
  31. zebra_day/etc/tmp_printers969.json +10 -0
  32. zebra_day/exceptions.py +1 -1
  33. zebra_day/files/corners_smallTube_preview.png +0 -0
  34. zebra_day/files/test_png_2897.png +0 -0
  35. zebra_day/files/test_png_31690.png +0 -0
  36. zebra_day/files/test_png_33804.png +0 -0
  37. zebra_day/files/test_png_34737.png +0 -0
  38. zebra_day/files/test_png_4161.png +0 -0
  39. zebra_day/files/test_png_44748.png +0 -0
  40. zebra_day/files/test_png_4635.png +0 -0
  41. zebra_day/files/test_png_56349.png +0 -0
  42. zebra_day/files/test_png_5936.png +0 -0
  43. zebra_day/files/test_png_64110.png +0 -0
  44. zebra_day/files/test_png_64891.png +0 -0
  45. zebra_day/files/test_png_69002.png +0 -0
  46. zebra_day/files/test_png_70065.png +0 -0
  47. zebra_day/files/test_png_72366.png +0 -0
  48. zebra_day/files/test_png_77793.png +0 -0
  49. zebra_day/files/test_png_9572.png +0 -0
  50. zebra_day/imgs/.hold +0 -0
  51. zebra_day/imgs/bar_ltpurp.png +0 -0
  52. zebra_day/imgs/bar_purp.png +0 -0
  53. zebra_day/imgs/bar_purp3.png +0 -0
  54. zebra_day/imgs/bar_red.png +0 -0
  55. zebra_day/imgs/legacy/UBC_gantt_chart.png +0 -0
  56. zebra_day/imgs/legacy/gx420d_network_config.png +0 -0
  57. zebra_day/imgs/legacy/gx420d_printer_config.png +0 -0
  58. zebra_day/imgs/legacy/ngrok.png +0 -0
  59. zebra_day/imgs/legacy/printer_details.png +0 -0
  60. zebra_day/imgs/legacy/quick_start_test_label.png +0 -0
  61. zebra_day/imgs/legacy/quick_start_test_label2.png +0 -0
  62. zebra_day/imgs/legacy/zd620_network_config.png +0 -0
  63. zebra_day/imgs/legacy/zd620_printer_config.png +0 -0
  64. zebra_day/imgs/legacy/zday_quick_gui.png +0 -0
  65. zebra_day/imgs/legacy/zebra_day_alt_css_dog.png +0 -0
  66. zebra_day/imgs/legacy/zebra_day_alt_css_flower.png +0 -0
  67. zebra_day/imgs/legacy/zebra_day_alt_css_main.png +0 -0
  68. zebra_day/imgs/legacy/zebra_day_available_zpl_templates.png +0 -0
  69. zebra_day/imgs/legacy/zebra_day_bkup_pconfig.png +0 -0
  70. zebra_day/imgs/legacy/zebra_day_home.png +0 -0
  71. zebra_day/imgs/legacy/zebra_day_manual_print.png +0 -0
  72. zebra_day/imgs/legacy/zebra_day_printer_fleet_json.png +0 -0
  73. zebra_day/imgs/legacy/zebra_day_quick_ex.png +0 -0
  74. zebra_day/imgs/legacy/zebra_day_zpl_template_IRLa.png +0 -0
  75. zebra_day/imgs/legacy/zebra_day_zpl_template_IRLb.png +0 -0
  76. zebra_day/imgs/ui_api_docs.png +0 -0
  77. zebra_day/imgs/ui_config.png +0 -0
  78. zebra_day/imgs/ui_dashboard.png +0 -0
  79. zebra_day/imgs/ui_print_request.png +0 -0
  80. zebra_day/imgs/ui_printers.png +0 -0
  81. zebra_day/imgs/ui_templates.png +0 -0
  82. zebra_day/logging_config.py +4 -9
  83. zebra_day/mkcert.py +157 -0
  84. zebra_day/paths.py +1 -2
  85. zebra_day/print_mgr.py +165 -145
  86. zebra_day/templates/modern/config.html +7 -0
  87. zebra_day/templates/modern/print_request.html +61 -3
  88. zebra_day/web/__init__.py +1 -1
  89. zebra_day/web/app.py +21 -16
  90. zebra_day/web/auth.py +17 -15
  91. zebra_day/web/middleware.py +8 -5
  92. zebra_day/web/routers/__init__.py +0 -1
  93. zebra_day/web/routers/api.py +192 -43
  94. zebra_day/web/routers/ui.py +31 -33
  95. zebra_day/zpl_renderer.py +45 -34
  96. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/METADATA +76 -67
  97. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/RECORD +101 -29
  98. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/WHEEL +0 -0
  99. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/entry_points.txt +0 -0
  100. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/licenses/LICENSE +0 -0
  101. {zebra_day-2.0.0.dist-info → zebra_day-2.1.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,194 @@
1
+ # ZDAY UI GUIDE
2
+
3
+ ## Modern Web UI (2.0.0+)
4
+
5
+ zebra_day 2.0.0+ features a modern, responsive web interface with HTTPS support:
6
+
7
+ | Interface | URL | Description |
8
+ |-----------|-----|-------------|
9
+ | **Dashboard** | `https://localhost:8118/` | Printer fleet stats, quick actions, navigation |
10
+ | **Printers** | `https://localhost:8118/printers` | Printer status and management by lab |
11
+ | **Print** | `https://localhost:8118/print` | Send print requests with template selection |
12
+ | **Templates** | `https://localhost:8118/templates` | ZPL template editor with live PNG preview |
13
+ | **Config** | `https://localhost:8118/config` | Printer configuration management |
14
+ | **API Docs** | `https://localhost:8118/docs` | Interactive OpenAPI/Swagger documentation |
15
+ | **ReDoc** | `https://localhost:8118/redoc` | Alternative API documentation |
16
+
17
+ > **Note:** Use `http://` instead of `https://` if running without certificates (`--no-https`).
18
+
19
+ ---
20
+
21
+ ## UI Documentation
22
+
23
+ > The screenshots below show the UI. Everything which can be accomplished via this UI can also be achieved with the library code directly (more so in fact).
24
+
25
+ ### Home, 4 Primary Tool Clusters Available
26
+
27
+ #### _1_ Automated Zebra Printer Discovery & Centralized Management /// _2_ Zebra Printer Status And Activity Reports /// _3_ ZPL Label Template Design + Preview + Deployment of New Styles /// _4_ Manual Print Request Formulation For Any Printer + ZPL Combination Desired
28
+
29
+ <img width="1016" alt="home" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/8960686a-8444-4b17-8cf2-a27dfe0432eb">
30
+
31
+ > the link to change ZDAY style can be found in the lower right of the home page
32
+
33
+ ### Printer Fleet Status Report & Scan For New Printers Tool
34
+
35
+ <img width="1024" alt="fleetreport" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/3620b38b-88ac-4c22-8c36-76e427d91a27">
36
+
37
+ ### Example of Printer Config JSON
38
+
39
+ > ( this is fully user editable (modify the atomatically added entries, delete or add )
40
+
41
+ <img width="667" alt="editconf" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/0f6b04d7-0d98-491c-815f-ef157c6c5af8">
42
+ > links to clear the current json file, refresh from the default template, or save current edits to become active.
43
+
44
+ #### List Of All Archived Printer Config JSON Files,
45
+
46
+ > these can be restored if desired
47
+
48
+ <img width="999" alt="bkupconf" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/31970151-2015-40c5-a75e-8f3a694d5a78">
49
+
50
+ ### List Of Available ZPL Template Files
51
+
52
+ > ( the top list are uneditable defaults, the bottom are user created )
53
+
54
+ <img width="834" alt="chooseZPL" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/c3a03dd6-2d04-47fc-9aa3-a3dc1c6b4677">
55
+
56
+ #### View of ZPL Preview/Editor
57
+ > ( changes to the ZPL on this page produce a preview PNG of what the printer will print )
58
+ <img width="953" alt="zpl_editing" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/025851d2-813e-43d7-80af-f66a71a45bf4">
59
+ * Drafts can be saved, previewed as PNG, or sent to an available printer
60
+
61
+ ### Form To Send Manual Formulated ZPL Print Jobs To Specific Printers
62
+
63
+ <img width="895" alt="printmanual" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/9a0d7b4d-a808-4008-bd74-f4a3e8e1b670">
64
+
65
+ #### Manual Print Request Success (including presenting link which can be used by other systems to print)
66
+
67
+ <img width="312" alt="zpl_exa" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/62afc4d8-dbec-43f8-817e-a30e620aeb51">
68
+
69
+ #### Example Of Manually Printed Label Showing Zebra Printer Details
70
+
71
+ <img width="909" alt="print_success" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/5da259f3-0ed4-4c18-953d-c091690e703c">
72
+
73
+ <img width="411" alt="zplab" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/024a49b8-b86f-4950-abe4-93eedc62101c">
74
+
75
+ ---
76
+
77
+ ## API Reference (curl examples)
78
+
79
+ All API endpoints are documented at `/docs` (Swagger UI) and `/redoc`. Here are common operations:
80
+
81
+ ### Health Checks
82
+
83
+ ```bash
84
+ # Basic health check
85
+ curl https://localhost:8118/healthz
86
+
87
+ # Readiness check (printer manager initialized)
88
+ curl https://localhost:8118/readyz
89
+ ```
90
+
91
+ ### Printer Operations
92
+
93
+ ```bash
94
+ # List all printers
95
+ curl https://localhost:8118/api/v1/printers
96
+
97
+ # Get printer status
98
+ curl "https://localhost:8118/api/v1/printers/default/192.168.1.7/status"
99
+
100
+ # Scan for new printers
101
+ curl -X POST "https://localhost:8118/api/v1/printers/scan?ip_stub=192.168.1"
102
+ ```
103
+
104
+ ### Print Labels
105
+
106
+ ```bash
107
+ # Print a label using a template
108
+ curl -X POST "https://localhost:8118/api/v1/print" \
109
+ -H "Content-Type: application/json" \
110
+ -d '{
111
+ "lab": "default",
112
+ "printer_name": "192.168.1.7",
113
+ "label_zpl_style": "tube_2inX1in",
114
+ "uid_barcode": "SAMPLE123",
115
+ "alt_a": "Field A",
116
+ "alt_b": "Field B"
117
+ }'
118
+
119
+ # Legacy query-string format (still supported)
120
+ curl "https://localhost:8118/_print_label?lab=default&printer=192.168.1.7&label_zpl_style=tube_2inX1in&uid_barcode=SAMPLE123"
121
+ ```
122
+
123
+ ### Render Labels (PNG preview without printing)
124
+
125
+ ```bash
126
+ # Render using a template
127
+ curl -X POST "https://localhost:8118/api/v1/render" \
128
+ -H "Content-Type: application/json" \
129
+ -d '{
130
+ "template_name": "tube_2inX1in",
131
+ "uid_barcode": "SAMPLE123",
132
+ "alt_a": "Field A"
133
+ }' \
134
+ --output label.png
135
+
136
+ # Render raw ZPL
137
+ curl -X POST "https://localhost:8118/api/v1/render" \
138
+ -H "Content-Type: application/json" \
139
+ -d '{"zpl_content": "^XA^FO50,50^ADN,36,20^FDHello^FS^XZ"}' \
140
+ --output label.png
141
+ ```
142
+
143
+ ### Template Operations
144
+
145
+ ```bash
146
+ # List all templates
147
+ curl https://localhost:8118/api/v1/templates
148
+
149
+ # Get template content
150
+ curl https://localhost:8118/api/v1/templates/tube_2inX1in
151
+ ```
152
+
153
+ ### Configuration
154
+
155
+ ```bash
156
+ # Get current configuration
157
+ curl https://localhost:8118/api/v1/config
158
+
159
+ # Update configuration (PATCH)
160
+ curl -X PATCH "https://localhost:8118/api/v1/config" \
161
+ -H "Content-Type: application/json" \
162
+ -d '{"labs": {"default": {"lab_name": "Main Lab"}}}'
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Zebra Printer Web Admin UI
168
+ Often, I find these pages valuable in triaging a poorly behaving printer. I compare a well behaved printer to a problem one and see which settings are not in agreement.
169
+
170
+ ### Main Page (these links are presented in the printer status report towards the top of the ZDAY home)
171
+ <img width="430" alt="z1" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/c5f55ef4-1a69-491a-8f58-b733768d2e7b">
172
+
173
+ ### General Setup Page
174
+ <img width="586" alt="z2" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/84ecc09f-05b1-4414-a38a-b83ad803f51d">
175
+ * Darkness, Print Speed and Label Top often need editing.
176
+
177
+ ### Media Setup
178
+ <img width="445" alt="z3" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/433e426e-7cff-4fcf-962c-2b8a3b80fc66">
179
+ * Media Type Must Be Set For Label Stock
180
+ * Almost always sensor=Web.
181
+ * Width and length should be edited if labels are printing off the label stock (auto calibration is not working in these cases)
182
+ * !! When you save changes to these pages, they are temporarily saved... you must go to the main setting page and apply all saved changes for them to take effect.
183
+
184
+ ### Calibration Page
185
+ <img width="441" alt="z4" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/7843d86c-1a95-4bcd-b98a-b80ea6b93654">
186
+
187
+ ### Network Settings: Wired
188
+ <img width="472" alt="z5" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/01784778-1665-46b5-8089-93db478f300e">
189
+ * Get MAC address here.
190
+ * Set static IP assignment here if needed, else DHCP
191
+
192
+ ### Network Settings: Wireless
193
+ <img width="484" alt="z6" src="https://github.com/Daylily-Informatics/zebra_day/assets/4713659/a1a55e92-5a29-4d30-89a1-baa0f4b0837f">
194
+ * Generally not a smooth thing to setup. It is quite hard to fuss with these settings remotely.
@@ -1,4 +1,10 @@
1
1
  {
2
2
  "schema_version": "2.0.0",
3
- "labs": {}
3
+ "labs": {
4
+ "": {
5
+ "lab_name": "",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
4
10
  }
@@ -1,24 +1,10 @@
1
1
  {
2
2
  "schema_version": "2.0.0",
3
3
  "labs": {
4
- "scan-results": {
5
- "lab_name": "Scan Results",
4
+ "default": {
5
+ "lab_name": "Default",
6
6
  "available_locations": [],
7
- "printers": {
8
- "Download-Label-png": {
9
- "ip_address": "dl_png",
10
- "printer_name": "Download Label as PNG",
11
- "lab_location": null,
12
- "manufacturer": "virtual",
13
- "model": "na",
14
- "serial": "na",
15
- "label_zpl_styles": ["tube_2inX1in"],
16
- "default_label_style": "tube_2inX1in",
17
- "print_method": "generate png",
18
- "arp_data": "na",
19
- "notes": ""
20
- }
21
- }
7
+ "printers": {}
22
8
  }
23
9
  }
24
10
  }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "labs": {
4
+ "test": {
5
+ "lab_name": "Test Lab",
6
+ "available_locations": [],
7
+ "printers": {}
8
+ }
9
+ }
10
+ }
zebra_day/exceptions.py CHANGED
@@ -3,6 +3,7 @@ Custom exceptions for zebra_day.
3
3
 
4
4
  Provides specific exception types for different error conditions.
5
5
  """
6
+
6
7
  from __future__ import annotations
7
8
 
8
9
 
@@ -85,4 +86,3 @@ class NetworkScanError(ZebraDayError):
85
86
  def __init__(self, ip_stub: str, message: str = ""):
86
87
  self.ip_stub = ip_stub
87
88
  super().__init__(f"Network scan failed for {ip_stub}.*: {message}")
88
-
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
zebra_day/imgs/.hold ADDED
File without changes
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -3,12 +3,12 @@ Logging configuration for zebra_day.
3
3
 
4
4
  Provides structured logging with configurable levels and formats.
5
5
  """
6
+
6
7
  from __future__ import annotations
7
8
 
8
9
  import logging
9
10
  import sys
10
11
  from pathlib import Path
11
- from typing import Optional
12
12
 
13
13
 
14
14
  def get_logger(name: str) -> logging.Logger:
@@ -27,8 +27,8 @@ def get_logger(name: str) -> logging.Logger:
27
27
 
28
28
  def configure_logging(
29
29
  level: int = logging.INFO,
30
- log_file: Optional[Path] = None,
31
- format_string: Optional[str] = None,
30
+ log_file: Path | None = None,
31
+ format_string: str | None = None,
32
32
  ) -> None:
33
33
  """Configure zebra_day logging.
34
34
 
@@ -38,11 +38,7 @@ def configure_logging(
38
38
  format_string: Optional custom format string
39
39
  """
40
40
  if format_string is None:
41
- format_string = (
42
- "\033[1m%(asctime)s\033[0m "
43
- "[%(levelname)s] "
44
- "%(name)s: %(message)s"
45
- )
41
+ format_string = "\033[1m%(asctime)s\033[0m [%(levelname)s] %(name)s: %(message)s"
46
42
 
47
43
  formatter = logging.Formatter(format_string, datefmt="%Y-%m-%d %H:%M:%S")
48
44
 
@@ -71,4 +67,3 @@ def configure_logging(
71
67
  )
72
68
  )
73
69
  logger.addHandler(file_handler)
74
-