aprsd 3.2.2__py2.py3-none-any.whl → 3.3.1__py2.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aprsd
3
- Version: 3.2.2
3
+ Version: 3.3.1
4
4
  Summary: Amateur radio APRS daemon which listens for messages and responds
5
5
  Home-page: http://aprsd.readthedocs.org
6
6
  Author: Craig Lamparter
@@ -19,79 +19,80 @@ Classifier: Programming Language :: Python :: 3.9
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
21
  Requires-Dist: aprslib ==0.7.2
22
- Requires-Dist: attrs ==23.1.0
22
+ Requires-Dist: attrs ==23.2.0
23
23
  Requires-Dist: ax253 ==0.1.5.post1
24
- Requires-Dist: beautifulsoup4 ==4.12.2
25
- Requires-Dist: bidict ==0.22.1
26
- Requires-Dist: bitarray ==2.8.3
24
+ Requires-Dist: beautifulsoup4 ==4.12.3
25
+ Requires-Dist: bidict ==0.23.1
26
+ Requires-Dist: bitarray ==2.9.2
27
27
  Requires-Dist: blinker ==1.7.0
28
- Requires-Dist: certifi ==2023.7.22
28
+ Requires-Dist: certifi ==2024.2.2
29
29
  Requires-Dist: charset-normalizer ==3.3.2
30
30
  Requires-Dist: click ==8.1.7
31
31
  Requires-Dist: click-completion ==0.5.2
32
- Requires-Dist: click-params ==0.4.1
32
+ Requires-Dist: click-params ==0.5.0
33
33
  Requires-Dist: commonmark ==0.9.1
34
34
  Requires-Dist: dacite2 ==2.0.0
35
35
  Requires-Dist: dataclasses ==0.6
36
- Requires-Dist: dataclasses-json ==0.6.2
37
- Requires-Dist: debtcollector ==2.5.0
38
- Requires-Dist: decorator ==5.1.1
39
- Requires-Dist: dnspython ==2.4.2
40
- Requires-Dist: eventlet ==0.33.3
41
- Requires-Dist: flask ==3.0.0
36
+ Requires-Dist: dataclasses-json ==0.6.4
37
+ Requires-Dist: debtcollector ==3.0.0
38
+ Requires-Dist: deprecated ==1.2.14
39
+ Requires-Dist: dnspython ==2.6.1
40
+ Requires-Dist: eventlet ==0.35.2
41
+ Requires-Dist: flask ==3.0.2
42
42
  Requires-Dist: flask-httpauth ==4.8.0
43
43
  Requires-Dist: flask-socketio ==5.3.6
44
44
  Requires-Dist: geographiclib ==2.0
45
- Requires-Dist: geopy ==2.4.0
46
- Requires-Dist: gevent ==23.9.1
47
- Requires-Dist: greenlet ==3.0.1
45
+ Requires-Dist: geopy ==2.4.1
46
+ Requires-Dist: gevent ==24.2.1
47
+ Requires-Dist: greenlet ==3.0.3
48
48
  Requires-Dist: h11 ==0.14.0
49
- Requires-Dist: idna ==3.4
50
- Requires-Dist: imapclient ==3.0.0
51
- Requires-Dist: importlib-metadata ==6.8.0
49
+ Requires-Dist: idna ==3.6
50
+ Requires-Dist: imapclient ==3.0.1
51
+ Requires-Dist: importlib-metadata ==7.0.1
52
52
  Requires-Dist: itsdangerous ==2.1.2
53
- Requires-Dist: jinja2 ==3.1.2
53
+ Requires-Dist: jinja2 ==3.1.3
54
54
  Requires-Dist: kiss3 ==8.0.0
55
- Requires-Dist: markupsafe ==2.1.3
56
- Requires-Dist: marshmallow ==3.20.1
55
+ Requires-Dist: loguru ==0.7.2
56
+ Requires-Dist: markupsafe ==2.1.5
57
+ Requires-Dist: marshmallow ==3.21.1
57
58
  Requires-Dist: mypy-extensions ==1.0.0
58
- Requires-Dist: netaddr ==0.9.0
59
- Requires-Dist: oslo-config ==9.2.0
60
- Requires-Dist: oslo-i18n ==6.2.0
59
+ Requires-Dist: netaddr ==1.2.1
60
+ Requires-Dist: oslo-config ==9.4.0
61
+ Requires-Dist: oslo-i18n ==6.3.0
61
62
  Requires-Dist: packaging ==23.2
62
63
  Requires-Dist: pbr ==6.0.0
63
- Requires-Dist: pluggy ==1.3.0
64
+ Requires-Dist: pluggy ==1.4.0
64
65
  Requires-Dist: plumbum ==1.8.2
65
- Requires-Dist: pygments ==2.16.1
66
+ Requires-Dist: pygments ==2.17.2
66
67
  Requires-Dist: pyserial ==3.5
67
68
  Requires-Dist: pyserial-asyncio ==0.6
68
- Requires-Dist: python-engineio ==4.8.0
69
- Requires-Dist: python-socketio ==5.10.0
70
- Requires-Dist: pytz ==2023.3.post1
69
+ Requires-Dist: python-engineio ==4.9.0
70
+ Requires-Dist: python-socketio ==5.11.1
71
+ Requires-Dist: pytz ==2024.1
71
72
  Requires-Dist: pyyaml ==6.0.1
72
73
  Requires-Dist: requests ==2.31.0
73
74
  Requires-Dist: rfc3986 ==2.0.0
74
75
  Requires-Dist: rich ==12.6.0
