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.
- aprsd/cli_helper.py +35 -1
- aprsd/client.py +3 -3
- aprsd/clients/aprsis.py +0 -1
- aprsd/cmds/dev.py +31 -2
- aprsd/cmds/fetch_stats.py +5 -1
- aprsd/cmds/list_plugins.py +87 -10
- aprsd/cmds/server.py +10 -1
- aprsd/cmds/webchat.py +245 -45
- aprsd/conf/common.py +68 -1
- aprsd/conf/log.py +8 -10
- aprsd/conf/plugin_common.py +108 -0
- aprsd/log/log.py +74 -66
- aprsd/main.py +11 -11
- aprsd/packets/__init__.py +2 -2
- aprsd/packets/core.py +20 -1
- aprsd/plugin_utils.py +1 -0
- aprsd/plugins/fortune.py +4 -1
- aprsd/plugins/location.py +88 -6
- aprsd/plugins/weather.py +7 -3
- aprsd/threads/__init__.py +1 -1
- aprsd/threads/registry.py +56 -0
- aprsd/threads/rx.py +13 -5
- aprsd/threads/tx.py +40 -0
- aprsd/utils/__init__.py +19 -0
- aprsd/utils/objectstore.py +7 -1
- aprsd/web/chat/static/images/globe.svg +3 -0
- aprsd/web/chat/static/js/send-message.js +107 -29
- aprsd/web/chat/templates/index.html +6 -2
- aprsd/wsgi.py +4 -39
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/METADATA +106 -98
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/RECORD +36 -35
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/WHEEL +1 -1
- aprsd-3.3.1.dist-info/pbr.json +1 -0
- aprsd/log/rich.py +0 -160
- aprsd-3.2.2.dist-info/pbr.json +0 -1
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/LICENSE +0 -0
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/entry_points.txt +0 -0
- {aprsd-3.2.2.dist-info → aprsd-3.3.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: aprsd
|
3
|
-
Version: 3.
|
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.
|
22
|
+
Requires-Dist: attrs ==23.2.0
|
23
23
|
Requires-Dist: ax253 ==0.1.5.post1
|
24
|
-
Requires-Dist: beautifulsoup4 ==4.12.
|
25
|
-
Requires-Dist: bidict ==0.
|
26
|
-
Requires-Dist: bitarray ==2.
|
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 ==
|
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.
|
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.
|
37
|
-
Requires-Dist: debtcollector ==
|
38
|
-
Requires-Dist:
|
39
|
-
Requires-Dist: dnspython ==2.
|
40
|
-
Requires-Dist: eventlet ==0.
|
41
|
-
Requires-Dist: flask ==3.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.
|
46
|
-
Requires-Dist: gevent ==
|
47
|
-
Requires-Dist: greenlet ==3.0.
|
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.
|
50
|
-
Requires-Dist: imapclient ==3.0.
|
51
|
-
Requires-Dist: importlib-metadata ==
|
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.
|
53
|
+
Requires-Dist: jinja2 ==3.1.3
|
54
54
|
Requires-Dist: kiss3 ==8.0.0
|
55
|
-
Requires-Dist:
|
56
|
-
Requires-Dist:
|
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 ==
|
59
|
-
Requires-Dist: oslo-config ==9.
|
60
|
-
Requires-Dist: oslo-i18n ==6.
|
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.
|
64
|
+
Requires-Dist: pluggy ==1.4.0
|
64
65
|
Requires-Dist: plumbum ==1.8.2
|
65
|
-
Requires-Dist: pygments ==2.
|
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.
|
69
|
-
Requires-Dist: python-socketio ==5.
|
70
|
-
Requires-Dist: pytz ==
|
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 ==
|
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.
|
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.
|
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
|
88
|
-
Requires-Dist: validators ==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.
|
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
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
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=
|
3
|
-
aprsd/client.py,sha256=
|
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
|
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=
|
8
|
+
aprsd/plugin_utils.py,sha256=xKQbliwikJxw_E5TGK_BcBPXkHeJ1PqVxSCFcDbf1xg,2507
|
9
9
|
aprsd/stats.py,sha256=iLuzy8yscY2mzJxpgtvN6tJxtM6q9Y8CCAlohIqQhKI,7101
|
10
|
-
aprsd/wsgi.py,sha256=
|
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=
|
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=
|
18
|
-
aprsd/cmds/fetch_stats.py,sha256=
|
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=
|
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=
|
24
|
-
aprsd/cmds/webchat.py,sha256=
|
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=
|
28
|
-
aprsd/conf/log.py,sha256=
|
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=
|
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=
|
34
|
-
aprsd/
|
35
|
-
aprsd/packets/
|
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=
|
44
|
-
aprsd/plugins/location.py,sha256=
|
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=
|
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=
|
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/
|
59
|
-
aprsd/threads/
|
60
|
-
aprsd/
|
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=
|
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=
|
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=
|
124
|
-
aprsd-3.
|
125
|
-
aprsd-3.
|
126
|
-
aprsd-3.
|
127
|
-
aprsd-3.
|
128
|
-
aprsd-3.
|
129
|
-
aprsd-3.
|
130
|
-
aprsd-3.
|
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,,
|
@@ -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
|
aprsd-3.2.2.dist-info/pbr.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"git_version": "c0e2ef1", "is_release": true}
|
File without changes
|
File without changes
|
File without changes
|