aprsd 1.0.0__py3-none-any.whl → 3.4.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. aprsd/__init__.py +6 -4
  2. aprsd/cli_helper.py +151 -0
  3. aprsd/client/__init__.py +13 -0
  4. aprsd/client/aprsis.py +132 -0
  5. aprsd/client/base.py +105 -0
  6. aprsd/client/drivers/__init__.py +0 -0
  7. aprsd/client/drivers/aprsis.py +228 -0
  8. aprsd/client/drivers/fake.py +73 -0
  9. aprsd/client/drivers/kiss.py +119 -0
  10. aprsd/client/factory.py +88 -0
  11. aprsd/client/fake.py +48 -0
  12. aprsd/client/kiss.py +103 -0
  13. aprsd/client/stats.py +38 -0
  14. aprsd/cmds/__init__.py +0 -0
  15. aprsd/cmds/completion.py +22 -0
  16. aprsd/cmds/dev.py +162 -0
  17. aprsd/cmds/fetch_stats.py +156 -0
  18. aprsd/cmds/healthcheck.py +86 -0
  19. aprsd/cmds/list_plugins.py +319 -0
  20. aprsd/cmds/listen.py +231 -0
  21. aprsd/cmds/send_message.py +171 -0
  22. aprsd/cmds/server.py +137 -0
  23. aprsd/cmds/webchat.py +674 -0
  24. aprsd/conf/__init__.py +56 -0
  25. aprsd/conf/client.py +131 -0
  26. aprsd/conf/common.py +301 -0
  27. aprsd/conf/log.py +65 -0
  28. aprsd/conf/opts.py +80 -0
  29. aprsd/conf/plugin_common.py +182 -0
  30. aprsd/conf/plugin_email.py +105 -0
  31. aprsd/exception.py +13 -0
  32. aprsd/log/__init__.py +0 -0
  33. aprsd/log/log.py +138 -0
  34. aprsd/main.py +104 -867
  35. aprsd/packets/__init__.py +20 -0
  36. aprsd/packets/collector.py +79 -0
  37. aprsd/packets/core.py +823 -0
  38. aprsd/packets/log.py +161 -0
  39. aprsd/packets/packet_list.py +110 -0
  40. aprsd/packets/seen_list.py +49 -0
  41. aprsd/packets/tracker.py +103 -0
  42. aprsd/packets/watch_list.py +119 -0
  43. aprsd/plugin.py +474 -284
  44. aprsd/plugin_utils.py +86 -0
  45. aprsd/plugins/__init__.py +0 -0
  46. aprsd/plugins/email.py +709 -0
  47. aprsd/plugins/fortune.py +61 -0
  48. aprsd/plugins/location.py +179 -0
  49. aprsd/plugins/notify.py +61 -0
  50. aprsd/plugins/ping.py +31 -0
  51. aprsd/plugins/time.py +115 -0
  52. aprsd/plugins/version.py +31 -0
  53. aprsd/plugins/weather.py +405 -0
  54. aprsd/stats/__init__.py +20 -0
  55. aprsd/stats/app.py +49 -0
  56. aprsd/stats/collector.py +37 -0
  57. aprsd/threads/__init__.py +11 -0
  58. aprsd/threads/aprsd.py +119 -0
  59. aprsd/threads/keep_alive.py +131 -0
  60. aprsd/threads/log_monitor.py +121 -0
  61. aprsd/threads/registry.py +56 -0
  62. aprsd/threads/rx.py +354 -0
  63. aprsd/threads/stats.py +44 -0
  64. aprsd/threads/tx.py +255 -0
  65. aprsd/utils/__init__.py +218 -0
  66. aprsd/utils/counter.py +51 -0
  67. aprsd/utils/json.py +80 -0
  68. aprsd/utils/objectstore.py +123 -0
  69. aprsd/utils/ring_buffer.py +40 -0
  70. aprsd/utils/trace.py +180 -0
  71. aprsd/web/__init__.py +0 -0
  72. aprsd/web/admin/__init__.py +0 -0
  73. aprsd/web/admin/static/css/index.css +84 -0
  74. aprsd/web/admin/static/css/prism.css +4 -0
  75. aprsd/web/admin/static/css/tabs.css +35 -0
  76. aprsd/web/admin/static/images/Untitled.png +0 -0
  77. aprsd/web/admin/static/images/aprs-symbols-16-0.png +0 -0
  78. aprsd/web/admin/static/images/aprs-symbols-16-1.png +0 -0
  79. aprsd/web/admin/static/images/aprs-symbols-64-0.png +0 -0
  80. aprsd/web/admin/static/images/aprs-symbols-64-1.png +0 -0
  81. aprsd/web/admin/static/images/aprs-symbols-64-2.png +0 -0
  82. aprsd/web/admin/static/js/charts.js +235 -0
  83. aprsd/web/admin/static/js/echarts.js +465 -0
  84. aprsd/web/admin/static/js/logs.js +26 -0
  85. aprsd/web/admin/static/js/main.js +231 -0
  86. aprsd/web/admin/static/js/prism.js +12 -0
  87. aprsd/web/admin/static/js/send-message.js +114 -0
  88. aprsd/web/admin/static/js/tabs.js +28 -0
  89. aprsd/web/admin/templates/index.html +196 -0
  90. aprsd/web/chat/static/css/chat.css +115 -0
  91. aprsd/web/chat/static/css/index.css +66 -0
  92. aprsd/web/chat/static/css/style.css.map +1 -0
  93. aprsd/web/chat/static/css/tabs.css +41 -0
  94. aprsd/web/chat/static/css/upstream/bootstrap.min.css +6 -0
  95. aprsd/web/chat/static/css/upstream/font.woff2 +0 -0
  96. aprsd/web/chat/static/css/upstream/google-fonts.css +23 -0
  97. aprsd/web/chat/static/css/upstream/jquery-ui.css +1311 -0
  98. aprsd/web/chat/static/css/upstream/jquery.toast.css +28 -0
  99. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  100. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  101. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  102. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  103. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff +0 -0
  104. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2 +0 -0
  105. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff +0 -0
  106. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  107. aprsd/web/chat/static/images/Untitled.png +0 -0
  108. aprsd/web/chat/static/images/aprs-symbols-16-0.png +0 -0
  109. aprsd/web/chat/static/images/aprs-symbols-16-1.png +0 -0
  110. aprsd/web/chat/static/images/aprs-symbols-64-0.png +0 -0
  111. aprsd/web/chat/static/images/aprs-symbols-64-1.png +0 -0
  112. aprsd/web/chat/static/images/aprs-symbols-64-2.png +0 -0
  113. aprsd/web/chat/static/images/globe.svg +3 -0
  114. aprsd/web/chat/static/js/gps.js +84 -0
  115. aprsd/web/chat/static/js/main.js +45 -0
  116. aprsd/web/chat/static/js/send-message.js +585 -0
  117. aprsd/web/chat/static/js/tabs.js +28 -0
  118. aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js +7 -0
  119. aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js +2 -0
  120. aprsd/web/chat/static/js/upstream/jquery-ui.min.js +13 -0
  121. aprsd/web/chat/static/js/upstream/jquery.toast.js +374 -0
  122. aprsd/web/chat/static/js/upstream/semantic.min.js +11 -0
  123. aprsd/web/chat/static/js/upstream/socket.io.min.js +7 -0
  124. aprsd/web/chat/templates/index.html +139 -0
  125. aprsd/wsgi.py +315 -0
  126. aprsd-3.4.2.dist-info/AUTHORS +13 -0
  127. aprsd-3.4.2.dist-info/LICENSE +175 -0
  128. aprsd-3.4.2.dist-info/METADATA +793 -0
  129. aprsd-3.4.2.dist-info/RECORD +133 -0
  130. {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/WHEEL +1 -1
  131. aprsd-3.4.2.dist-info/entry_points.txt +8 -0
  132. aprsd/fake_aprs.py +0 -83
  133. aprsd/utils.py +0 -166
  134. aprsd-1.0.0.dist-info/AUTHORS +0 -6
  135. aprsd-1.0.0.dist-info/METADATA +0 -181
  136. aprsd-1.0.0.dist-info/RECORD +0 -13
  137. aprsd-1.0.0.dist-info/entry_points.txt +0 -4
  138. aprsd-1.0.0.dist-info/pbr.json +0 -1
  139. /aprsd/{fuzzyclock.py → utils/fuzzyclock.py} +0 -0
  140. {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,133 @@
1
+ aprsd/__init__.py,sha256=ci_49KK2a4GXyxcM2lFZfNAOsBfXzh0yayIGQazw56I,687
2
+ aprsd/cli_helper.py,sha256=AgSSn6oTUdCDv4Ne1Jyg_0bi7GwINBBKotTLk_QE-cY,4568
3
+ aprsd/exception.py,sha256=FyeehwYENwsRKyrU2WmgEPmcHsDLjdGRAe35f01Bu5A,502
4
+ aprsd/main.py,sha256=lNK3vogRN2ikSgBl-5gMxN3kwGq_ePsSYKZFz6f0FDQ,4663
5
+ aprsd/plugin.py,sha256=qgX_XW_U0LA0xcugMS2z6fdTGAm4DD2d3mo_JG3rfZU,17327
6
+ aprsd/plugin_utils.py,sha256=xKQbliwikJxw_E5TGK_BcBPXkHeJ1PqVxSCFcDbf1xg,2507
7
+ aprsd/wsgi.py,sha256=EsRRetouRSsQp5GCJdagybmgRXCBQeLl8rcdBUPDv7Y,8720
8
+ aprsd/client/__init__.py,sha256=aajKndFPk259RLTUuobVDleJmOENHvdRVodfhY5BmX8,348
9
+ aprsd/client/aprsis.py,sha256=QsqBgkSYQDD90yugwkJVousj51KNlQugFdIJX140OXg,4270
10
+ aprsd/client/base.py,sha256=C6mXrt2DWgsAjfm1BGyvRHZ9TRCiL472g9WDtSSw56s,2433
11
+ aprsd/client/factory.py,sha256=vllKiMAwNRfFClY9J_Z2aRcuPElMCBAXNd1zh3GGjVU,2184
12
+ aprsd/client/fake.py,sha256=-IMMpGwoQLbm0uW2eLkAADNySPj5zntBOt-tEfoF-gQ,1028
13
+ aprsd/client/kiss.py,sha256=y9qAJPmmtyWUy2BoMT_lrpw3fY0Ggv3smWvQabdImUI,2945
14
+ aprsd/client/stats.py,sha256=0MUS3IVfYgEX0Aan-lMz3VDi7_jCzVhacSN9XIQVJfw,1040
15
+ aprsd/client/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ aprsd/client/drivers/aprsis.py,sha256=V3wuCavJC_c8zezQChFP2M7dV8IScHUOTAZOKGzkL1w,7353
17
+ aprsd/client/drivers/fake.py,sha256=TyqwQ4XYzbT83r0jSBI-oyl9q6BK60TgVuFm2_nkrnw,2059
18
+ aprsd/client/drivers/kiss.py,sha256=XvXvBgpv_i1kgV5MmdTR5DwRXEiT86M49Pa7vw8-gsA,3350
19
+ aprsd/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ aprsd/cmds/completion.py,sha256=KZNniU_9pTmLtItXzl-ATcLn9vi_0795pJ5D4lZXFG8,799
21
+ aprsd/cmds/dev.py,sha256=5RmGvdrObg1hjr93jLCpq2Fql6ZRPWvXcx9ZU2SNj2A,4393
22
+ aprsd/cmds/fetch_stats.py,sha256=dVvhOWpATNGq0e_hbLe47MZ2dCLOO3XTd6zzqqQ1Lp8,4988
23
+ aprsd/cmds/healthcheck.py,sha256=mVrBIasdCnw-_vzuh15p4H1TFmiGg80WVXgXBcd2PMg,2628
24
+ aprsd/cmds/list_plugins.py,sha256=gSIa7uMZAvXylJ89GI3RU9wj6TPioREvBNfClVyfiOM,10653
25
+ aprsd/cmds/listen.py,sha256=1KIe2qD7cWXX58L1d57r2PtTccXPhuDz5KkkyqPlGWw,7160
26
+ aprsd/cmds/send_message.py,sha256=lNIjlezdntAAqGwgXQ4sJwKnUBnKUyCwok68jc35MYs,4669
27
+ aprsd/cmds/server.py,sha256=3WGfscWUK_b5OVOqEeAtrGB7Cu51Epa1xQo6GhgAewU,4168
28
+ aprsd/cmds/webchat.py,sha256=1T70AI2bdwxWVSdP-DrqALsVPxJ6n4EvJdJzvCjLy2w,20197
29
+ aprsd/conf/__init__.py,sha256=6j-N6jT49OYcp8dD8oZGt7mxWSOSUnWXeTIZW_C0bmw,1725
30
+ aprsd/conf/client.py,sha256=w_Z6Pc5LUYzJzDsfhCcnMBLkPi9njNdCGOe3GfbpGaA,3029
31
+ aprsd/conf/common.py,sha256=qzOgKxby1I-9_fQEAZ7jjnA2f4FLZKby9rhTFSaQQLY,8966
32
+ aprsd/conf/log.py,sha256=v5C2Lda6x39IdamHpelOY6tDHPkqHyx_qmPF3WEmeAE,1424
33
+ aprsd/conf/opts.py,sha256=Jq1DPyDdNyN2rbuHq8O-lF2Entkb9tFTbh9gjZwWC5s,2701
34
+ aprsd/conf/plugin_common.py,sha256=pqYNKKwHTYVI-yUnrX3MZhrQz8fVx6arZN7VfAIbnzs,5999
35
+ aprsd/conf/plugin_email.py,sha256=IB8G_vTCC-6HVGx9y1PP2vKXfXRzlEx9lEFXdIIGHzA,2332
36
+ aprsd/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ aprsd/log/log.py,sha256=cd1bMGdlcWHW393btpAw1cc3oYD0nEzY5O596MO6H94,3884
38
+ aprsd/packets/__init__.py,sha256=ELcYtnQKDvdCRhQmhiHaKG4w5JYl2foeWxnqTqsB-08,786
39
+ aprsd/packets/collector.py,sha256=VhuHj2CRxVtaC6QDKiYMnxRzNVj-fc7wkMyPpTl83Og,2322
40
+ aprsd/packets/core.py,sha256=Ke6WDofzpMZSOdDfGsxZal8vdJrKUXLedDXGu7FcAZg,27400
41
+ aprsd/packets/log.py,sha256=mqYq06mK4JgESPKZ4JQ6vWJqorTSp73u7IiITqdlWwE,5347
42
+ aprsd/packets/packet_list.py,sha256=MGLatHvdKcQvuFmeWlHsHIB0jrYMD9eszeISaL8-GYw,3304
43
+ aprsd/packets/seen_list.py,sha256=fV87eyXeFxaZKqWfY1GOCQ6zfnjI1Or6i3KS_qJLuoA,1375
44
+ aprsd/packets/tracker.py,sha256=Fr7B9Ex2kikmAkUz0HNUEsx9p60ap9L7A96bkv9WaO0,2950
45
+ aprsd/packets/watch_list.py,sha256=TcvQsleypvxI2o_fbTr4sAAlmjRb9YpC7LbyNxTwfic,3728
46
+ aprsd/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ aprsd/plugins/email.py,sha256=U0v4crh5uSDWrEes7HHPpXI6eyF7ySYyqqKp2j1klDs,23627
48
+ aprsd/plugins/fortune.py,sha256=XCSIaZ9JXC3LZOMV5tSr3dAvbVvIn4xSUdWxpZHStfc,1573
49
+ aprsd/plugins/location.py,sha256=E1i-dO11br2bmmAqTjoFI2vzS_o0T6xwCakUCr05_qY,6464
50
+ aprsd/plugins/notify.py,sha256=5Qk7P1ZsFl8pNYQMIBmVYnTcKua9gzvgkUwbrcQ6Byc,1969
51
+ aprsd/plugins/ping.py,sha256=A3yLMPUDU-PA1Q98xStd0WM04MZvGn3FzVpGKjyoXDc,763
52
+ aprsd/plugins/time.py,sha256=59-tMl7ogccLobWl9hMDm8mUVXdqW6kB5javrtp0rok,3535
53
+ aprsd/plugins/version.py,sha256=NAPFKQ0lQqgjoDyTVy8tZcRGmdcJE_ZogRElDz27V2U,839
54
+ aprsd/plugins/weather.py,sha256=iZ4Zv_23-2dquNKXhsiimFVlMEVoBNKyom4LtORwuoU,13333
55
+ aprsd/stats/__init__.py,sha256=AM4GoTleOfBBitcCd6E432-jlg2dKVnL5Yw4OtcW25E,892
56
+ aprsd/stats/app.py,sha256=axqMA137zKqU03yO8XI5f1QE8ajmr9YK0J9O9m4iSzo,1378
57
+ aprsd/stats/collector.py,sha256=RF4QvbXa3a96ejS5TPfrtSiShMJp208Cb81-K3o_iMo,1197
58
+ aprsd/threads/__init__.py,sha256=b8Dma0cWE7356WU_Ehvm0RtL4-zCJNUchPFArJd2Gtw,274
59
+ aprsd/threads/aprsd.py,sha256=r2WlvtND0YTpq8jotRacZegD4WjX8msPDpl3ccqZo_Y,3292
60
+ aprsd/threads/keep_alive.py,sha256=9rvzPjgpipfk_Ze47w8rnmWomdrn3sd3uUBVk9rta_I,5258
61
+ aprsd/threads/log_monitor.py,sha256=_-ku02-Sy8m2sG1HFHP2Q_KfzUQfwjd4xaJ5XQlNUTw,3368
62
+ aprsd/threads/registry.py,sha256=5DuzNSwhOEwI0Gl5j9e286uqbxzKLSHzInfPy61r7PI,1702
63
+ aprsd/threads/rx.py,sha256=_tO4agZpjb52snaIi3RbnEwaBTGIS0fzaK7pnn45QPk,13463
64
+ aprsd/threads/stats.py,sha256=Yey3B2iuGUQsNuUiFxvXKJU_1pif8gfOb5uP_U2-hS8,959
65
+ aprsd/threads/tx.py,sha256=W5mP2voefECb4UWf-BXfaFjrYLCbsjAcNmLWl10ntEo,8322
66
+ aprsd/utils/__init__.py,sha256=n2LtDxMVyFrStSJYOFnWbt3blTSUDrM17-CPJJDDxw0,6336
67
+ aprsd/utils/counter.py,sha256=obIO0d9qCuhlvZI8Xf4DrjFlgHh-EuMZTVGv6gzQBkM,1202
68
+ aprsd/utils/fuzzyclock.py,sha256=qKV8SYZhQGOHG9biF8TeueLb6RMppspx1Zg4IOy1Z10,3265
69
+ aprsd/utils/json.py,sha256=LR2g-sealCRyXnujjTNxNYUxBagrdBqYQxNLYJQGYaM,2487
70
+ aprsd/utils/objectstore.py,sha256=b4tNw21lQJ-g6vGN_0Hhc_VRbGiCc5tAZ2jszhRtfyM,3541
71
+ aprsd/utils/ring_buffer.py,sha256=lWWuw7lEbc2URhqAJfRLjpXBDLiK6UUWzk3j2VFnERQ,1111
72
+ aprsd/utils/trace.py,sha256=oya2ElYKn04yanmAoynaCnETJHvEeI_du-DCIApZDsA,5558
73
+ aprsd/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ aprsd/web/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ aprsd/web/admin/static/css/index.css,sha256=A0knpKbvbu2hxwV4yHXzb7l712GviOfEM4fl1NkjhEc,1282
76
+ aprsd/web/admin/static/css/prism.css,sha256=s2Izg4hP_qkrFH2sS2VN-ABdXMrEb8QFGLsNop_Nlx0,2671
77
+ aprsd/web/admin/static/css/tabs.css,sha256=bFU7TDkH7QLFcnCcMy2B8iVRYczTStlgpwxI2vpnLmw,644
78
+ aprsd/web/admin/static/images/Untitled.png,sha256=j03PNbZ_02asRRKWcezQUF79L283afDdrAcNBMqYFhk,37797
79
+ aprsd/web/admin/static/images/aprs-symbols-16-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
80
+ aprsd/web/admin/static/images/aprs-symbols-16-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
81
+ aprsd/web/admin/static/images/aprs-symbols-64-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
82
+ aprsd/web/admin/static/images/aprs-symbols-64-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
83
+ aprsd/web/admin/static/images/aprs-symbols-64-2.png,sha256=OIP7l9temgE-GfB8s29fytJ59GlFQ3TUpEqAA0Gzs2I,40716
84
+ aprsd/web/admin/static/js/charts.js,sha256=spWghq8S-F9hIqpKUNNaWjxSeJxBE3XrUEac6oRU-kw,7354
85
+ aprsd/web/admin/static/js/echarts.js,sha256=iR1LaJcw49qu4fB3nKJ0ilv4WI6cQsDLdNFugv0MGc0,11738
86
+ aprsd/web/admin/static/js/logs.js,sha256=wIuX-Fxa30O3KVyZzDqwp7bS7FNE-qNNHzik0UmIrgU,658
87
+ aprsd/web/admin/static/js/main.js,sha256=Ix-otPASp9_zYNoJJAmnQsgeZdAsaxJTPqDPixu-rtU,8128
88
+ aprsd/web/admin/static/js/prism.js,sha256=38yQvPqke_0dwkM6gVvp24LPl2Xs3oO0GvvLkjb1i6A,27861
89
+ aprsd/web/admin/static/js/send-message.js,sha256=GPGOOn589WdJhKWxS20FiVKkq7jDFKQQHYQJdW2psAw,3852
90
+ aprsd/web/admin/static/js/tabs.js,sha256=cRePBekcExNQO54eRVGCnNXB1JHM9uURnv6LNoe8LMs,889
91
+ aprsd/web/admin/templates/index.html,sha256=w4Qid-R1fK4OFtbe_vnRj9nuWOQ92fIGjD7X5Re1nFE,9083
92
+ aprsd/web/chat/static/css/chat.css,sha256=83HA_HZGAIAdLRxQeJn9Pg6Q22Qwv4mVm4KcZqyazzU,1847
93
+ aprsd/web/chat/static/css/index.css,sha256=vtYtiP0EJi2LTIZsSSVXeAtRhKZN1mN78yXhMLlko7o,1056
94
+ aprsd/web/chat/static/css/style.css.map,sha256=whSiOQyvQ7AYHxykhuFus-Zm9cjkvc5aG186kwrpP4s,174659
95
+ aprsd/web/chat/static/css/tabs.css,sha256=tMRkFCd7frgfNXFrTmMfDfYRr4vOfCgqMSvfKtP-RDw,720
96
+ aprsd/web/chat/static/css/upstream/bootstrap.min.css,sha256=svwVP4WOU1MoR1TXJrmgIp5yToNuswkXqES3UeybGI8,232949
97
+ aprsd/web/chat/static/css/upstream/font.woff2,sha256=zpkGCyyeaAB_KUJJmzJGE9yDUZxhMb4ChY5gjjImxLw,883712
98
+ aprsd/web/chat/static/css/upstream/google-fonts.css,sha256=c1h0sMlh_aMph2FLV2XgzuiKqmqvp49J1Z6ZwWq3O7k,549
99
+ aprsd/web/chat/static/css/upstream/jquery-ui.css,sha256=-bdRwc0NKw-Rhi25h_7Z3aSHWLFeb0LKZ3lrRfSyFwI,36536
100
+ aprsd/web/chat/static/css/upstream/jquery.toast.css,sha256=SubYRHj60jcbWrx0wD_6iqsRyVysJA762BP7lRH6qSo,4887
101
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff,sha256=fOvpeP3mYealppCq2b7YNwMxi_WMKQEXTe_2qpuqVkM,72376
102
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2,sha256=J2QBYyqZhAC-iliVA49PctN2DTw9aq889EXRCcudFUA,44380
103
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff,sha256=nEb3kpsIyHUYqn77vxYB5IXu7YKfFJ4_Ab61ASDNs74,72456
104
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2,sha256=3dTvf5f0NhtghB1ZdTIYpXE0sPmfW0apYSI08cJzOrA,43760
105
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff,sha256=P200iM9lN09vZ2wxU0CwrCvoMr1VJAyAlEjjbvm5YyY,101648
106
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2,sha256=mDS4KtJuKjdYPSJnahLdLrD-fIA1aiEU0NsaqLOJlTc,78268
107
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff,sha256=y56eaTGSQTzeKx8hwdwdRLb-eyfMK0WOizWdGPn_j04,16276
108
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2,sha256=5CqIRERIrD1gVJzHwf8sipyschA0wHPYChSkTnlzDMo,13224
109
+ aprsd/web/chat/static/images/Untitled.png,sha256=j03PNbZ_02asRRKWcezQUF79L283afDdrAcNBMqYFhk,37797
110
+ aprsd/web/chat/static/images/aprs-symbols-16-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
111
+ aprsd/web/chat/static/images/aprs-symbols-16-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
112
+ aprsd/web/chat/static/images/aprs-symbols-64-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
113
+ aprsd/web/chat/static/images/aprs-symbols-64-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
114
+ aprsd/web/chat/static/images/aprs-symbols-64-2.png,sha256=OIP7l9temgE-GfB8s29fytJ59GlFQ3TUpEqAA0Gzs2I,40716
115
+ aprsd/web/chat/static/images/globe.svg,sha256=x7kmRI-9gJaZI4FBlpG53K4ZscmqN_gajnzH-P4DzOI,1197
116
+ aprsd/web/chat/static/js/gps.js,sha256=8_DFgKvfCf8V54jULhN3GYvP3QKicJfcM-mfVPx6DzQ,2370
117
+ aprsd/web/chat/static/js/main.js,sha256=IZARmM7l-bNncXSTEo3Oq-SJfyUPPmKoEZPpVoRtXDc,1259
118
+ aprsd/web/chat/static/js/send-message.js,sha256=jMUqZ4-jUwqVJQjhnYDKpLUl7S93VDGsWXOnRBJdSNw,18851
119
+ aprsd/web/chat/static/js/tabs.js,sha256=cRePBekcExNQO54eRVGCnNXB1JHM9uURnv6LNoe8LMs,889
120
+ aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js,sha256=gGVATfqL6AhR6ukxISDCnWUX6UkUakDC2XchR0dpCDo,80664
121
+ aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js,sha256=_JqT3SQfawRcv_BIHPThkBvs0OEvtFFmqPF_lYI_Cxo,87533
122
+ aprsd/web/chat/static/js/upstream/jquery-ui.min.js,sha256=qdH_gU82QrS5SDHqeQku9i4KeF7Xbe6poSxbqorktPI,253669
123
+ aprsd/web/chat/static/js/upstream/jquery.toast.js,sha256=V4m4PbwAYUb9yr3uP64y2ogcoS9oQsl4oPLAGaxQnQI,12989
124
+ aprsd/web/chat/static/js/upstream/semantic.min.js,sha256=AYdrntK9PGcU1ZsyD7fTBJ4o0j1bMeD4xn7P-UagMW4,403125
125
+ aprsd/web/chat/static/js/upstream/socket.io.min.js,sha256=dYF5MG5zs6ekpbIOXBXelJXquX0gi_c48kkYm8tCaYE,64274
126
+ aprsd/web/chat/templates/index.html,sha256=9z8JoF3W6SlPndf28iCgdHwiaG9_f9fnk5nXWEfx5wg,6633
127
+ aprsd-3.4.2.dist-info/AUTHORS,sha256=-4JB7i9LE12SYMbLc4Rk6iXlQ0J7C4mC1RV6-vnO53E,467
128
+ aprsd-3.4.2.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
129
+ aprsd-3.4.2.dist-info/METADATA,sha256=G25erCky2XI69HPnI27Ia5ti-mK4u7Op3dff4zttSDY,39875
130
+ aprsd-3.4.2.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
131
+ aprsd-3.4.2.dist-info/entry_points.txt,sha256=4fReoJUB-bFqOUK6eeXYYCvTdVLprL7KVH0hWQRP9eM,171
132
+ aprsd-3.4.2.dist-info/top_level.txt,sha256=v1O96niUcJOTMh9aQnFRknbScJ6mMOwqurdbxeaeSjs,6
133
+ aprsd-3.4.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.36.1)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,8 @@
1
+ [console_scripts]
2
+ aprsd = aprsd.main:main
3
+
4
+ [oslo.config.opts]
5
+ aprsd.conf = aprsd.conf.opts:list_opts
6
+
7
+ [oslo.config.opts.defaults]
8
+ aprsd.conf = aprsd.conf:set_lib_defaults
aprsd/fake_aprs.py DELETED
@@ -1,83 +0,0 @@
1
- import argparse
2
- import logging
3
- import socketserver
4
- import sys
5
- import time
6
- from logging.handlers import RotatingFileHandler
7
-
8
- from aprsd import utils
9
-
10
- # command line args
11
- parser = argparse.ArgumentParser()
12
- parser.add_argument(
13
- "--loglevel",
14
- default="DEBUG",
15
- choices=["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"],
16
- help="The log level to use for aprsd.log",
17
- )
18
- parser.add_argument("--quiet", action="store_true", help="Don't log to stdout")
19
-
20
- parser.add_argument("--port", default=9099, type=int, help="The port to listen on .")
21
- parser.add_argument("--ip", default="127.0.0.1", help="The IP to listen on ")
22
-
23
- CONFIG = None
24
- LOG = logging.getLogger("ARPSSERVER")
25
-
26
-
27
- # Setup the logging faciility
28
- # to disable logging to stdout, but still log to file
29
- # use the --quiet option on the cmdln
30
- def setup_logging(args):
31
- global LOG
32
- levels = {
33
- "CRITICAL": logging.CRITICAL,
34
- "ERROR": logging.ERROR,
35
- "WARNING": logging.WARNING,
36
- "INFO": logging.INFO,
37
- "DEBUG": logging.DEBUG,
38
- }
39
- log_level = levels[args.loglevel]
40
-
41
- LOG.setLevel(log_level)
42
- log_format = "%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]" " %(message)s"
43
- date_format = "%m/%d/%Y %I:%M:%S %p"
44
- log_formatter = logging.Formatter(fmt=log_format, datefmt=date_format)
45
- fh = RotatingFileHandler("aprs-server.log", maxBytes=(10248576 * 5), backupCount=4)
46
- fh.setFormatter(log_formatter)
47
- LOG.addHandler(fh)
48
-
49
- if not args.quiet:
50
- sh = logging.StreamHandler(sys.stdout)
51
- sh.setFormatter(log_formatter)
52
- LOG.addHandler(sh)
53
-
54
-
55
- class MyAPRSTCPHandler(socketserver.BaseRequestHandler):
56
- def handle(self):
57
- # self.request is the TCP socket connected to the client
58
- self.data = self.request.recv(1024).strip()
59
- LOG.debug("{} wrote:".format(self.client_address[0]))
60
- LOG.debug(self.data)
61
- # just send back the same data, but upper-cased
62
- self.request.sendall(self.data.upper())
63
-
64
-
65
- def main():
66
- global CONFIG
67
- args = parser.parse_args()
68
- setup_logging(args)
69
- LOG.info("Test APRS server starting.")
70
- time.sleep(1)
71
-
72
- CONFIG = utils.parse_config(args)
73
-
74
- ip = CONFIG["aprs"]["host"]
75
- port = CONFIG["aprs"]["port"]
76
- LOG.info("Start server listening on %s:%s" % (args.ip, args.port))
77
-
78
- with socketserver.TCPServer((ip, port), MyAPRSTCPHandler) as server:
79
- server.serve_forever()
80
-
81
-
82
- if __name__ == "__main__":
83
- main()
aprsd/utils.py DELETED
@@ -1,166 +0,0 @@
1
- """Utilities and helper functions."""
2
-
3
- import errno
4
- import os
5
- import sys
6
-
7
- import click
8
- import yaml
9
-
10
- from aprsd import plugin
11
-
12
- # an example of what should be in the ~/.aprsd/config.yml
13
- DEFAULT_CONFIG_DICT = {
14
- "ham": {"callsign": "KFART"},
15
- "aprs": {
16
- "login": "someusername",
17
- "password": "somepassword",
18
- "host": "noam.aprs2.net",
19
- "port": 14580,
20
- "logfile": "/tmp/arsd.log",
21
- },
22
- "shortcuts": {
23
- "aa": "5551239999@vtext.com",
24
- "cl": "craiglamparter@somedomain.org",
25
- "wb": "555309@vtext.com",
26
- },
27
- "smtp": {
28
- "login": "something",
29
- "password": "some lame password",
30
- "host": "imap.gmail.com",
31
- "port": 465,
32
- "use_ssl": False,
33
- },
34
- "imap": {
35
- "login": "imapuser",
36
- "password": "something here too",
37
- "host": "imap.gmail.com",
38
- "port": 993,
39
- "use_ssl": True,
40
- },
41
- "aprsd": {
42
- "plugin_dir": "~/.config/aprsd/plugins",
43
- "enabled_plugins": plugin.CORE_PLUGINS,
44
- },
45
- }
46
-
47
- DEFAULT_CONFIG_FILE = "~/.config/aprsd/aprsd.yml"
48
-
49
-
50
- def env(*vars, **kwargs):
51
- """This returns the first environment variable set.
52
- if none are non-empty, defaults to '' or keyword arg default
53
- """
54
- for v in vars:
55
- value = os.environ.get(v, None)
56
- if value:
57
- return value
58
- return kwargs.get("default", "")
59
-
60
-
61
- def mkdir_p(path):
62
- """Make directory and have it work in py2 and py3."""
63
- try:
64
- os.makedirs(path)
65
- except OSError as exc: # Python >= 2.5
66
- if exc.errno == errno.EEXIST and os.path.isdir(path):
67
- pass
68
- else:
69
- raise
70
-
71
-
72
- def create_default_config():
73
- """Create a default config file."""
74
- # make sure the directory location exists
75
- config_file_expanded = os.path.expanduser(DEFAULT_CONFIG_FILE)
76
- config_dir = os.path.dirname(config_file_expanded)
77
- if not os.path.exists(config_dir):
78
- click.echo("Config dir '{}' doesn't exist, creating.".format(config_dir))
79
- mkdir_p(config_dir)
80
- with open(config_file_expanded, "w+") as cf:
81
- yaml.dump(DEFAULT_CONFIG_DICT, cf)
82
-
83
-
84
- def get_config(config_file):
85
- """This tries to read the yaml config from <config_file>."""
86
- config_file_expanded = os.path.expanduser(config_file)
87
- if os.path.exists(config_file_expanded):
88
- with open(config_file_expanded, "r") as stream:
89
- config = yaml.load(stream, Loader=yaml.FullLoader)
90
- return config
91
- else:
92
- if config_file == DEFAULT_CONFIG_FILE:
93
- click.echo(
94
- "{} is missing, creating config file".format(config_file_expanded)
95
- )
96
- create_default_config()
97
- msg = (
98
- "Default config file created at {}. Please edit with your "
99
- "settings.".format(config_file)
100
- )
101
- click.echo(msg)
102
- else:
103
- # The user provided a config file path different from the
104
- # Default, so we won't try and create it, just bitch and bail.
105
- msg = "Custom config file '{}' is missing.".format(config_file)
106
- click.echo(msg)
107
-
108
- sys.exit(-1)
109
-
110
-
111
- # This method tries to parse the config yaml file
112
- # and consume the settings.
113
- # If the required params don't exist,
114
- # it will look in the environment
115
- def parse_config(config_file):
116
- # for now we still use globals....ugh
117
- global CONFIG
118
-
119
- def fail(msg):
120
- click.echo(msg)
121
- sys.exit(-1)
122
-
123
- def check_option(config, section, name=None, default=None, default_fail=None):
124
- if section in config:
125
-
126
- if name and name not in config[section]:
127
- if not default:
128
- fail(
129
- "'%s' was not in '%s' section of config file" % (name, section)
130
- )
131
- else:
132
- config[section][name] = default
133
- else:
134
- if (
135
- default_fail
136
- and name in config[section]
137
- and config[section][name] == default_fail
138
- ):
139
- # We have to fail and bail if the user hasn't edited
140
- # this config option.
141
- fail("Config file needs to be edited from provided defaults.")
142
- else:
143
- fail("'%s' section wasn't in config file" % section)
144
- return config
145
-
146
- config = get_config(config_file)
147
- check_option(config, "shortcuts")
148
- # special check here to make sure user has edited the config file
149
- # and changed the ham callsign
150
- check_option(
151
- config, "ham", "callsign", default_fail=DEFAULT_CONFIG_DICT["ham"]["callsign"]
152
- )
153
- check_option(config, "aprs", "login")
154
- check_option(config, "aprs", "password")
155
- check_option(config, "aprs", "host")
156
- check_option(config, "aprs", "port")
157
- check_option(config, "aprs", "logfile", "./aprsd.log")
158
- check_option(config, "imap", "host")
159
- check_option(config, "imap", "login")
160
- check_option(config, "imap", "password")
161
- check_option(config, "smtp", "host")
162
- check_option(config, "smtp", "port")
163
- check_option(config, "smtp", "login")
164
- check_option(config, "smtp", "password")
165
-
166
- return config
@@ -1,6 +0,0 @@
1
- Craig Lamparter <craig@craiger.org>
2
- Craig Lamparter <craiger@hpe.com>
3
- Hemna <waboring@hemna.com>
4
- Walter A. Boring IV <waboring@hemna.com>
5
- craigerl <craig@craiger.org>
6
- craigerl <craiger@hpe.com>
@@ -1,181 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: aprsd
3
- Version: 1.0.0
4
- Summary: Amateur radio APRS daemon which listens for messages and responds
5
- Home-page: UNKNOWN
6
- Author: Craig Lamparter
7
- Author-email: something@somewhere.com
8
- License: UNKNOWN
9
- Platform: UNKNOWN
10
- Classifier: Topic :: Communications :: Ham Radio
11
- Classifier: Operating System :: POSIX :: Linux
12
- Classifier: Programming Language :: Python
13
- Description-Content-Type: text/x-rst; charset=UTF-8
14
- Requires-Dist: click
15
- Requires-Dist: click-completion
16
- Requires-Dist: imapclient
17
- Requires-Dist: pluggy
18
- Requires-Dist: pbr
19
- Requires-Dist: pyyaml
20
- Requires-Dist: six
21
- Requires-Dist: requests
22
-
23
- =====
24
- APRSD
25
- =====
26
-
27
- .. image:: https://github.com/craigerl/aprsd/workflows/python/badge.svg
28
- :target: https://github.com/craigerl/aprsd/actions
29
-
30
- .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
31
- :target: https://black.readthedocs.io/en/stable/
32
-
33
- .. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
34
- :target: https://timothycrosley.github.io/isort/
35
-
36
- Listen on amateur radio aprs-is network for messages and respond to them.
37
- You must have an amateur radio callsign to use this software. Put your
38
- callsign in the "USER" variable and update your aprs-is password in "PASS".
39
- You must also have an imap email account available for polling.
40
-
41
- Current messages this will respond to:
42
- --------------------------------------
43
-
44
- ::
45
-
46
- APRS messages:
47
- l(ocation) [callsign] = descriptive current location of your radio
48
- 8 Miles E Auburn CA 1673' 39.92150,-120.93950 0.1h ago
49
- w(eather) = weather forecast for your radio's current position
50
- 58F(58F/46F) Partly Cloudy. Tonight, Heavy Rain.
51
- t(ime) = respond with the current time
52
- f(ortune) = respond with a short fortune
53
- -email_addr email text = send an email, say "mapme" to send a current position/map
54
- -2 = resend the last 2 emails from your imap inbox to this radio
55
- p(ing) = respond with Pong!/time
56
- anything else = respond with usage
57
-
58
-
59
- Meanwhile this code will monitor a single imap mailbox and forward email
60
- to your BASECALLSIGN over the air. Only radios using the BASECALLSIGN are allowed
61
- to send email, so consider this security risk before using this (or Amatuer radio in
62
- general). Email is single user at this time.
63
-
64
- There are additional parameters in the code (sorry), so be sure to set your
65
- email server, and associated logins, passwords. search for "yourdomain",
66
- "password". Search for "shortcuts" to setup email aliases as well.
67
-
68
-
69
- Installation:
70
- -------------
71
-
72
- pip install aprsd
73
-
74
- Example usage:
75
- --------------
76
-
77
- aprsd -h
78
-
79
- Example output:
80
- ---------------
81
-
82
- SEND EMAIL (radio to smtp server)
83
- ---------------------------------
84
-
85
- ::
86
-
87
- Received message______________
88
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :-user@host.com test new shortcuts global, radio to pc{29
89
- From : KM6XXX
90
- Message : -user@host.com test new shortcuts global, radio to pc
91
- Msg number : 29
92
-
93
- Sending Email_________________
94
- To : user@host.com
95
- Subject : KM6XXX
96
- Body : test new shortcuts global, radio to pc
97
-
98
- Sending ack __________________ Tx(3)
99
- Raw : KM6XXX-9>APRS::KM6XXX :ack29
100
- To : KM6XXX
101
- Ack number : 29
102
-
103
-
104
- RECEIVE EMAIL (imap server to radio)
105
- ------------------------------------
106
-
107
- ::
108
-
109
- Sending message_______________ 6(Tx3)
110
- Raw : KM6XXX-9>APRS::KM6XXX :-somebody@gmail.com email from internet to radio{6
111
- To : KM6XXX
112
- Message : -somebody@gmail.com email from internet to radio
113
-
114
- Received message______________
115
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :ack6
116
- From : KM6XXX
117
- Message : ack6
118
- Msg number : 0
119
-
120
-
121
- WEATHER
122
- -------
123
-
124
- ::
125
-
126
- Received message______________
127
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :weather{27
128
- From : KM6XXX
129
- Message : weather
130
- Msg number : 27
131
-
132
- Sending message_______________ 6(Tx3)
133
- Raw : KM6XXX-9>APRS::KM6XXX :58F(58F/46F) Partly cloudy. Tonight, Heavy Rain.{6
134
- To : KM6XXX
135
- Message : 58F(58F/46F) Party Cloudy. Tonight, Heavy Rain.
136
-
137
- Sending ack __________________ Tx(3)
138
- Raw : KM6XXX-9>APRS::KM6XXX :ack27
139
- To : KM6XXX
140
- Ack number : 27
141
-
142
- Received message______________
143
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :ack6
144
- From : KM6XXX
145
- Message : ack6
146
- Msg number : 0
147
-
148
-
149
- LOCATION
150
- --------
151
-
152
- ::
153
-
154
- Received message______________
155
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :location{28
156
- From : KM6XXX
157
- Message : location
158
- Msg number : 28
159
-
160
- Sending message_______________ 7(Tx3)
161
- Raw : KM6XXX-9>APRS::KM6XXX :8 Miles NE Auburn CA 1673' 39.91150,-120.93450 0.1h ago{7
162
- To : KM6XXX
163
- Message : 8 Miles E Auburn CA 1673' 38.91150,-120.93450 0.1h ago
164
-
165
- Sending ack __________________ Tx(3)
166
- Raw : KM6XXX-9>APRS::KM6XXX :ack28
167
- To : KM6XXX
168
- Ack number : 28
169
-
170
- Received message______________
171
- Raw : KM6XXX>APY400,WIDE1-1,qAO,KM6XXX-1::KM6XXX-9 :ack7
172
- From : KM6XXX
173
- Message : ack7
174
- Msg number : 0
175
-
176
-
177
-
178
- AND... ping, fortune, time.....
179
-
180
-
181
-
@@ -1,13 +0,0 @@
1
- aprsd/__init__.py,sha256=ve_76nUSxKBREqMNxQjtQQMBRRkQtzUE4Tve9PcQ8-I,655
2
- aprsd/fake_aprs.py,sha256=wN0O4qi4_-BuqHr7LyOq-4iJDnIVpRqxHLr31LqGYlI,2445
3
- aprsd/fuzzyclock.py,sha256=qKV8SYZhQGOHG9biF8TeueLb6RMppspx1Zg4IOy1Z10,3265
4
- aprsd/main.py,sha256=yMJxDxdSAv2h-Yj07bpfJ6Y3ldyAlB2V3BDwxduTpDk,31571
5
- aprsd/plugin.py,sha256=CAg2mKKjLgy6vZuR772rA0R-rc5AYUyRXHK_ejZ9SRY,10777
6
- aprsd/utils.py,sha256=qrTGEB6L_RIMEm5alrebDOEEJzHfxEXTPYhpeNuVfJw,5218
7
- aprsd-1.0.0.dist-info/AUTHORS,sha256=gBdtwFJh6SQMSJS0Ha6MoZsvdD6GR6yayh5B1i0He3U,194
8
- aprsd-1.0.0.dist-info/METADATA,sha256=wjhMuwlXOM2AmB-1twzMpzexPwGfjKA13pVIlXj0igQ,5424
9
- aprsd-1.0.0.dist-info/WHEEL,sha256=S6zePDbUAjzMmpYOg2cHDxuYFWw7WiOXt6ogM6hIB5Q,92
10
- aprsd-1.0.0.dist-info/entry_points.txt,sha256=2sMpkDcf0rN1QC1SLEkhRBskHFaoG1NeGngXlDV2J7g,76
11
- aprsd-1.0.0.dist-info/pbr.json,sha256=A4lVHnONNoW5b6hi2D1jZ5lsU8Cmk-ltC5Gwhbxp9EU,46
12
- aprsd-1.0.0.dist-info/top_level.txt,sha256=v1O96niUcJOTMh9aQnFRknbScJ6mMOwqurdbxeaeSjs,6
13
- aprsd-1.0.0.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- [console_scripts]
2
- aprsd = aprsd.main:main
3
- fake_aprs = aprsd.fake_aprs:main
4
-
@@ -1 +0,0 @@
1
- {"git_version": "e1edbe6", "is_release": true}
File without changes