75
- Requires-Dist: rpyc ==5.3.1
76
+ Requires-Dist: rpyc ==6.0.0
76
77
  Requires-Dist: rush ==2021.4.0
77
78
  Requires-Dist: shellingham ==1.5.4
78
79
  Requires-Dist: simple-websocket ==1.0.0
79
80
  Requires-Dist: six ==1.16.0
80
81
  Requires-Dist: soupsieve ==2.5
81
- Requires-Dist: stevedore ==5.1.0
82
+ Requires-Dist: stevedore ==5.2.0
82
83
  Requires-Dist: tabulate ==0.9.0
83
84
  Requires-Dist: thesmuggler ==1.0.1
84
- Requires-Dist: typing-extensions ==4.8.0
85
+ Requires-Dist: typing-extensions ==4.10.0
85
86
  Requires-Dist: typing-inspect ==0.9.0
86
87
  Requires-Dist: update-checker ==0.18.0
87
- Requires-Dist: urllib3 ==2.1.0
88
- Requires-Dist: validators ==0.20.0
88
+ Requires-Dist: urllib3 ==2.2.1
89
+ Requires-Dist: validators ==0.22.0
89
90
  Requires-Dist: werkzeug ==3.0.1
90
91
  Requires-Dist: wrapt ==1.16.0
91
92
  Requires-Dist: wsproto ==1.2.0
92
93
  Requires-Dist: zipp ==3.17.0
93
94
  Requires-Dist: zope-event ==5.0
94
- Requires-Dist: zope-interface ==6.1
95
+ Requires-Dist: zope-interface ==6.2
95
96
 
96
97
  ===============================================
97
98
  APRSD - Ham radio APRS-IS Message plugin server
@@ -105,32 +106,38 @@ ____________________
105
106
 
106
107
  `APRSD <http://github.com/craigerl/aprsd>`_ is a Ham radio `APRS <http://aprs.org>`_ message command gateway built on python.
107
108
 
108
- APRSD listens on amateur radio aprs-is network for messages and respond to them.
109
- It has a plugin architecture for extensibility. Users of APRSD can write their own
110
- plugins that can respond to APRS-IS messages.
111
109
 
112
- You must have an amateur radio callsign to use this software. APRSD gets
113
- messages for the configured HAM callsign, and sends those messages to a
114
- list of plugins for processing. There are a set of core plugins that
115
- provide responding to messages to check email, get location, ping,
116
- time of day, get weather, and fortune telling as well as version information
117
- of aprsd itself.
118
-
119
- Please `read the docs`_ to learn more!
110
+ What is APRSD
111
+ =============
112
+ APRSD is a python application for interacting with the APRS network and providing
113
+ APRS services for HAM radio operators.
120
114
 
115
+ APRSD currently has 4 main commands to use.
116
+ * server - Connect to APRS and listen/respond to APRS messages
117
+ * webchat - web based chat program over APRS
118
+ * send-message - Send a message to a callsign via APRS_IS.
119
+ * listen - Listen to packets on the APRS-IS Network based on FILTER.
121
120
 
122
- .. contents:: :local:
121
+ Each of those commands can connect to the APRS-IS network if internet connectivity
122
+ is available. If internet is not available, then APRS can be configured to talk
123
+ to a TCP KISS TNC for radio connectivity.
123
124
 
125
+ Please `read the docs`_ to learn more!
124
126
 
125
127
  APRSD Overview Diagram
126
128
  ======================
127
129
 
128
130
  .. image:: https://raw.githubusercontent.com/craigerl/aprsd/master/docs/_static/aprsd_overview.svg?sanitize=true
129
131
 
130
-
131
132
  Typical use case
132
133
  ================
133
134
 
135
+ APRSD's typical use case is that of providing an APRS wide service to all HAM
136
+ radio operators. For example the callsign 'REPEAT' on the APRS network is actually
137
+ an instance of APRSD that can provide a list of HAM repeaters in the area of the
138
+ callsign that sent the message.
139
+
140
+
134
141
  Ham radio operator using an APRS enabled HAM radio sends a message to check
135
142
  the weather. An APRS message is sent, and then picked up by APRSD. The
136
143
  APRS packet is decoded, and the message is sent through the list of plugins
@@ -141,55 +148,6 @@ callsigns to look out for. The watch list can notify you when a HAM callsign
141
148
  in the list is seen and now available to message on the APRS network.
142
149
 
143
150
 
