aprsd 4.0.2__tar.gz → 4.1.1__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 (165) hide show
  1. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/release_build.yml +1 -1
  2. {aprsd-4.0.2 → aprsd-4.1.1}/ChangeLog.md +52 -17
  3. {aprsd-4.0.2 → aprsd-4.1.1}/PKG-INFO +22 -20
  4. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cli_helper.py +36 -35
  5. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/base.py +14 -11
  6. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/drivers/aprsis.py +87 -35
  7. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/drivers/kiss.py +28 -5
  8. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/kiss.py +1 -0
  9. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/listen.py +84 -91
  10. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/send_message.py +30 -28
  11. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/server.py +29 -64
  12. aprsd-4.1.1/aprsd/conf/common.py +237 -0
  13. aprsd-4.1.1/aprsd/conf/log.py +73 -0
  14. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/log/log.py +31 -18
  15. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/main.py +22 -22
  16. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/__init__.py +6 -0
  17. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/core.py +5 -2
  18. aprsd-4.1.1/aprsd/packets/filter.py +58 -0
  19. aprsd-4.1.1/aprsd/packets/filters/dupe_filter.py +68 -0
  20. aprsd-4.1.1/aprsd/packets/filters/packet_type.py +53 -0
  21. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/packet_list.py +33 -27
  22. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugin.py +52 -52
  23. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugin_utils.py +20 -21
  24. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/weather.py +110 -109
  25. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/__init__.py +1 -2
  26. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/rx.py +83 -75
  27. aprsd-4.1.1/aprsd/threads/service.py +42 -0
  28. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/stats.py +4 -9
  29. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/objectstore.py +12 -13
  30. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/PKG-INFO +22 -20
  31. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/SOURCES.txt +5 -0
  32. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/requires.txt +21 -19
  33. {aprsd-4.0.2 → aprsd-4.1.1}/requirements-dev.txt +7 -7
  34. {aprsd-4.0.2 → aprsd-4.1.1}/requirements.in +1 -2
  35. {aprsd-4.0.2 → aprsd-4.1.1}/requirements.txt +15 -13
  36. aprsd-4.1.1/tests/plugins/__init__.py +0 -0
  37. aprsd-4.0.2/aprsd/conf/common.py +0 -238
  38. aprsd-4.0.2/aprsd/conf/log.py +0 -63
  39. {aprsd-4.0.2 → aprsd-4.1.1}/.coveragerc +0 -0
  40. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/authors.yml +0 -0
  41. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/codeql.yml +0 -0
  42. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/manual_build.yml +0 -0
  43. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/master-build.yml +0 -0
  44. {aprsd-4.0.2 → aprsd-4.1.1}/.github/workflows/python.yml +0 -0
  45. {aprsd-4.0.2 → aprsd-4.1.1}/.mailmap +0 -0
  46. {aprsd-4.0.2 → aprsd-4.1.1}/.pre-commit-config.yaml +0 -0
  47. {aprsd-4.0.2 → aprsd-4.1.1}/.readthedocs.yaml +0 -0
  48. {aprsd-4.0.2 → aprsd-4.1.1}/AUTHORS +0 -0
  49. {aprsd-4.0.2 → aprsd-4.1.1}/CONTRIBUTING.md +0 -0
  50. {aprsd-4.0.2 → aprsd-4.1.1}/INSTALL.txt +0 -0
  51. {aprsd-4.0.2 → aprsd-4.1.1}/LICENSE +0 -0
  52. {aprsd-4.0.2 → aprsd-4.1.1}/MANIFEST.in +0 -0
  53. {aprsd-4.0.2 → aprsd-4.1.1}/Makefile +0 -0
  54. {aprsd-4.0.2 → aprsd-4.1.1}/README.md +0 -0
  55. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/__init__.py +0 -0
  56. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/__init__.py +0 -0
  57. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/aprsis.py +0 -0
  58. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/drivers/__init__.py +0 -0
  59. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/drivers/fake.py +0 -0
  60. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/factory.py +0 -0
  61. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/fake.py +0 -0
  62. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/client/stats.py +0 -0
  63. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/__init__.py +0 -0
  64. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/completion.py +0 -0
  65. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/dev.py +0 -0
  66. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/fetch_stats.py +0 -0
  67. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/healthcheck.py +0 -0
  68. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/cmds/list_plugins.py +0 -0
  69. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/conf/__init__.py +0 -0
  70. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/conf/client.py +0 -0
  71. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/conf/opts.py +0 -0
  72. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/conf/plugin_common.py +0 -0
  73. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/exception.py +0 -0
  74. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/log/__init__.py +0 -0
  75. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/collector.py +0 -0
  76. {aprsd-4.0.2/aprsd/plugins → aprsd-4.1.1/aprsd/packets/filters}/__init__.py +0 -0
  77. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/log.py +0 -0
  78. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/seen_list.py +0 -0
  79. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/tracker.py +0 -0
  80. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/packets/watch_list.py +0 -0
  81. {aprsd-4.0.2/examples → aprsd-4.1.1/aprsd}/plugins/__init__.py +0 -0
  82. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/fortune.py +0 -0
  83. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/notify.py +0 -0
  84. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/ping.py +0 -0
  85. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/time.py +0 -0
  86. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/plugins/version.py +0 -0
  87. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/stats/__init__.py +0 -0
  88. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/stats/app.py +0 -0
  89. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/stats/collector.py +0 -0
  90. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/aprsd.py +0 -0
  91. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/keepalive.py +0 -0
  92. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/registry.py +0 -0
  93. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/threads/tx.py +0 -0
  94. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/__init__.py +0 -0
  95. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/counter.py +0 -0
  96. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/fuzzyclock.py +0 -0
  97. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/json.py +0 -0
  98. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/keepalive_collector.py +0 -0
  99. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/ring_buffer.py +0 -0
  100. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd/utils/trace.py +0 -0
  101. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd-lnav.json +0 -0
  102. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/dependency_links.txt +0 -0
  103. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/entry_points.txt +0 -0
  104. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd.egg-info/top_level.txt +0 -0
  105. {aprsd-4.0.2 → aprsd-4.1.1}/aprsd_logo.png +0 -0
  106. {aprsd-4.0.2 → aprsd-4.1.1}/docker/Dockerfile +0 -0
  107. {aprsd-4.0.2 → aprsd-4.1.1}/docker/bin/admin.sh +0 -0
  108. {aprsd-4.0.2 → aprsd-4.1.1}/docker/bin/healthcheck.sh +0 -0
  109. {aprsd-4.0.2 → aprsd-4.1.1}/docker/bin/listen.sh +0 -0
  110. {aprsd-4.0.2 → aprsd-4.1.1}/docker/bin/run.sh +0 -0
  111. {aprsd-4.0.2 → aprsd-4.1.1}/docker/bin/setup.sh +0 -0
  112. {aprsd-4.0.2 → aprsd-4.1.1}/docker/build.sh +0 -0
  113. {aprsd-4.0.2 → aprsd-4.1.1}/docker/docker-compose.yml +0 -0
  114. {aprsd-4.0.2 → aprsd-4.1.1}/docs/_static/.keep +0 -0
  115. {aprsd-4.0.2 → aprsd-4.1.1}/docs/_static/aprsd_overview.png +0 -0
  116. {aprsd-4.0.2 → aprsd-4.1.1}/docs/_static/aprsd_overview.svg +0 -0
  117. {aprsd-4.0.2 → aprsd-4.1.1}/docs/_templates/.keep +0 -0
  118. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.client.drivers.rst +0 -0
  119. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.client.rst +0 -0
  120. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.cmds.rst +0 -0
  121. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.conf.rst +0 -0
  122. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.log.rst +0 -0
  123. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.packets.rst +0 -0
  124. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.plugins.rst +0 -0
  125. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.rst +0 -0
  126. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.stats.rst +0 -0
  127. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.threads.rst +0 -0
  128. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/aprsd.utils.rst +0 -0
  129. {aprsd-4.0.2 → aprsd-4.1.1}/docs/apidoc/modules.rst +0 -0
  130. {aprsd-4.0.2 → aprsd-4.1.1}/docs/aprsd.drawio +0 -0
  131. {aprsd-4.0.2 → aprsd-4.1.1}/docs/changelog.rst +0 -0
  132. {aprsd-4.0.2 → aprsd-4.1.1}/docs/clean_docs.py +0 -0
  133. {aprsd-4.0.2 → aprsd-4.1.1}/docs/conf.py +0 -0
  134. {aprsd-4.0.2 → aprsd-4.1.1}/docs/configure.rst +0 -0
  135. {aprsd-4.0.2 → aprsd-4.1.1}/docs/index.rst +0 -0
  136. {aprsd-4.0.2 → aprsd-4.1.1}/docs/install.rst +0 -0
  137. {aprsd-4.0.2 → aprsd-4.1.1}/docs/links.rst +0 -0
  138. {aprsd-4.0.2 → aprsd-4.1.1}/docs/plugin.rst +0 -0
  139. {aprsd-4.0.2 → aprsd-4.1.1}/docs/readme.rst +0 -0
  140. {aprsd-4.0.2 → aprsd-4.1.1}/docs/server.rst +0 -0
  141. {aprsd-4.0.2/tests → aprsd-4.1.1/examples/plugins}/__init__.py +0 -0
  142. {aprsd-4.0.2 → aprsd-4.1.1}/examples/plugins/example_plugin.py +0 -0
  143. {aprsd-4.0.2 → aprsd-4.1.1}/gray.conf +0 -0
  144. {aprsd-4.0.2 → aprsd-4.1.1}/pyproject.toml +0 -0
  145. {aprsd-4.0.2 → aprsd-4.1.1}/requirements-dev.in +0 -0
  146. {aprsd-4.0.2 → aprsd-4.1.1}/setup.cfg +0 -0
  147. {aprsd-4.0.2 → aprsd-4.1.1}/setup.py +0 -0
  148. {aprsd-4.0.2/tests/cmds → aprsd-4.1.1/tests}/__init__.py +0 -0
  149. {aprsd-4.0.2 → aprsd-4.1.1}/tests/client/test_aprsis.py +0 -0
  150. {aprsd-4.0.2 → aprsd-4.1.1}/tests/client/test_client_base.py +0 -0
  151. {aprsd-4.0.2 → aprsd-4.1.1}/tests/client/test_factory.py +0 -0
  152. {aprsd-4.0.2/tests/plugins → aprsd-4.1.1/tests/cmds}/__init__.py +0 -0
  153. {aprsd-4.0.2 → aprsd-4.1.1}/tests/cmds/test_send_message.py +0 -0
  154. {aprsd-4.0.2 → aprsd-4.1.1}/tests/fake.py +0 -0
  155. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_fortune.py +0 -0
  156. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_notify.py +0 -0
  157. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_ping.py +0 -0
  158. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_time.py +0 -0
  159. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_version.py +0 -0
  160. {aprsd-4.0.2 → aprsd-4.1.1}/tests/plugins/test_weather.py +0 -0
  161. {aprsd-4.0.2 → aprsd-4.1.1}/tests/test_packets.py +0 -0
  162. {aprsd-4.0.2 → aprsd-4.1.1}/tests/test_plugin.py +0 -0
  163. {aprsd-4.0.2 → aprsd-4.1.1}/tools/fast8.sh +0 -0
  164. {aprsd-4.0.2 → aprsd-4.1.1}/tox.ini +0 -0
  165. {aprsd-4.0.2 → aprsd-4.1.1}/uv.lock +0 -0