144
- Current list of built-in plugins
145
- ======================================
146
-
147
- ::
148
-
149
- └─> aprsd list-plugins
150
- 🐍 APRSD Built-in Plugins 🐍
151
- ┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
152
- ┃ Plugin Name ┃ Info ┃ Type ┃ Plugin Path ┃
153
- ┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
154
- │ AVWXWeatherPlugin │ AVWX weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.AVWXWeatherPlugin │
155
- │ EmailPlugin │ Send and Receive email │ RegexCommand │ aprsd.plugins.email.EmailPlugin │
156
- │ FortunePlugin │ Give me a fortune │ RegexCommand │ aprsd.plugins.fortune.FortunePlugin │
157
- │ LocationPlugin │ Where in the world is a CALLSIGN's last GPS beacon? │ RegexCommand │ aprsd.plugins.location.LocationPlugin │
158
- │ NotifySeenPlugin │ Notify me when a CALLSIGN is recently seen on APRS-IS │ WatchList │ aprsd.plugins.notify.NotifySeenPlugin │
159
- │ OWMWeatherPlugin │ OpenWeatherMap weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.OWMWeatherPlugin │
160
- │ PingPlugin │ reply with a Pong! │ RegexCommand │ aprsd.plugins.ping.PingPlugin │
161
- │ QueryPlugin │ APRSD Owner command to query messages in the MsgTrack │ RegexCommand │ aprsd.plugins.query.QueryPlugin │
162
- │ TimeOWMPlugin │ Current time of GPS beacon's timezone. Uses OpenWeatherMap │ RegexCommand │ aprsd.plugins.time.TimeOWMPlugin │
163
- │ TimePlugin │ What is the current local time. │ RegexCommand │ aprsd.plugins.time.TimePlugin │
164
- │ USMetarPlugin │ USA only METAR of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USMetarPlugin │
165
- │ USWeatherPlugin │ Provide USA only weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USWeatherPlugin │
166
- │ VersionPlugin │ What is the APRSD Version │ RegexCommand │ aprsd.plugins.version.VersionPlugin │
167
- └───────────────────┴────────────────────────────────────────────────────────────┴──────────────┴─────────────────────────────────────────┘
168
-
169
-
170
- Pypi.org APRSD Installable Plugin Packages
171
-
172
- Install any of the following plugins with 'pip install <Plugin Package Name>'
173
- ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
174
- ┃ Plugin Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
175
- ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
176
- │ 📂 aprsd-stock-plugin │ Ham Radio APRSD Plugin for fetching stock quotes │ 0.1.3 │ Dec 2, 2022 │ No │
177
- │ 📂 aprsd-sentry-plugin │ Ham radio APRSD plugin that does.... │ 0.1.2 │ Dec 2, 2022 │ No │
178
- │ 📂 aprsd-timeopencage-plugin │ APRSD plugin for fetching time based on GPS location │ 0.1.0 │ Dec 2, 2022 │ No │
179
- │ 📂 aprsd-weewx-plugin │ HAM Radio APRSD that reports weather from a weewx weather station. │ 0.1.4 │ Dec 7, 2021 │ Yes │
180
- │ 📂 aprsd-repeat-plugins │ APRSD Plugins for the REPEAT service │ 1.0.12 │ Dec 2, 2022 │ No │
181
- │ 📂 aprsd-telegram-plugin │ Ham Radio APRS APRSD plugin for Telegram IM service │ 0.1.3 │ Dec 2, 2022 │ No │
182
- │ 📂 aprsd-twitter-plugin │ Python APRSD plugin to send tweets │ 0.3.0 │ Dec 7, 2021 │ No │
183
- │ 📂 aprsd-slack-plugin │ Amateur radio APRS daemon which listens for messages and responds │ 1.0.5 │ Dec 18, 2022 │ No │
184
- └──────────────────────────────┴────────────────────────────────────────────────────────────────────┴─────────┴──────────────┴────────────┘
185
-
186
-
187
- 🐍 APRSD Installed 3rd party Plugins 🐍
188
- ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
189
- ┃ Package Name ┃ Plugin Name ┃ Version ┃ Type ┃ Plugin Path ┃
190
- ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
191
- │ aprsd-weewx-plugin │ WeewxMQTTPlugin │ 1.0 │ RegexCommand │ aprsd_weewx_plugin.weewx.WeewxMQTTPlugin │
192
- └────────────────────┴─────────────────┴─────────┴──────────────┴──────────────────────────────────────────┘
193
151
 
194
152
  Installation
195
153
  =============
@@ -282,6 +240,56 @@ look for incomming commands to the callsign configured in the config file
282
240
  12/07/2021 03:16:17 PM MainThread INFO aprs.logfile = /tmp/aprsd.log server.py:60
283
241
 
284
242
 
243
+ Current list of built-in plugins
244
+ ======================================
245
+
246
+ ::
247
+
248
+ └─> aprsd list-plugins
249
+ 🐍 APRSD Built-in Plugins 🐍
250
+ ┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
251
+ ┃ Plugin Name ┃ Info ┃ Type ┃ Plugin Path ┃
252
+ ┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
253
+ │ AVWXWeatherPlugin │ AVWX weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.AVWXWeatherPlugin │
254
+ │ EmailPlugin │ Send and Receive email │ RegexCommand │ aprsd.plugins.email.EmailPlugin │
255
+ │ FortunePlugin │ Give me a fortune │ RegexCommand │ aprsd.plugins.fortune.FortunePlugin │
256
+ │ LocationPlugin │ Where in the world is a CALLSIGN's last GPS beacon? │ RegexCommand │ aprsd.plugins.location.LocationPlugin │
257
+ │ NotifySeenPlugin │ Notify me when a CALLSIGN is recently seen on APRS-IS │ WatchList │ aprsd.plugins.notify.NotifySeenPlugin │
258
+ │ OWMWeatherPlugin │ OpenWeatherMap weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.OWMWeatherPlugin │
259
+ │ PingPlugin │ reply with a Pong! │ RegexCommand │ aprsd.plugins.ping.PingPlugin │
260
+ │ QueryPlugin │ APRSD Owner command to query messages in the MsgTrack │ RegexCommand │ aprsd.plugins.query.QueryPlugin │
261
+ │ TimeOWMPlugin │ Current time of GPS beacon's timezone. Uses OpenWeatherMap │ RegexCommand │ aprsd.plugins.time.TimeOWMPlugin │
262
+ │ TimePlugin │ What is the current local time. │ RegexCommand │ aprsd.plugins.time.TimePlugin │
263
+ │ USMetarPlugin │ USA only METAR of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USMetarPlugin │
264
+ │ USWeatherPlugin │ Provide USA only weather of GPS Beacon location │ RegexCommand │ aprsd.plugins.weather.USWeatherPlugin │
265
+ │ VersionPlugin │ What is the APRSD Version │ RegexCommand │ aprsd.plugins.version.VersionPlugin │
266
+ └───────────────────┴────────────────────────────────────────────────────────────┴──────────────┴─────────────────────────────────────────┘
267
+
268
+
269
+ Pypi.org APRSD Installable Plugin Packages
270
+
271
+ Install any of the following plugins with 'pip install <Plugin Package Name>'
272
+ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
273
+ ┃ Plugin Package Name ┃ Description ┃ Version ┃ Released ┃ Installed? ┃
274
+ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
275
+ │ 📂 aprsd-stock-plugin │ Ham Radio APRSD Plugin for fetching stock quotes │ 0.1.3 │ Dec 2, 2022 │ No │
276
+ │ 📂 aprsd-sentry-plugin │ Ham radio APRSD plugin that does.... │ 0.1.2 │ Dec 2, 2022 │ No │
277
+ │ 📂 aprsd-timeopencage-plugin │ APRSD plugin for fetching time based on GPS location │ 0.1.0 │ Dec 2, 2022 │ No │
278
+ │ 📂 aprsd-weewx-plugin │ HAM Radio APRSD that reports weather from a weewx weather station. │ 0.1.4 │ Dec 7, 2021 │ Yes │
279
+ │ 📂 aprsd-repeat-plugins │ APRSD Plugins for the REPEAT service │ 1.0.12 │ Dec 2, 2022 │ No │
280
+ │ 📂 aprsd-telegram-plugin │ Ham Radio APRS APRSD plugin for Telegram IM service │ 0.1.3 │ Dec 2, 2022 │ No │
281
+ │ 📂 aprsd-twitter-plugin │ Python APRSD plugin to send tweets │ 0.3.0 │ Dec 7, 2021 │ No │
282
+ │ 📂 aprsd-slack-plugin │ Amateur radio APRS daemon which listens for messages and responds │ 1.0.5 │ Dec 18, 2022 │ No │
283
+ └──────────────────────────────┴────────────────────────────────────────────────────────────────────┴─────────┴──────────────┴────────────┘
284
+
285
+
286
+ 🐍 APRSD Installed 3rd party Plugins 🐍
287
+ ┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
288
+ ┃ Package Name ┃ Plugin Name ┃ Version ┃ Type ┃ Plugin Path ┃
289
+ ┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
290
+ │ aprsd-weewx-plugin │ WeewxMQTTPlugin │ 1.0 │ RegexCommand │ aprsd_weewx_plugin.weewx.WeewxMQTTPlugin │
291
+ └────────────────────┴─────────────────┴─────────┴──────────────┴──────────────────────────────────────────┘
292
+
285
293
 
286
294
 
287
295
  send-message
@@ -1,67 +1,67 @@
1
1
  aprsd/__init__.py,sha256=GiMknvhvMBWeMsJXiBS8slVBJdwX9h3FjnXqGjm8YZM,631
2
- aprsd/cli_helper.py,sha256=boita33bfPlgm-bWe8odsLSaByhVqxZKFvMYLmKctj8,3208
3
- aprsd/client.py,sha256=W6FTuj5M05-u0TFzbqsR51QHEokiEUDdXJEPmNir-8U,10189
2
+ aprsd/cli_helper.py,sha256=AgSSn6oTUdCDv4Ne1Jyg_0bi7GwINBBKotTLk_QE-cY,4568
3
+ aprsd/client.py,sha256=7NI_xFUoPaAyVHMIogpedZjWhMZaK5ZYEQWsk9aAukQ,10072
4
4
  aprsd/exception.py,sha256=FyeehwYENwsRKyrU2WmgEPmcHsDLjdGRAe35f01Bu5A,502
5
- aprsd/main.py,sha256=-SgwQh_59GvzggKq2LXo_K1WkwUaloOluHp5omnZITg,4614
5
+ aprsd/main.py,sha256=E78yXv6qPvzxatYF7fz5epWAYf8YpRJpt7sR9malhY0,4567
6
6
  aprsd/messaging.py,sha256=0zE2y0jJBTxTwwgt8_XmSeMZfBTO77ZBY0GyGe8DX_w,134
7
7
  aprsd/plugin.py,sha256=Y6MygWrv_dmx2s-1qQcr_u1mM36wqItWZDI-eUy1vgQ,16435
8
- aprsd/plugin_utils.py,sha256=hALEYHRWEHD-xWeptb5h9C5YuzRexY_3RgWiwkvhOgQ,2456
8
+ aprsd/plugin_utils.py,sha256=xKQbliwikJxw_E5TGK_BcBPXkHeJ1PqVxSCFcDbf1xg,2507
9
9
  aprsd/stats.py,sha256=iLuzy8yscY2mzJxpgtvN6tJxtM6q9Y8CCAlohIqQhKI,7101
10
- aprsd/wsgi.py,sha256=Z9Fw8_sg3dc-L_CwLTAGeP6B1qA_08HtKkU7Lrae_TA,11192
10
+ aprsd/wsgi.py,sha256=M3ll4V6JVY-LBS_k1WFG9QvChgdV1RhDCi9zqWvqhc0,10080
11
11
  aprsd/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- aprsd/clients/aprsis.py,sha256=hZDzW_DizhZUtwI_y7DosScbrkMTXD9BKTbJutNiJkw,7208
12
+ aprsd/clients/aprsis.py,sha256=rDVoP65k9FKZgCdjy7kSQLE6QaR2j2DXQcKshbKnlks,7156
13
13
  aprsd/clients/fake.py,sha256=gGBNYyz05AJP_5efmMKJ8wUC5KOF0lYRSDiiPaG9_xU,2066