@@ -41,8 +41,8 @@ jobs:
41
41
  platforms: linux/amd64,linux/arm64
42
42
  file: ./Dockerfile
43
43
  build-args: |
44
+ INSTALL_TYPE=pypi
44
45
  VERSION=${{ inputs.aprsd_version }}
45
- BRANCH=${{ inputs.aprsd_version }}
46
46
  BUILDX_QEMU_ENV=true
47
47
  push: true
48
48
  tags: |
@@ -4,6 +4,34 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ #### [4.1.1](https://github.com/craigerl/aprsd/compare/4.1.0...4.1.1)
8
+
9
+ > 5 March 2025
10
+
11
+ - Added new config to disable logging to console [`0fa5b07`](https://github.com/craigerl/aprsd/commit/0fa5b07d4bf4bc5d5aaad1de52b78058e472fe24)
12
+ - Added threads.service [`c1c89fd`](https://github.com/craigerl/aprsd/commit/c1c89fd2c2c69c5e6c5d29a736a7b89e3d45cfe2)
13
+ - Update requirements [`2b185ee`](https://github.com/craigerl/aprsd/commit/2b185ee1b84598c832d8a5d73753cb428854b932)
14
+ - Fixed some more ruff checks [`94ba915`](https://github.com/craigerl/aprsd/commit/94ba915ed44b11eaabc885e033669d67d8c341a5)
15
+
16
+ #### [4.1.0](https://github.com/craigerl/aprsd/compare/4.0.2...4.1.0)
17
+
18
+ > 20 February 2025
19
+
20
+ - Added new PacketFilter mechanism [`#184`](https://github.com/craigerl/aprsd/pull/184)
21
+ - Update to build from pypi [`3b57e75`](https://github.com/craigerl/aprsd/commit/3b57e7597d77303ffc03b082370283bb2fea2838)
22
+ - Updated APRSIS driver [`1606585`](https://github.com/craigerl/aprsd/commit/1606585d41f69133192199d139b53344bb320fa9)
23
+ - Updated packet_list to allow infinit max store [`19c12e7`](https://github.com/craigerl/aprsd/commit/19c12e70f30a6f1f7d223a2f0fd3bf1182579fa4)
24
+ - Update StatsStore to use existing lock [`227ddbf`](https://github.com/craigerl/aprsd/commit/227ddbf148be2e14d4b4f27e48a4b091a98f15df)
25
+ - Try and stop chardet logging! [`101904c`](https://github.com/craigerl/aprsd/commit/101904ca77d816ae9e70bc7d22e6d8516fc3c5ce)
26
+ - Fixed some pep8 failures. [`e9e7e6b`](https://github.com/craigerl/aprsd/commit/e9e7e6b59f9f93f3f09142e56407bc87603a44cb)
27
+ - updated gitignore [`fd517b3`](https://github.com/craigerl/aprsd/commit/fd517b32188fdf15835a74fbd515ce417e7ef1f5)
28
+ - Remove sleep in main RX thread [`6cd7e99`](https://github.com/craigerl/aprsd/commit/6cd7e997139e8f2687bee753d9e0d2b22b1c42a3)
29
+ - Changed Objectstore log to debug [`361663e`](https://github.com/craigerl/aprsd/commit/361663e7d2cf43bd2fd53da0d8c5205bb848dbc2)
30
+ - fix for None packet in rx thread [`d82a81a`](https://github.com/craigerl/aprsd/commit/d82a81a2c3c1a7f50177a0a6435a555daeb858aa)
31
+ - Fix runaway KISS driver on failed connnection [`b6da0eb`](https://github.com/craigerl/aprsd/commit/b6da0ebb0d2f4d7078dbbf91d8c03715412d89ea)
32
+ - CONF.logging.enable_color option added [`06bdb34`](https://github.com/craigerl/aprsd/commit/06bdb34642640d91ea96e3c6e8d8b5a4b8230611)
33
+ - Update Changelog for 4.1.0 release [`a3cda9f`](https://github.com/craigerl/aprsd/commit/a3cda9f37d4c9b955b523f46b2eb8cf412a84407)
34
+
7
35
  #### [4.0.2](https://github.com/craigerl/aprsd/compare/4.0.1...4.0.2)
8
36
 
9
37
  > 25 January 2025
@@ -16,6 +44,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
16
44
  - Added uv.lock [`2f26eb8`](https://github.com/craigerl/aprsd/commit/2f26eb86f44625547f72f7c3612494b1bc44bc99)
17
45
  - Fix the testing of fortune path [`3c4e200`](https://github.com/craigerl/aprsd/commit/3c4e200d700c24125479bb754b5f68bdf35b85a6)
18
46
  - update the install from github in Dockerfile [`bea4815`](https://github.com/craigerl/aprsd/commit/bea481555bc1270ab371a22c69973d648e526d54)
47
+ - Prep for 4.0.2 [`000adef`](https://github.com/craigerl/aprsd/commit/000adef6d4f2792d33980d59d37f4b139e0c693c)
19
48
 
20
49
  #### [4.0.1](https://github.com/craigerl/aprsd/compare/4.0.0...4.0.1)
21
50
 
@@ -24,11 +53,33 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
24
53
  - Update pyproject for README.rst -> md [`e080394`](https://github.com/craigerl/aprsd/commit/e08039431ebde92a162ab422c05391dc55d3d3fa)
25
54
  - Updated Changelog [`24f5672`](https://github.com/craigerl/aprsd/commit/24f567224cf8ecdebd51f49804425565883acb94)
26
55
 
27
- ### [4.0.0](https://github.com/craigerl/aprsd/compare/3.4.4...4.0.0)
56
+ ### [4.0.0](https://github.com/craigerl/aprsd/compare/3.5.0...4.0.0)
28
57
 
29
58
  > 24 January 2025
30
59
 
31
60
  - Migrate admin web out of aprsd. [`#183`](https://github.com/craigerl/aprsd/pull/183)
61
+ - Enable packet stats for listen command in Docker [`e5d8796`](https://github.com/craigerl/aprsd/commit/e5d8796cda1a007aa868c760b96b50b364351519)
62
+ - Added activity to README [`cdd297c`](https://github.com/craigerl/aprsd/commit/cdd297c5bbc8b93f4739f5850a3e5971ce8baeba)
63
+ - Added star history to readme [`02e2940`](https://github.com/craigerl/aprsd/commit/02e29405ce2f8310e4f87f68498dfd6575c2e43b)
64
+ - removed pytest from README [`1cba31f`](https://github.com/craigerl/aprsd/commit/1cba31f0ac9bd5ee532721a909fc752f023f3b06)
65
+ - Updated Docker for using alpine and uv [`24db814`](https://github.com/craigerl/aprsd/commit/24db814c82c9bb6634566d7428603bf7a9ae37d1)
66
+ - Update the admin and setup.sh for container [`044ea4c`](https://github.com/craigerl/aprsd/commit/044ea4cc9a0059101851d6e722e986ee236833e8)
67
+ - added healthcheck.sh [`1054999`](https://github.com/craigerl/aprsd/commit/10549995686b08e4c166f780efdec5bdae496cab)
68
+ - updated healthcheck.sh [`dabb48c`](https://github.com/craigerl/aprsd/commit/dabb48c6f64062c1fed8f83a4f0b8ffba0c206a5)
69
+ - try making image for webchat [`ba8acdc`](https://github.com/craigerl/aprsd/commit/ba8acdc5849fc7b2d8a1ee11af6f5e317cf30f45)
70
+ - Added APRSD logo [`0ed648f`](https://github.com/craigerl/aprsd/commit/0ed648f8f8a961dbbd9e22bcebadcde525ee41ae)
71
+ - Added plugin and extension links [`447451c`](https://github.com/craigerl/aprsd/commit/447451c6c97e1f2d3d0bf580db21ecd176690258)
72
+ - reduced logo size 50% [`cf4a29f`](https://github.com/craigerl/aprsd/commit/cf4a29f0cb3ed366b21ec3120a189614e0955180)
73
+ - Updated README.md TOC [`375a5e5`](https://github.com/craigerl/aprsd/commit/375a5e5b34718cadc6ee8a51484fc91441440a61)
74
+ - chore: update AUTHORS [skip ci] [`c556f51`](https://github.com/craigerl/aprsd/commit/c556f5126f725904822a75427475d46986f8e9f3)
75
+ - Updated requirements [`4a7a902`](https://github.com/craigerl/aprsd/commit/4a7a902a337759a352560d4d92dc314b1726412a)
76
+ - Updated ChangeLog for 4.0.0 [`934ebd2`](https://github.com/craigerl/aprsd/commit/934ebd236d044625b911dd8ca45293f6c5680a68)
77
+
78
+ #### [3.5.0](https://github.com/craigerl/aprsd/compare/3.4.4...3.5.0)
79
+
80
+ > 10 January 2025
81
+
82
+ - Migrate admin web out of aprsd. [`c48ff8d`](https://github.com/craigerl/aprsd/commit/c48ff8dfd4bd4ce2f95b36e71dce13da5446a658)
32
83
  - Remove webchat as a built in command. [`8f8887f`](https://github.com/craigerl/aprsd/commit/8f8887f0e496d960b0e71275893b75408a40fdb2)
33
84
  - Remove email plugin [`0880a35`](https://github.com/craigerl/aprsd/commit/0880a356e6df1a0924cbf6e815e68cba5f5c6cf1)
34
85
  - Fixed make clean [`ae28dbb`](https://github.com/craigerl/aprsd/commit/ae28dbb0e6bc216bf78c0bd9d7804f57b39091d1)
@@ -37,7 +88,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
37
88
  - Removed LocationPlugin from aprsd core [`3bba8a1`](https://github.com/craigerl/aprsd/commit/3bba8a19da88b0912064cea786bc9f8203038946)
38
89
  - Include haversine library [`bbdbb9a`](https://github.com/craigerl/aprsd/commit/bbdbb9aba189d536497ea3cd7d30911fe3d9d706)
39
90
  - Update Makefile [`caa4bb8`](https://github.com/craigerl/aprsd/commit/caa4bb8bd01cbd2e02024d75e1c8af97acf6c657)
40
- - Enable packet stats for listen command in Docker [`e5d8796`](https://github.com/craigerl/aprsd/commit/e5d8796cda1a007aa868c760b96b50b364351519)
41
91
  - Added new KeepAliveCollector [`30d1eb5`](https://github.com/craigerl/aprsd/commit/30d1eb57dd249c609f5b092d8084c40cadda7bd9)
42
92
  - Changed to ruff [`72d068c`](https://github.com/craigerl/aprsd/commit/72d068c0b8944c8c9eed494fc23de8d7179ee09b)
43
93
  - Changed README.rst -> README.md [`b1a830d`](https://github.com/craigerl/aprsd/commit/b1a830d54e9dec473074b34f9566f161bdec0030)
@@ -58,21 +108,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
58
108
  - Added .mailmap [`8d98546`](https://github.com/craigerl/aprsd/commit/8d9854605584fa35117af888fe219df610fb7cb4)
59
109
  - updated tools in pre-commit [`e4f82d6`](https://github.com/craigerl/aprsd/commit/e4f82d6054d4d859023423bccdd5c402d7a83494)
60
110
  - some cleanup [`e332d7c`](https://github.com/craigerl/aprsd/commit/e332d7c9d046066e2686ea0522ae06b86d2f162d)
61
- - Added activity to README [`cdd297c`](https://github.com/craigerl/aprsd/commit/cdd297c5bbc8b93f4739f5850a3e5971ce8baeba)
62
- - Added star history to readme [`02e2940`](https://github.com/craigerl/aprsd/commit/02e29405ce2f8310e4f87f68498dfd6575c2e43b)
63
- - removed pytest from README [`1cba31f`](https://github.com/craigerl/aprsd/commit/1cba31f0ac9bd5ee532721a909fc752f023f3b06)
64
- - Updated Docker for using alpine and uv [`24db814`](https://github.com/craigerl/aprsd/commit/24db814c82c9bb6634566d7428603bf7a9ae37d1)
65
- - Update the admin and setup.sh for container [`044ea4c`](https://github.com/craigerl/aprsd/commit/044ea4cc9a0059101851d6e722e986ee236833e8)
66
- - added healthcheck.sh [`1054999`](https://github.com/craigerl/aprsd/commit/10549995686b08e4c166f780efdec5bdae496cab)
67
- - updated healthcheck.sh [`dabb48c`](https://github.com/craigerl/aprsd/commit/dabb48c6f64062c1fed8f83a4f0b8ffba0c206a5)
68
- - try making image for webchat [`ba8acdc`](https://github.com/craigerl/aprsd/commit/ba8acdc5849fc7b2d8a1ee11af6f5e317cf30f45)
69
- - Added APRSD logo [`0ed648f`](https://github.com/craigerl/aprsd/commit/0ed648f8f8a961dbbd9e22bcebadcde525ee41ae)
70
- - Added plugin and extension links [`447451c`](https://github.com/craigerl/aprsd/commit/447451c6c97e1f2d3d0bf580db21ecd176690258)
71
- - reduced logo size 50% [`cf4a29f`](https://github.com/craigerl/aprsd/commit/cf4a29f0cb3ed366b21ec3120a189614e0955180)
72
- - Updated README.md TOC [`375a5e5`](https://github.com/craigerl/aprsd/commit/375a5e5b34718cadc6ee8a51484fc91441440a61)
73
- - chore: update AUTHORS [skip ci] [`c556f51`](https://github.com/craigerl/aprsd/commit/c556f5126f725904822a75427475d46986f8e9f3)
74
- - Updated requirements [`4a7a902`](https://github.com/craigerl/aprsd/commit/4a7a902a337759a352560d4d92dc314b1726412a)
75
- - Updated ChangeLog for 4.0.0 [`934ebd2`](https://github.com/craigerl/aprsd/commit/934ebd236d044625b911dd8ca45293f6c5680a68)
76
111
 
77
112
  #### [3.4.4](https://github.com/craigerl/aprsd/compare/3.4.3...3.4.4)
78
113
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: aprsd
3
- Version: 4.0.2
3
+ Version: 4.1.1
4
4
  Summary: APRSd is a APRS-IS server that can be used to connect to APRS-IS and send and receive APRS packets.
5
5
  Author-email: Craig Lamparter <craig@craiger.org>, "Walter A. Boring IV" <waboring@hemna.com>, Emre Saglam <emresaglam@gmail.com>, Jason Martin <jhmartin@toger.us>, John <johng42@users.noreply.github.com>, Martiros Shakhzadyan <vrzh@vrzh.net>, Zoe Moore <zoenb@mailbox.org>, ranguli <hello@joshmurphy.ca>
6
6
  Maintainer-email: Craig Lamparter <craig@craiger.org>, "Walter A. Boring IV" <waboring@hemna.com>
@@ -202,13 +202,12 @@ Description-Content-Type: text/markdown
202
202
  License-File: LICENSE
203
203
  License-File: AUTHORS
204
204
  Requires-Dist: aprslib==0.7.2
205
- Requires-Dist: attrs==24.3.0
205
+ Requires-Dist: attrs==25.1.0
206
206
  Requires-Dist: ax253==0.1.5.post1
207
- Requires-Dist: bitarray==3.0.0
208
- Requires-Dist: certifi==2024.12.14
207
+ Requires-Dist: bitarray==3.1.0
208
+ Requires-Dist: certifi==2025.1.31
209
209
  Requires-Dist: charset-normalizer==3.4.1
210
210
  Requires-Dist: click==8.1.8
211
- Requires-Dist: commonmark==0.9.1
212
211
  Requires-Dist: dataclasses-json==0.6.7
213
212
  Requires-Dist: debtcollector==3.0.0
214
213
  Requires-Dist: haversine==2.9.0
@@ -216,39 +215,42 @@ Requires-Dist: idna==3.10
216
215
  Requires-Dist: importlib-metadata==8.6.1
217
216
  Requires-Dist: kiss3==8.0.0
218
217
  Requires-Dist: loguru==0.7.3
219
- Requires-Dist: marshmallow==3.26.0
218
+ Requires-Dist: markdown-it-py==3.0.0
219
+ Requires-Dist: marshmallow==3.26.1
220
+ Requires-Dist: mdurl==0.1.2
220
221
  Requires-Dist: mypy-extensions==1.0.0
221
222
  Requires-Dist: netaddr==1.3.0
222
- Requires-Dist: oslo-config==9.7.0
223
- Requires-Dist: oslo-i18n==6.5.0
223
+ Requires-Dist: oslo-config==9.7.1
224
+ Requires-Dist: oslo-i18n==6.5.1
224
225
  Requires-Dist: packaging==24.2
225
- Requires-Dist: pbr==6.1.0
226
+ Requires-Dist: pbr==6.1.1
226
227
  Requires-Dist: pluggy==1.5.0
227
228
  Requires-Dist: pygments==2.19.1
228
229
  Requires-Dist: pyserial==3.5
229
230
  Requires-Dist: pyserial-asyncio==0.6
230
- Requires-Dist: pytz==2024.2
231
+ Requires-Dist: pytz==2025.1
231
232
  Requires-Dist: pyyaml==6.0.2
232
233
  Requires-Dist: requests==2.32.3
233
234
  Requires-Dist: rfc3986==2.0.0
234
- Requires-Dist: rich==12.6.0
235
+ Requires-Dist: rich==13.9.4
235
236
  Requires-Dist: rush==2021.4.0
236
- Requires-Dist: stevedore==5.4.0
237
+ Requires-Dist: setuptools==75.8.2
238
+ Requires-Dist: stevedore==5.4.1
237
239
  Requires-Dist: thesmuggler==1.0.1
238
240
  Requires-Dist: timeago==1.0.16
239
241
  Requires-Dist: typing-extensions==4.12.2
240
242
  Requires-Dist: typing-inspect==0.9.0
241
- Requires-Dist: tzlocal==5.2
243
+ Requires-Dist: tzlocal==5.3
242
244
  Requires-Dist: update-checker==0.18.0
243
245
  Requires-Dist: urllib3==2.3.0
244
246
  Requires-Dist: wrapt==1.17.2
245
247
  Requires-Dist: zipp==3.21.0
246
248
  Provides-Extra: dev
247
249
  Requires-Dist: alabaster==1.0.0; extra == "dev"
248
- Requires-Dist: babel==2.16.0; extra == "dev"
250
+ Requires-Dist: babel==2.17.0; extra == "dev"
249
251
  Requires-Dist: build==1.2.2.post1; extra == "dev"
250
- Requires-Dist: cachetools==5.5.1; extra == "dev"
251
- Requires-Dist: certifi==2024.12.14; extra == "dev"
252
+ Requires-Dist: cachetools==5.5.2; extra == "dev"
253
+ Requires-Dist: certifi==2025.1.31; extra == "dev"
252
254
  Requires-Dist: cfgv==3.4.0; extra == "dev"
253
255
  Requires-Dist: chardet==5.2.0; extra == "dev"
254
256
  Requires-Dist: charset-normalizer==3.4.1; extra == "dev"
@@ -257,7 +259,7 @@ Requires-Dist: colorama==0.4.6; extra == "dev"
257
259
  Requires-Dist: distlib==0.3.9; extra == "dev"
258
260
  Requires-Dist: docutils==0.21.2; extra == "dev"
259
261
  Requires-Dist: filelock==3.17.0; extra == "dev"
260
- Requires-Dist: identify==2.6.6; extra == "dev"
262
+ Requires-Dist: identify==2.6.8; extra == "dev"
261
263
  Requires-Dist: idna==3.10; extra == "dev"
262
264
  Requires-Dist: imagesize==1.4.1; extra == "dev"
263
265
  Requires-Dist: jinja2==3.1.5; extra == "dev"
@@ -266,7 +268,7 @@ Requires-Dist: markupsafe==3.0.2; extra == "dev"
266
268
  Requires-Dist: mistune==0.8.4; extra == "dev"
267
269
  Requires-Dist: nodeenv==1.9.1; extra == "dev"
268
270
  Requires-Dist: packaging==24.2; extra == "dev"
269
- Requires-Dist: pip==24.3.1; extra == "dev"
271
+ Requires-Dist: pip==25.0.1; extra == "dev"
270
272
  Requires-Dist: pip-tools==7.4.1; extra == "dev"
271
273
  Requires-Dist: platformdirs==4.3.6; extra == "dev"
272
274
  Requires-Dist: pluggy==1.5.0; extra == "dev"
@@ -276,7 +278,7 @@ Requires-Dist: pyproject-api==1.9.0; extra == "dev"
276
278
  Requires-Dist: pyproject-hooks==1.2.0; extra == "dev"
277
279
  Requires-Dist: pyyaml==6.0.2; extra == "dev"
278
280
  Requires-Dist: requests==2.32.3; extra == "dev"
279
- Requires-Dist: setuptools==75.8.0; extra == "dev"
281
+ Requires-Dist: setuptools==75.8.2; extra == "dev"
280
282
  Requires-Dist: snowballstemmer==2.2.0; extra == "dev"
281
283
  Requires-Dist: sphinx==8.1.3; extra == "dev"
282
284
  Requires-Dist: sphinxcontrib-applehelp==2.0.0; extra == "dev"
@@ -289,7 +291,7 @@ Requires-Dist: tomli==2.2.1; extra == "dev"
289
291
  Requires-Dist: tox==4.24.1; extra == "dev"
290
292
  Requires-Dist: typing-extensions==4.12.2; extra == "dev"
291
293
  Requires-Dist: urllib3==2.3.0; extra == "dev"
292
- Requires-Dist: virtualenv==20.29.1; extra == "dev"
294
+ Requires-Dist: virtualenv==20.29.2; extra == "dev"
293
295
  Requires-Dist: wheel==0.45.1; extra == "dev"
294
296
 
295
297
  # APRSD - Ham radio APRS-IS Message platform software
@@ -13,35 +13,35 @@ from aprsd.utils import trace
13
13
 
14
14
  CONF = cfg.CONF
15
15
  home = str(Path.home())
16
- DEFAULT_CONFIG_DIR = f"{home}/.config/aprsd/"
17
- DEFAULT_SAVE_FILE = f"{home}/.config/aprsd/aprsd.p"
18
- DEFAULT_CONFIG_FILE = f"{home}/.config/aprsd/aprsd.conf"
16
+ DEFAULT_CONFIG_DIR = f'{home}/.config/aprsd/'
17
+ DEFAULT_SAVE_FILE = f'{home}/.config/aprsd/aprsd.p'
18
+ DEFAULT_CONFIG_FILE = f'{home}/.config/aprsd/aprsd.conf'
19
19
 
20
20
 
21
- F = t.TypeVar("F", bound=t.Callable[..., t.Any])
21
+ F = t.TypeVar('F', bound=t.Callable[..., t.Any])
22
22
 
23
23
  common_options = [
24
24
  click.option(
25
- "--loglevel",
26
- default="INFO",
25
+ '--loglevel',
26
+ default='INFO',
27
27
  show_default=True,
28
28
  type=click.Choice(
29
- ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"],
29
+ ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'],
30
30
  case_sensitive=False,
31
31
  ),
32
32
  show_choices=True,
33
- help="The log level to use for aprsd.log",
33
+ help='The log level to use for aprsd.log',
34
34
  ),
35
35
  click.option(
36
- "-c",
37
- "--config",
38
- "config_file",
36
+ '-c',
37
+ '--config',
38
+ 'config_file',
39
39
  show_default=True,
40
40
  default=DEFAULT_CONFIG_FILE,
41
- help="The aprsd config file to use for options.",
41
+ help='The aprsd config file to use for options.',
42
42
  ),
43
43
  click.option(
44
- "--quiet",
44
+ '--quiet',
45
45
  is_flag=True,
46
46
  default=False,
47
47
  help="Don't log to stdout",
@@ -59,7 +59,7 @@ class AliasedGroup(click.Group):
59
59
  """
60
60
 
61
61
  def decorator(f):
62
- aliases = kwargs.pop("aliases", [])
62
+ aliases = kwargs.pop('aliases', [])
63
63
  cmd = click.decorators.command(*args, **kwargs)(f)
64
64
  self.add_command(cmd)
65
65
  for alias in aliases:
@@ -77,7 +77,7 @@ class AliasedGroup(click.Group):
77
77
  """
78
78
 
79
79
  def decorator(f):
80
- aliases = kwargs.pop("aliases", [])
80
+ aliases = kwargs.pop('aliases', [])
81
81
  cmd = click.decorators.group(*args, **kwargs)(f)
82
82
  self.add_command(cmd)
83
83
  for alias in aliases:
@@ -101,36 +101,37 @@ def process_standard_options(f: F) -> F:
101
101
  ctx = args[0]
102
102
  ctx.ensure_object(dict)
103
103
  config_file_found = True
104
- if kwargs["config_file"]:
105
- default_config_files = [kwargs["config_file"]]
104
+ if kwargs['config_file']:
105
+ default_config_files = [kwargs['config_file']]
106
106
  else:
107
107
  default_config_files = None
108
+
108
109
  try:
109
110
  CONF(
110
111
  [],
111
- project="aprsd",
112
+ project='aprsd',
112
113
  version=aprsd.__version__,
113
114
  default_config_files=default_config_files,
114
115
  )
115
116
  except cfg.ConfigFilesNotFoundError:
116
117
  config_file_found = False
117
- ctx.obj["loglevel"] = kwargs["loglevel"]
118
+ ctx.obj['loglevel'] = kwargs['loglevel']
118
119
  # ctx.obj["config_file"] = kwargs["config_file"]
119
- ctx.obj["quiet"] = kwargs["quiet"]
120
+ ctx.obj['quiet'] = kwargs['quiet']
120
121
  log.setup_logging(
121
- ctx.obj["loglevel"],
122
- ctx.obj["quiet"],
122
+ ctx.obj['loglevel'],
123
+ ctx.obj['quiet'],
123
124
  )
124
125
  if CONF.trace_enabled:
125
- trace.setup_tracing(["method", "api"])
126
+ trace.setup_tracing(['method', 'api'])
126
127
 
127
128
  if not config_file_found:
128
- LOG = logging.getLogger("APRSD") # noqa: N806
129
+ LOG = logging.getLogger('APRSD') # noqa: N806
129
130
  LOG.error("No config file found!! run 'aprsd sample-config'")
130
131
 
131
- del kwargs["loglevel"]
132
- del kwargs["config_file"]
133
- del kwargs["quiet"]
132
+ del kwargs['loglevel']
133
+ del kwargs['config_file']
134
+ del kwargs['quiet']
134
135
  return f(*args, **kwargs)
135
136
 
136
137
  return update_wrapper(t.cast(F, new_func), f)
@@ -142,17 +143,17 @@ def process_standard_options_no_config(f: F) -> F:
142
143
  def new_func(*args, **kwargs):
143
144
  ctx = args[0]
144
145
  ctx.ensure_object(dict)
145
- ctx.obj["loglevel"] = kwargs["loglevel"]
146
- ctx.obj["config_file"] = kwargs["config_file"]
147
- ctx.obj["quiet"] = kwargs["quiet"]
146
+ ctx.obj['loglevel'] = kwargs['loglevel']
147
+ ctx.obj['config_file'] = kwargs['config_file']
148
+ ctx.obj['quiet'] = kwargs['quiet']
148
149
  log.setup_logging(
149
- ctx.obj["loglevel"],
150
- ctx.obj["quiet"],
150
+ ctx.obj['loglevel'],
151
+ ctx.obj['quiet'],
151
152
  )
152
153
 
153
- del kwargs["loglevel"]
154
- del kwargs["config_file"]
155
- del kwargs["quiet"]
154
+ del kwargs['loglevel']
155
+ del kwargs['config_file']
156
+ del kwargs['quiet']
156
157
  return f(*args, **kwargs)
157
158
 
158
159
  return update_wrapper(t.cast(F, new_func), f)
@@ -9,7 +9,7 @@ from aprsd.packets import core
9
9
  from aprsd.utils import keepalive_collector
10
10
 
11
11
  CONF = cfg.CONF
12
- LOG = logging.getLogger("APRSD")
12
+ LOG = logging.getLogger('APRSD')
13
13
 
14
14
 
15
15
  class APRSClient:
@@ -20,8 +20,8 @@ class APRSClient:
20
20
 
21
21
  connected = False
22
22
  login_status = {
23
- "success": False,
24
- "message": None,
23
+ 'success': False,
24
+ 'message': None,
25
25
  }
26
26
  filter = None
27
27
  lock = threading.Lock()
@@ -59,17 +59,20 @@ class APRSClient:
59
59
 
60
60
  @property
61
61
  def login_success(self):
62
- return self.login_status.get("success", False)
62
+ return self.login_status.get('success', False)
63
63
 
64
64
  @property
65
65
  def login_failure(self):
66
- return self.login_status["message"]
66
+ return self.login_status['message']
67
67
 
68
68
  def set_filter(self, filter):
69
69
  self.filter = filter
70
70
  if self._client:
71
71
  self._client.set_filter(filter)
72
72
 
73
+ def get_filter(self):
74
+ return self.filter
75
+
73
76
  @property
74
77
  def client(self):
75
78
  if not self._client:
@@ -80,16 +83,16 @@ class APRSClient:
80
83
  try:
81
84
  self._client = self.setup_connection()
82
85
  if self.filter:
83
- LOG.info("Creating APRS client filter")
86
+ LOG.info('Creating APRS client filter')
84
87
  self._client.set_filter(self.filter)
85
88
  except Exception as e:
86
- LOG.error(f"Failed to create APRS client: {e}")
89
+ LOG.error(f'Failed to create APRS client: {e}')
87
90
  self._client = None
88
91
  raise
89
92
 
90
93
  def stop(self):
91
94
  if self._client:
92
- LOG.info("Stopping client connection.")
95
+ LOG.info('Stopping client connection.')
93
96
  self._client.stop()
94
97
 
95
98
  def send(self, packet: core.Packet) -> None:
@@ -103,16 +106,16 @@ class APRSClient:
103
106
  @wrapt.synchronized(lock)
104
107
  def reset(self) -> None:
105
108
  """Call this to force a rebuild/reconnect."""
106
- LOG.info("Resetting client connection.")
109
+ LOG.info('Resetting client connection.')
107
110
  if self._client:
108
111
  self._client.close()
109
112
  del self._client
110
113
  self._create_client()
111
114
  else:
112
- LOG.warning("Client not initialized, nothing to reset.")
115
+ LOG.warning('Client not initialized, nothing to reset.')
113
116
 
114
117
  # Recreate the client
115
- LOG.info(f"Creating new client {self.client}")
118
+ LOG.info(f'Creating new client {self.client}')
116
119
 
117
120
  @abc.abstractmethod
118
121
  def setup_connection(self):