14
14
  aprsd/clients/kiss.py,sha256=Cc26CbgDaJ9WfGfIHOhfTn7XdDnYWLLv85Xj4oD2_6U,3393
15
15
  aprsd/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  aprsd/cmds/completion.py,sha256=4gTd6QLs97qZARraSEgAjudthdSGURecjjmC6JZtXXk,1763
17
- aprsd/cmds/dev.py,sha256=L1W9-0_xofUgYqmGVlkB7t_EflK35NzPHII0hrDx-wA,3074
18
- aprsd/cmds/fetch_stats.py,sha256=O-XrsqiLg1DAdBHqM8-SzK1v4weTdrzPqmRztFNH1hg,5348
17
+ aprsd/cmds/dev.py,sha256=ob5vKomigQdHuFt7aWU0YLaeXKsWbm3dqyYTf0qztIc,4369
18
+ aprsd/cmds/fetch_stats.py,sha256=BgQcuDHLp7XiKGBFv_CI0RqqZTdvZMjG7bwl_Vm3UKs,5489
19
19
  aprsd/cmds/healthcheck.py,sha256=HhCFnaWNlyGbYiBZx_1APh4v36t8CUNGyi41mdcuSDg,2801
20
- aprsd/cmds/list_plugins.py,sha256=7f9Oq-1z4tGHKJAmj9Fe9Btz65d-ms9z2JV4v-pmttA,7920
20
+ aprsd/cmds/list_plugins.py,sha256=wGBEjINDDmvvW8wdiyuh7HsTUKxl69vxCvcDmgfyzRE,10667
21
21
  aprsd/cmds/listen.py,sha256=ndrQct8Vo1zrTS2Dh4FYD8TEhAsIjPnQZIyaQUHPum0,6241
22
22
  aprsd/cmds/send_message.py,sha256=9-ceqSM9Zgb-9FSr7DU2RlKm7BIn4Ft-LgPSaMG3_0g,4716
23
- aprsd/cmds/server.py,sha256=DldVqHmvMh0RvKmouYPZUmnGI-FQgc7reL47VvKDoN4,3416
24
- aprsd/cmds/webchat.py,sha256=tYznxI4on7ucY_76tc3QjKvH9spQICC3lRmgGweXBkk,13005
23
+ aprsd/cmds/server.py,sha256=4guhBvXQnZZq-tPE1RQ9EUOPiI9AH6STkL97_adbfDo,3777
24
+ aprsd/cmds/webchat.py,sha256=iVWxvI80DgshekiHb45sWfyVWDKvnQJm1l61jNWLwKA,20205
25
25
  aprsd/conf/__init__.py,sha256=6j-N6jT49OYcp8dD8oZGt7mxWSOSUnWXeTIZW_C0bmw,1725
26
26
  aprsd/conf/client.py,sha256=w_Z6Pc5LUYzJzDsfhCcnMBLkPi9njNdCGOe3GfbpGaA,3029
27
- aprsd/conf/common.py,sha256=XwL8gp-DlIq7gT_vqZGStWhAkPAPwtD2c4DgloYAysA,5860
28
- aprsd/conf/log.py,sha256=bqugLmcYGmpKu1i2_faAKsJJCK1xyinPuLZ9Mk5CVjI,1379
27
+ aprsd/conf/common.py,sha256=8K-6ClJrVWPO7lUyBIbvnSL20ujVrctKFaiZbHOTRzE,8121
28
+ aprsd/conf/log.py,sha256=v5C2Lda6x39IdamHpelOY6tDHPkqHyx_qmPF3WEmeAE,1424
29
29
  aprsd/conf/opts.py,sha256=Jq1DPyDdNyN2rbuHq8O-lF2Entkb9tFTbh9gjZwWC5s,2701
30
- aprsd/conf/plugin_common.py,sha256=9Jo_Vm7yoxzk23wyicjDKNi7Tch2vpNUuS9fd5HouCc,2308
30
+ aprsd/conf/plugin_common.py,sha256=HKNV2JKCJOPUqTdoFgc96mGNZLU6zNii2syjuJj8tAo,6253
31
31
  aprsd/conf/plugin_email.py,sha256=IB8G_vTCC-6HVGx9y1PP2vKXfXRzlEx9lEFXdIIGHzA,2332
32
32
  aprsd/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- aprsd/log/log.py,sha256=UTd9ME1A_AvOTB4C1bneA_n4ypcW5JVfnM-GnvzNQJs,2678
34
- aprsd/log/rich.py,sha256=pUwEoRlCYzhOuGOpJTT4Xmi4pZeSPalzUOk9g4CZlio,5545
35
- aprsd/packets/__init__.py,sha256=192dsnMSfhoXdBVGutv1-LwCBjGG869nUodJWy3N4uo,420
36
- aprsd/packets/core.py,sha256=BcnnA3YCrLP6teQniyGPdtjAWlO15KgEYVSsXH_fnjE,22158
33
+ aprsd/log/log.py,sha256=Lytim2gK7gm3VoMDqJkXS1s28lXuahz2vX1Z7cvn_zw,2698
34
+ aprsd/packets/__init__.py,sha256=h3cq6MCjvztM2GBeHagay0chEcJWKophT22PLktGYzg,434
35
+ aprsd/packets/core.py,sha256=I5ajk1EJoNPpOjndTG9kddaV8Y3x_gdxoa7TqOWwGCo,22655
37
36
  aprsd/packets/packet_list.py,sha256=CeDD9uV3YTnnXmH52rdAkN4AswY8A710fQ2NSLicCcw,2444
38
37
  aprsd/packets/seen_list.py,sha256=YnwnwsV89n8l-DbTe5WqD1YIUjCfobmQiSoI4rf5ioY,1071
39
38
  aprsd/packets/tracker.py,sha256=YD3-uYaaStO-3-_VvV7cYeDAtyJKTPimVLybc688_3U,3005
40
39
  aprsd/packets/watch_list.py,sha256=RBZiqAQ6Y3lm79z4tDa5sQCFIQRyWS8O-j9w3m0argE,2880
41
40
  aprsd/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
41
  aprsd/plugins/email.py,sha256=pQ3p90wmgO17iKRjYvtaqE6KEmenutFE6DavXm4Vep8,23073
43
- aprsd/plugins/fortune.py,sha256=d3jpGH9zZrkoxRpESWYnejfWgNCMI0NtY41yswVhQaE,1463
44
- aprsd/plugins/location.py,sha256=auywMafbb53Wd7OrFOvTsRpc5Rl-j0w1HUzRYKKB4LI,3287
42
+ aprsd/plugins/fortune.py,sha256=XCSIaZ9JXC3LZOMV5tSr3dAvbVvIn4xSUdWxpZHStfc,1573
43
+ aprsd/plugins/location.py,sha256=E1i-dO11br2bmmAqTjoFI2vzS_o0T6xwCakUCr05_qY,6464
45
44
  aprsd/plugins/notify.py,sha256=5Qk7P1ZsFl8pNYQMIBmVYnTcKua9gzvgkUwbrcQ6Byc,1969
46
45
  aprsd/plugins/ping.py,sha256=A3yLMPUDU-PA1Q98xStd0WM04MZvGn3FzVpGKjyoXDc,763
47
46
  aprsd/plugins/query.py,sha256=h7OWgjroB1wirDNCUZ-N0T7Z95fp0QoFNwS9c7fKptw,2458
48
47
  aprsd/plugins/time.py,sha256=DrxQ8l8D19krmGOZ3S2SNcZ4vzsiJ3Rz1BamaIHcLCg,3496
49
48
  aprsd/plugins/version.py,sha256=wlg1EtWjwQI-KcjCKhlOV0Y65zu0HsDZ5vmwaM3Rd7M,849
50
- aprsd/plugins/weather.py,sha256=miTca4ZxlMQVj8zccaUtjTTNLnMTm_HCBcuJ7y5SeWE,13287
49
+ aprsd/plugins/weather.py,sha256=A91pXUhwyAQ1oio9e0OlpvukIzXsexJB4gdb1AUOLA8,13356
51
50
  aprsd/rpc/__init__.py,sha256=rTKlOpldslhTAb6sOwJGhwcrU5CnhhdtALSI_GasA24,343
52
51
  aprsd/rpc/client.py,sha256=NDR_iWqGeMuyrgIP1usjRh8npg2OiN4S8ogGd7jgq3o,4641
53
52
  aprsd/rpc/server.py,sha256=xLlw3cx9P-g0xLDiBETg99lC9M8J9xXVdxTU0qbMoFg,2750
54
- aprsd/threads/__init__.py,sha256=_C2Zrm9k8o7PvU0SnakQ2LYEj-micLfPmy1VHUJAkxU,274
53
+ aprsd/threads/__init__.py,sha256=rTeA6Rt-pcpwUg30GsUnitRrcp4UPXfjshasP-Wwo4s,319
55
54
  aprsd/threads/aprsd.py,sha256=hPSFo58LN0qmx8gZCqk9zJYYhSo3xTvInDXStcS6a4o,2270
56
55
  aprsd/threads/keep_alive.py,sha256=KqX3weVSsGcKfiaKTCN8ZD0QSxYCxIVnWWXsYvbOvvE,4250
57
56
  aprsd/threads/log_monitor.py,sha256=iZgNIkG1YNN3UDXVu1T45oSAuDtjtzbJEglxR_lEiKw,2036
58
- aprsd/threads/rx.py,sha256=FseZIUhw0eFpgu3FfzW29LNJW0epsXLWrLrhTF3mMH8,12392
59
- aprsd/threads/tx.py,sha256=WVVWrvlGJvj7HNsSEzuRA8wcb8DBbdoGcCGI0s2QZ0U,6365
60
- aprsd/utils/__init__.py,sha256=F-qblMbpJCmuoOTuM1sOxjArCuVkYQa16PTHGFcneHw,3575
57
+ aprsd/threads/registry.py,sha256=5DuzNSwhOEwI0Gl5j9e286uqbxzKLSHzInfPy61r7PI,1702
58
+ aprsd/threads/rx.py,sha256=5P8m27lzDB0qjobQLk8b8XYSxxksjVqXC6XO3Tgml0I,12592
59
+ aprsd/threads/tx.py,sha256=Y_t22O_kPuLJH_vN2zsnxdtgWLpWDrZm07wN2fKlX-w,7694
60
+ aprsd/utils/__init__.py,sha256=Hf_JL45RHXA0U3GwZ2cfiEVRBBqY0KkxvJtC3ybJuKA,4206
61
61
  aprsd/utils/counter.py,sha256=oKCH1ID0BOJJ3SyDLhXzpBLAeHOoPnYQW9gaeu8wcF4,1156
62
62
  aprsd/utils/fuzzyclock.py,sha256=qKV8SYZhQGOHG9biF8TeueLb6RMppspx1Zg4IOy1Z10,3265
63
63
  aprsd/utils/json.py,sha256=I5PFv02rZTB15qbdhEKIwwT1j-glQaVboLJS7Xp8J60,1871
64
- aprsd/utils/objectstore.py,sha256=12TMmLtuIt5gTD1brYqIN_L3BZQ_43JUPJcCw9EzeA4,3200
64
+ aprsd/utils/objectstore.py,sha256=fhSlJo8LIlHHfpL7eDU9D63P5mscI_cBy3LvPiYSyTo,3401
65
65
  aprsd/utils/ring_buffer.py,sha256=lWWuw7lEbc2URhqAJfRLjpXBDLiK6UUWzk3j2VFnERQ,1111
66
66
  aprsd/utils/trace.py,sha256=oya2ElYKn04yanmAoynaCnETJHvEeI_du-DCIApZDsA,5558
67
67
  aprsd/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -108,9 +108,10 @@ aprsd/web/chat/static/images/aprs-symbols-16-1.png,sha256=cKj--7nEAir_Br_Zp3-vtU
108
108
  aprsd/web/chat/static/images/aprs-symbols-64-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
109
109
  aprsd/web/chat/static/images/aprs-symbols-64-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
110
110
  aprsd/web/chat/static/images/aprs-symbols-64-2.png,sha256=OIP7l9temgE-GfB8s29fytJ59GlFQ3TUpEqAA0Gzs2I,40716
111
+ aprsd/web/chat/static/images/globe.svg,sha256=x7kmRI-9gJaZI4FBlpG53K4ZscmqN_gajnzH-P4DzOI,1197
111
112
  aprsd/web/chat/static/js/gps.js,sha256=3H-bN8z6_uhDZFJjjJIPj2VNpmihoLK1_f9UyOdAAb4,2302
112
113
  aprsd/web/chat/static/js/main.js,sha256=q-EpkB1aTagoy6SKaD8bwoA8qtGQSeUkUMGVXdYxU68,1226
113
- aprsd/web/chat/static/js/send-message.js,sha256=R3Ne1uWRwD3Iv_HXCLGwWU_uJBgBJLjDanc_NL50b50,15787
114
+ aprsd/web/chat/static/js/send-message.js,sha256=w5cjXC911nVt4JcKjF5UhikKhc7R7AO2wzVMaIPUflE,18620
114
115
  aprsd/web/chat/static/js/tabs.js,sha256=cRePBekcExNQO54eRVGCnNXB1JHM9uURnv6LNoe8LMs,889
115
116
  aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js,sha256=gGVATfqL6AhR6ukxISDCnWUX6UkUakDC2XchR0dpCDo,80664
116
117
  aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js,sha256=_JqT3SQfawRcv_BIHPThkBvs0OEvtFFmqPF_lYI_Cxo,87533
@@ -120,11 +121,11 @@ aprsd/web/chat/static/js/upstream/semantic.min.js,sha256=AYdrntK9PGcU1ZsyD7fTBJ4
120
121
  aprsd/web/chat/static/js/upstream/socket.io.min.js,sha256=dYF5MG5zs6ekpbIOXBXelJXquX0gi_c48kkYm8tCaYE,64274
121
122
  aprsd/web/chat/static/json-viewer/jquery.json-viewer.css,sha256=rXfxviikI1RGZM3px6piq9ZL0YZuO5ETcO8-toY-DDY,1080
122
123
  aprsd/web/chat/static/json-viewer/jquery.json-viewer.js,sha256=klSHtWPkZv4zG4darvDEpAQ9hJFDqNbQrM-xDChm8Fo,5020
123
- aprsd/web/chat/templates/index.html,sha256=xxyiyDgAE7r_jaJrfrXLEdEgOKcuFVOPDYr1bE7hBro,6408
124
- aprsd-3.2.2.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
125
- aprsd-3.2.2.dist-info/METADATA,sha256=WzxmKz1sBJ8IHHniUL2TP0DRGmXLK4SmLC5CCBI7Jc8,23696
126
- aprsd-3.2.2.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
127
- aprsd-3.2.2.dist-info/entry_points.txt,sha256=4fReoJUB-bFqOUK6eeXYYCvTdVLprL7KVH0hWQRP9eM,171
128
- aprsd-3.2.2.dist-info/pbr.json,sha256=nw0gxXveIKaz3V6Sekzv4K-hxgzyUXhkApoqqOWUvi8,46
129
- aprsd-3.2.2.dist-info/top_level.txt,sha256=v1O96niUcJOTMh9aQnFRknbScJ6mMOwqurdbxeaeSjs,6
130
- aprsd-3.2.2.dist-info/RECORD,,
124
+ aprsd/web/chat/templates/index.html,sha256=vxa0VV3ZIGfv8x1VwCeamJhdyNQ1QpsU_tNHoIrBTXs,6566
125
+ aprsd-3.3.1.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
126
+ aprsd-3.3.1.dist-info/METADATA,sha256=NqiTMT3tadixMg96jfaI2erlBKSCnV-nqI8-76wM5cI,24038
127
+ aprsd-3.3.1.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
128
+ aprsd-3.3.1.dist-info/entry_points.txt,sha256=4fReoJUB-bFqOUK6eeXYYCvTdVLprL7KVH0hWQRP9eM,171
129
+ aprsd-3.3.1.dist-info/pbr.json,sha256=IQnKA75aOp451NIXVUhswWOZlCWPrOsdsdwJVaUKe04,46
130
+ aprsd-3.3.1.dist-info/top_level.txt,sha256=v1O96niUcJOTMh9aQnFRknbScJ6mMOwqurdbxeaeSjs,6
131
+ aprsd-3.3.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -0,0 +1 @@
1
+ {"git_version": "10d023d", "is_release": true}
aprsd/log/rich.py DELETED
@@ -1,160 +0,0 @@
1
- from datetime import datetime
2
- from logging import LogRecord
3
- from pathlib import Path
4
- from typing import TYPE_CHECKING, Callable, Iterable, List, Optional, Union
5
-
6
- from rich._log_render import LogRender
7
- from rich.logging import RichHandler
8
- from rich.text import Text, TextType
9
- from rich.traceback import Traceback
10
-
11
-
12
- if TYPE_CHECKING:
13
- from rich.console import Console, ConsoleRenderable, RenderableType
14
- from rich.table import Table
15
-
16
- from aprsd import utils
17
-
18
-
19
- FormatTimeCallable = Callable[[datetime], Text]
20
-
21
-
22
- class APRSDRichLogRender(LogRender):
23
-
24
- def __init__(
25
- self, *args,
26
- show_thread: bool = False,
27
- thread_width: Optional[int] = 10,
28
- **kwargs,
29
- ):
30
- super().__init__(*args, **kwargs)
31
- self.show_thread = show_thread
32
- self.thread_width = thread_width
33
-
34
- def __call__(
35
- self,
36
- console: "Console",
37
- renderables: Iterable["ConsoleRenderable"],
38
- log_time: Optional[datetime] = None,
39
- time_format: Optional[Union[str, FormatTimeCallable]] = None,
40
- level: TextType = "",
41
- path: Optional[str] = None,
42
- line_no: Optional[int] = None,
43
- link_path: Optional[str] = None,
44
- thread_name: Optional[str] = None,
45
- ) -> "Table":
46
- from rich.containers import Renderables
47
- from rich.table import Table
48
-
49
- output = Table.grid(padding=(0, 1))
50
- output.expand = True
51
- if self.show_time:
52
- output.add_column(style="log.time")
53
- if self.show_thread:
54
- rgb = str(utils.rgb_from_name(thread_name)).replace(" ", "")
55
- output.add_column(style=f"rgb{rgb}", width=self.thread_width)
56
- if self.show_level:
57
- output.add_column(style="log.level", width=self.level_width)
58
- output.add_column(ratio=1, style="log.message", overflow="fold")
59
- if self.show_path and path:
60
- output.add_column(style="log.path")
61
- row: List["RenderableType"] = []
62
- if self.show_time:
63
- log_time = log_time or console.get_datetime()
64
- time_format = time_format or self.time_format
65
- if callable(time_format):
66
- log_time_display = time_format(log_time)
67
- else:
68
- log_time_display = Text(log_time.strftime(time_format))
69
- if log_time_display == self._last_time and self.omit_repeated_times:
70
- row.append(Text(" " * len(log_time_display)))
71
- else:
72
- row.append(log_time_display)
73
- self._last_time = log_time_display
74
- if self.show_thread:
75
- row.append(thread_name)
76
- if self.show_level:
77
- row.append(level)
78
-
79
- row.append(Renderables(renderables))
80
- if self.show_path and path:
81
- path_text = Text()
82
- path_text.append(
83
- path, style=f"link file://{link_path}" if link_path else "",
84
- )
85
- if line_no:
86
- path_text.append(":")
87
- path_text.append(
88
- f"{line_no}",
89
- style=f"link file://{link_path}#{line_no}" if link_path else "",
90
- )
91
- row.append(path_text)
92
-
93
- output.add_row(*row)
94
- return output
95
-
96
-
97
- class APRSDRichHandler(RichHandler):
98
- """APRSD's extension of rich's RichHandler to show threads.
99
-
100
- show_thread (bool, optional): Show the name of the thread in log entry. Defaults to False.
101
- thread_width (int, optional): The number of characters to show for thread name. Defaults to 10.
102
- """
103
-
104
- def __init__(
105
- self, *args,
106
- show_thread: bool = True,
107
- thread_width: Optional[int] = 10,
108
- **kwargs,
109
- ):
110
- super().__init__(*args, **kwargs)
111
- self.show_thread = show_thread
112
- self.thread_width = thread_width
113
- kwargs["show_thread"] = show_thread
114
- kwargs["thread_width"] = thread_width
115
- self._log_render = APRSDRichLogRender(
116
- show_time=True,
117
- show_level=True,
118
- show_path=True,
119
- omit_repeated_times=False,
120
- level_width=None,
121
- show_thread=show_thread,
122
- thread_width=thread_width,
123
- )
124
-
125
- def render(
126
- self, *, record: LogRecord,
127
- traceback: Optional[Traceback],
128
- message_renderable: "ConsoleRenderable",
129
- ) -> "ConsoleRenderable":
130
- """Render log for display.
131
-
132
- Args:
133
- record (LogRecord): log Record.
134
- traceback (Optional[Traceback]): Traceback instance or None for no Traceback.
135
- message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.
136
-
137
- Returns:
138
- ConsoleRenderable: Renderable to display log.
139
- """
140
- path = Path(record.pathname).name
141
- level = self.get_level_text(record)
142
- time_format = None if self.formatter is None else self.formatter.datefmt
143
- log_time = datetime.fromtimestamp(record.created)
144
- thread_name = record.threadName
145
-
146
- log_renderable = self._log_render(
147
- self.console,
148
- [message_renderable] if not traceback else [
149
- message_renderable,
150
- traceback,
151
- ],
152
- log_time=log_time,
153
- time_format=time_format,
154
- level=level,
155
- path=path,
156
- line_no=record.lineno,
157
- link_path=record.pathname if self.enable_link_path else None,
158
- thread_name=thread_name,
159
- )
160
- return log_renderable
@@ -1 +0,0 @@
1
- {"git_version": "c0e2ef1", "is_release": true}
File without changes