aprsd 1.0.0__py3-none-any.whl → 3.4.1__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 (141) 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 +224 -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 +230 -0
  21. aprsd/cmds/send_message.py +174 -0
  22. aprsd/cmds/server.py +142 -0
  23. aprsd/cmds/webchat.py +681 -0
  24. aprsd/conf/__init__.py +56 -0
  25. aprsd/conf/client.py +131 -0
  26. aprsd/conf/common.py +302 -0
  27. aprsd/conf/log.py +65 -0
  28. aprsd/conf/opts.py +80 -0
  29. aprsd/conf/plugin_common.py +191 -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/messaging.py +4 -0
  36. aprsd/packets/__init__.py +12 -0
  37. aprsd/packets/collector.py +56 -0
  38. aprsd/packets/core.py +823 -0
  39. aprsd/packets/log.py +143 -0
  40. aprsd/packets/packet_list.py +116 -0
  41. aprsd/packets/seen_list.py +54 -0
  42. aprsd/packets/tracker.py +109 -0
  43. aprsd/packets/watch_list.py +122 -0
  44. aprsd/plugin.py +475 -284
  45. aprsd/plugin_utils.py +86 -0
  46. aprsd/plugins/__init__.py +0 -0
  47. aprsd/plugins/email.py +709 -0
  48. aprsd/plugins/fortune.py +61 -0
  49. aprsd/plugins/location.py +179 -0
  50. aprsd/plugins/notify.py +61 -0
  51. aprsd/plugins/ping.py +31 -0
  52. aprsd/plugins/time.py +115 -0
  53. aprsd/plugins/version.py +31 -0
  54. aprsd/plugins/weather.py +405 -0
  55. aprsd/stats/__init__.py +20 -0
  56. aprsd/stats/app.py +49 -0
  57. aprsd/stats/collector.py +38 -0
  58. aprsd/threads/__init__.py +11 -0
  59. aprsd/threads/aprsd.py +119 -0
  60. aprsd/threads/keep_alive.py +124 -0
  61. aprsd/threads/log_monitor.py +121 -0
  62. aprsd/threads/registry.py +56 -0
  63. aprsd/threads/rx.py +354 -0
  64. aprsd/threads/stats.py +44 -0
  65. aprsd/threads/tx.py +255 -0
  66. aprsd/utils/__init__.py +163 -0
  67. aprsd/utils/counter.py +51 -0
  68. aprsd/utils/json.py +80 -0
  69. aprsd/utils/objectstore.py +123 -0
  70. aprsd/utils/ring_buffer.py +40 -0
  71. aprsd/utils/trace.py +180 -0
  72. aprsd/web/__init__.py +0 -0
  73. aprsd/web/admin/__init__.py +0 -0
  74. aprsd/web/admin/static/css/index.css +84 -0
  75. aprsd/web/admin/static/css/prism.css +4 -0
  76. aprsd/web/admin/static/css/tabs.css +35 -0
  77. aprsd/web/admin/static/images/Untitled.png +0 -0
  78. aprsd/web/admin/static/images/aprs-symbols-16-0.png +0 -0
  79. aprsd/web/admin/static/images/aprs-symbols-16-1.png +0 -0
  80. aprsd/web/admin/static/images/aprs-symbols-64-0.png +0 -0
  81. aprsd/web/admin/static/images/aprs-symbols-64-1.png +0 -0
  82. aprsd/web/admin/static/images/aprs-symbols-64-2.png +0 -0
  83. aprsd/web/admin/static/js/charts.js +235 -0
  84. aprsd/web/admin/static/js/echarts.js +465 -0
  85. aprsd/web/admin/static/js/logs.js +26 -0
  86. aprsd/web/admin/static/js/main.js +231 -0
  87. aprsd/web/admin/static/js/prism.js +12 -0
  88. aprsd/web/admin/static/js/send-message.js +114 -0
  89. aprsd/web/admin/static/js/tabs.js +28 -0
  90. aprsd/web/admin/templates/index.html +196 -0
  91. aprsd/web/chat/static/css/chat.css +115 -0
  92. aprsd/web/chat/static/css/index.css +66 -0
  93. aprsd/web/chat/static/css/style.css.map +1 -0
  94. aprsd/web/chat/static/css/tabs.css +41 -0
  95. aprsd/web/chat/static/css/upstream/bootstrap.min.css +6 -0
  96. aprsd/web/chat/static/css/upstream/font.woff2 +0 -0
  97. aprsd/web/chat/static/css/upstream/google-fonts.css +23 -0
  98. aprsd/web/chat/static/css/upstream/jquery-ui.css +1311 -0
  99. aprsd/web/chat/static/css/upstream/jquery.toast.css +28 -0
  100. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
  101. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
  102. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
  103. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
  104. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff +0 -0
  105. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2 +0 -0
  106. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff +0 -0
  107. aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  108. aprsd/web/chat/static/images/Untitled.png +0 -0
  109. aprsd/web/chat/static/images/aprs-symbols-16-0.png +0 -0
  110. aprsd/web/chat/static/images/aprs-symbols-16-1.png +0 -0
  111. aprsd/web/chat/static/images/aprs-symbols-64-0.png +0 -0
  112. aprsd/web/chat/static/images/aprs-symbols-64-1.png +0 -0
  113. aprsd/web/chat/static/images/aprs-symbols-64-2.png +0 -0
  114. aprsd/web/chat/static/images/globe.svg +3 -0
  115. aprsd/web/chat/static/js/gps.js +84 -0
  116. aprsd/web/chat/static/js/main.js +45 -0
  117. aprsd/web/chat/static/js/send-message.js +585 -0
  118. aprsd/web/chat/static/js/tabs.js +28 -0
  119. aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js +7 -0
  120. aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js +2 -0
  121. aprsd/web/chat/static/js/upstream/jquery-ui.min.js +13 -0
  122. aprsd/web/chat/static/js/upstream/jquery.toast.js +374 -0
  123. aprsd/web/chat/static/js/upstream/semantic.min.js +11 -0
  124. aprsd/web/chat/static/js/upstream/socket.io.min.js +7 -0
  125. aprsd/web/chat/templates/index.html +139 -0
  126. aprsd/wsgi.py +315 -0
  127. aprsd-3.4.1.dist-info/AUTHORS +13 -0
  128. aprsd-3.4.1.dist-info/LICENSE +175 -0
  129. aprsd-3.4.1.dist-info/METADATA +799 -0
  130. aprsd-3.4.1.dist-info/RECORD +134 -0
  131. {aprsd-1.0.0.dist-info → aprsd-3.4.1.dist-info}/WHEEL +1 -1
  132. aprsd-3.4.1.dist-info/entry_points.txt +8 -0
  133. aprsd/fake_aprs.py +0 -83
  134. aprsd/utils.py +0 -166
  135. aprsd-1.0.0.dist-info/AUTHORS +0 -6
  136. aprsd-1.0.0.dist-info/METADATA +0 -181
  137. aprsd-1.0.0.dist-info/RECORD +0 -13
  138. aprsd-1.0.0.dist-info/entry_points.txt +0 -4
  139. aprsd-1.0.0.dist-info/pbr.json +0 -1
  140. /aprsd/{fuzzyclock.py → utils/fuzzyclock.py} +0 -0
  141. {aprsd-1.0.0.dist-info → aprsd-3.4.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,134 @@
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=aOVLKdTWVx9ahoG2UAqtPJVzy6sScekwBFkj6gjaIeM,4673
5
+ aprsd/messaging.py,sha256=0zE2y0jJBTxTwwgt8_XmSeMZfBTO77ZBY0GyGe8DX_w,134
6
+ aprsd/plugin.py,sha256=HGTuGUdtjOi4QBwLC1FQ4GPBBfRvGTxt1by0V9bCk1I,17366
7
+ aprsd/plugin_utils.py,sha256=xKQbliwikJxw_E5TGK_BcBPXkHeJ1PqVxSCFcDbf1xg,2507
8
+ aprsd/wsgi.py,sha256=EsRRetouRSsQp5GCJdagybmgRXCBQeLl8rcdBUPDv7Y,8720
9
+ aprsd/client/__init__.py,sha256=aajKndFPk259RLTUuobVDleJmOENHvdRVodfhY5BmX8,348
10
+ aprsd/client/aprsis.py,sha256=QsqBgkSYQDD90yugwkJVousj51KNlQugFdIJX140OXg,4270
11
+ aprsd/client/base.py,sha256=C6mXrt2DWgsAjfm1BGyvRHZ9TRCiL472g9WDtSSw56s,2433
12
+ aprsd/client/factory.py,sha256=vllKiMAwNRfFClY9J_Z2aRcuPElMCBAXNd1zh3GGjVU,2184
13
+ aprsd/client/fake.py,sha256=-IMMpGwoQLbm0uW2eLkAADNySPj5zntBOt-tEfoF-gQ,1028
14
+ aprsd/client/kiss.py,sha256=y9qAJPmmtyWUy2BoMT_lrpw3fY0Ggv3smWvQabdImUI,2945
15
+ aprsd/client/stats.py,sha256=0MUS3IVfYgEX0Aan-lMz3VDi7_jCzVhacSN9XIQVJfw,1040
16
+ aprsd/client/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ aprsd/client/drivers/aprsis.py,sha256=PsIR77ao5QlaLR_Jq7uAkNUJQiw6q8swch2Pl8m2JyM,7257
18
+ aprsd/client/drivers/fake.py,sha256=TyqwQ4XYzbT83r0jSBI-oyl9q6BK60TgVuFm2_nkrnw,2059
19
+ aprsd/client/drivers/kiss.py,sha256=XvXvBgpv_i1kgV5MmdTR5DwRXEiT86M49Pa7vw8-gsA,3350
20
+ aprsd/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ aprsd/cmds/completion.py,sha256=KZNniU_9pTmLtItXzl-ATcLn9vi_0795pJ5D4lZXFG8,799
22
+ aprsd/cmds/dev.py,sha256=5RmGvdrObg1hjr93jLCpq2Fql6ZRPWvXcx9ZU2SNj2A,4393
23
+ aprsd/cmds/fetch_stats.py,sha256=dVvhOWpATNGq0e_hbLe47MZ2dCLOO3XTd6zzqqQ1Lp8,4988
24
+ aprsd/cmds/healthcheck.py,sha256=mVrBIasdCnw-_vzuh15p4H1TFmiGg80WVXgXBcd2PMg,2628
25
+ aprsd/cmds/list_plugins.py,sha256=gSIa7uMZAvXylJ89GI3RU9wj6TPioREvBNfClVyfiOM,10653
26
+ aprsd/cmds/listen.py,sha256=PH7wGporM8LJDVHyDsZ--kKZ0oIGoR3q9hhKu6FfE64,7142
27
+ aprsd/cmds/send_message.py,sha256=cZ1fbWB9SeI5ga4_Omr-Ucq8QML1aenaO17N-QB1Abg,4706
28
+ aprsd/cmds/server.py,sha256=Un5mTIN9ilUWwP-Wn8Gi_lMQ5O94EWVWmqJ5urno368,4321
29
+ aprsd/cmds/webchat.py,sha256=EwIkr2QXpmOQLrTfuU2JaYv8frELww1I0vII-a7hNtE,20379
30
+ aprsd/conf/__init__.py,sha256=6j-N6jT49OYcp8dD8oZGt7mxWSOSUnWXeTIZW_C0bmw,1725
31
+ aprsd/conf/client.py,sha256=w_Z6Pc5LUYzJzDsfhCcnMBLkPi9njNdCGOe3GfbpGaA,3029
32
+ aprsd/conf/common.py,sha256=LTLVtz9fFXsnYIhq2Hv73r-tn-Y7nW4rRJj5KCLFtuA,9013
33
+ aprsd/conf/log.py,sha256=v5C2Lda6x39IdamHpelOY6tDHPkqHyx_qmPF3WEmeAE,1424
34
+ aprsd/conf/opts.py,sha256=Jq1DPyDdNyN2rbuHq8O-lF2Entkb9tFTbh9gjZwWC5s,2701
35
+ aprsd/conf/plugin_common.py,sha256=HKNV2JKCJOPUqTdoFgc96mGNZLU6zNii2syjuJj8tAo,6253
36
+ aprsd/conf/plugin_email.py,sha256=IB8G_vTCC-6HVGx9y1PP2vKXfXRzlEx9lEFXdIIGHzA,2332
37
+ aprsd/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ aprsd/log/log.py,sha256=cd1bMGdlcWHW393btpAw1cc3oYD0nEzY5O596MO6H94,3884
39
+ aprsd/packets/__init__.py,sha256=OK2qFCNscFcMlimHJvP__R-7Igre4b912t3gGflNqIw,510
40
+ aprsd/packets/collector.py,sha256=qPk2vQZyBJSjgOsc_RTSWUsXMsKd6L4YJoVG5NjFV1c,1636
41
+ aprsd/packets/core.py,sha256=Ke6WDofzpMZSOdDfGsxZal8vdJrKUXLedDXGu7FcAZg,27400
42
+ aprsd/packets/log.py,sha256=jCcZazhivzlo38nEE3qnUiaZGNhtpX3QUgG1ExofwrM,4545
43
+ aprsd/packets/packet_list.py,sha256=s3b3uFyZYo_3xv4DFLTKU2qyQHTaTxAW6wotgZksc1o,3518
44
+ aprsd/packets/seen_list.py,sha256=mH_yAN5KVajmF-W5G-uKPgZDhxy7lOI1Ds7n1mkBGdE,1543
45
+ aprsd/packets/tracker.py,sha256=4uZJ7I1uAxOohF1LFxhsokNYKA7Am_XbAP3Kix_XLJw,3165
46
+ aprsd/packets/watch_list.py,sha256=Fn6_eqkgWnXjEIx82roiWqJoPewcb7qdNjq_gpYqWD8,3789
47
+ aprsd/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ aprsd/plugins/email.py,sha256=U0v4crh5uSDWrEes7HHPpXI6eyF7ySYyqqKp2j1klDs,23627
49
+ aprsd/plugins/fortune.py,sha256=XCSIaZ9JXC3LZOMV5tSr3dAvbVvIn4xSUdWxpZHStfc,1573
50
+ aprsd/plugins/location.py,sha256=E1i-dO11br2bmmAqTjoFI2vzS_o0T6xwCakUCr05_qY,6464
51
+ aprsd/plugins/notify.py,sha256=5Qk7P1ZsFl8pNYQMIBmVYnTcKua9gzvgkUwbrcQ6Byc,1969
52
+ aprsd/plugins/ping.py,sha256=A3yLMPUDU-PA1Q98xStd0WM04MZvGn3FzVpGKjyoXDc,763
53
+ aprsd/plugins/time.py,sha256=59-tMl7ogccLobWl9hMDm8mUVXdqW6kB5javrtp0rok,3535
54
+ aprsd/plugins/version.py,sha256=NAPFKQ0lQqgjoDyTVy8tZcRGmdcJE_ZogRElDz27V2U,839
55
+ aprsd/plugins/weather.py,sha256=iZ4Zv_23-2dquNKXhsiimFVlMEVoBNKyom4LtORwuoU,13333
56
+ aprsd/stats/__init__.py,sha256=AM4GoTleOfBBitcCd6E432-jlg2dKVnL5Yw4OtcW25E,892
57
+ aprsd/stats/app.py,sha256=axqMA137zKqU03yO8XI5f1QE8ajmr9YK0J9O9m4iSzo,1378
58
+ aprsd/stats/collector.py,sha256=NqThUI3d2WTwf2CbXooTIUWXlqt91cC4HTW3dPBt8jg,1219
59
+ aprsd/threads/__init__.py,sha256=b8Dma0cWE7356WU_Ehvm0RtL4-zCJNUchPFArJd2Gtw,274
60
+ aprsd/threads/aprsd.py,sha256=r2WlvtND0YTpq8jotRacZegD4WjX8msPDpl3ccqZo_Y,3292
61
+ aprsd/threads/keep_alive.py,sha256=pAhBdzBFcAgQ4_DEUdOVfrIpyM-Rz_rO9Hp8KI-Yyq8,4934
62
+ aprsd/threads/log_monitor.py,sha256=_-ku02-Sy8m2sG1HFHP2Q_KfzUQfwjd4xaJ5XQlNUTw,3368
63
+ aprsd/threads/registry.py,sha256=5DuzNSwhOEwI0Gl5j9e286uqbxzKLSHzInfPy61r7PI,1702
64
+ aprsd/threads/rx.py,sha256=_tO4agZpjb52snaIi3RbnEwaBTGIS0fzaK7pnn45QPk,13463
65
+ aprsd/threads/stats.py,sha256=Yey3B2iuGUQsNuUiFxvXKJU_1pif8gfOb5uP_U2-hS8,959
66
+ aprsd/threads/tx.py,sha256=W5mP2voefECb4UWf-BXfaFjrYLCbsjAcNmLWl10ntEo,8322
67
+ aprsd/utils/__init__.py,sha256=X9tYE5o5Bn_dn-y0N33JEJ-GBQWr-isLn6GiEV1LCsg,4547
68
+ aprsd/utils/counter.py,sha256=obIO0d9qCuhlvZI8Xf4DrjFlgHh-EuMZTVGv6gzQBkM,1202
69
+ aprsd/utils/fuzzyclock.py,sha256=qKV8SYZhQGOHG9biF8TeueLb6RMppspx1Zg4IOy1Z10,3265
70
+ aprsd/utils/json.py,sha256=LR2g-sealCRyXnujjTNxNYUxBagrdBqYQxNLYJQGYaM,2487
71
+ aprsd/utils/objectstore.py,sha256=b4tNw21lQJ-g6vGN_0Hhc_VRbGiCc5tAZ2jszhRtfyM,3541
72
+ aprsd/utils/ring_buffer.py,sha256=lWWuw7lEbc2URhqAJfRLjpXBDLiK6UUWzk3j2VFnERQ,1111
73
+ aprsd/utils/trace.py,sha256=oya2ElYKn04yanmAoynaCnETJHvEeI_du-DCIApZDsA,5558
74
+ aprsd/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ aprsd/web/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ aprsd/web/admin/static/css/index.css,sha256=A0knpKbvbu2hxwV4yHXzb7l712GviOfEM4fl1NkjhEc,1282
77
+ aprsd/web/admin/static/css/prism.css,sha256=s2Izg4hP_qkrFH2sS2VN-ABdXMrEb8QFGLsNop_Nlx0,2671
78
+ aprsd/web/admin/static/css/tabs.css,sha256=bFU7TDkH7QLFcnCcMy2B8iVRYczTStlgpwxI2vpnLmw,644
79
+ aprsd/web/admin/static/images/Untitled.png,sha256=j03PNbZ_02asRRKWcezQUF79L283afDdrAcNBMqYFhk,37797
80
+ aprsd/web/admin/static/images/aprs-symbols-16-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
81
+ aprsd/web/admin/static/images/aprs-symbols-16-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
82
+ aprsd/web/admin/static/images/aprs-symbols-64-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
83
+ aprsd/web/admin/static/images/aprs-symbols-64-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
84
+ aprsd/web/admin/static/images/aprs-symbols-64-2.png,sha256=OIP7l9temgE-GfB8s29fytJ59GlFQ3TUpEqAA0Gzs2I,40716
85
+ aprsd/web/admin/static/js/charts.js,sha256=spWghq8S-F9hIqpKUNNaWjxSeJxBE3XrUEac6oRU-kw,7354
86
+ aprsd/web/admin/static/js/echarts.js,sha256=iR1LaJcw49qu4fB3nKJ0ilv4WI6cQsDLdNFugv0MGc0,11738
87
+ aprsd/web/admin/static/js/logs.js,sha256=wIuX-Fxa30O3KVyZzDqwp7bS7FNE-qNNHzik0UmIrgU,658
88
+ aprsd/web/admin/static/js/main.js,sha256=Ix-otPASp9_zYNoJJAmnQsgeZdAsaxJTPqDPixu-rtU,8128
89
+ aprsd/web/admin/static/js/prism.js,sha256=38yQvPqke_0dwkM6gVvp24LPl2Xs3oO0GvvLkjb1i6A,27861
90
+ aprsd/web/admin/static/js/send-message.js,sha256=GPGOOn589WdJhKWxS20FiVKkq7jDFKQQHYQJdW2psAw,3852
91
+ aprsd/web/admin/static/js/tabs.js,sha256=cRePBekcExNQO54eRVGCnNXB1JHM9uURnv6LNoe8LMs,889
92
+ aprsd/web/admin/templates/index.html,sha256=w4Qid-R1fK4OFtbe_vnRj9nuWOQ92fIGjD7X5Re1nFE,9083
93
+ aprsd/web/chat/static/css/chat.css,sha256=83HA_HZGAIAdLRxQeJn9Pg6Q22Qwv4mVm4KcZqyazzU,1847
94
+ aprsd/web/chat/static/css/index.css,sha256=vtYtiP0EJi2LTIZsSSVXeAtRhKZN1mN78yXhMLlko7o,1056
95
+ aprsd/web/chat/static/css/style.css.map,sha256=whSiOQyvQ7AYHxykhuFus-Zm9cjkvc5aG186kwrpP4s,174659
96
+ aprsd/web/chat/static/css/tabs.css,sha256=tMRkFCd7frgfNXFrTmMfDfYRr4vOfCgqMSvfKtP-RDw,720
97
+ aprsd/web/chat/static/css/upstream/bootstrap.min.css,sha256=svwVP4WOU1MoR1TXJrmgIp5yToNuswkXqES3UeybGI8,232949
98
+ aprsd/web/chat/static/css/upstream/font.woff2,sha256=zpkGCyyeaAB_KUJJmzJGE9yDUZxhMb4ChY5gjjImxLw,883712
99
+ aprsd/web/chat/static/css/upstream/google-fonts.css,sha256=c1h0sMlh_aMph2FLV2XgzuiKqmqvp49J1Z6ZwWq3O7k,549
100
+ aprsd/web/chat/static/css/upstream/jquery-ui.css,sha256=-bdRwc0NKw-Rhi25h_7Z3aSHWLFeb0LKZ3lrRfSyFwI,36536
101
+ aprsd/web/chat/static/css/upstream/jquery.toast.css,sha256=SubYRHj60jcbWrx0wD_6iqsRyVysJA762BP7lRH6qSo,4887
102
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff,sha256=fOvpeP3mYealppCq2b7YNwMxi_WMKQEXTe_2qpuqVkM,72376
103
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2,sha256=J2QBYyqZhAC-iliVA49PctN2DTw9aq889EXRCcudFUA,44380
104
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff,sha256=nEb3kpsIyHUYqn77vxYB5IXu7YKfFJ4_Ab61ASDNs74,72456
105
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2,sha256=3dTvf5f0NhtghB1ZdTIYpXE0sPmfW0apYSI08cJzOrA,43760
106
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff,sha256=P200iM9lN09vZ2wxU0CwrCvoMr1VJAyAlEjjbvm5YyY,101648
107
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2,sha256=mDS4KtJuKjdYPSJnahLdLrD-fIA1aiEU0NsaqLOJlTc,78268
108
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff,sha256=y56eaTGSQTzeKx8hwdwdRLb-eyfMK0WOizWdGPn_j04,16276
109
+ aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2,sha256=5CqIRERIrD1gVJzHwf8sipyschA0wHPYChSkTnlzDMo,13224
110
+ aprsd/web/chat/static/images/Untitled.png,sha256=j03PNbZ_02asRRKWcezQUF79L283afDdrAcNBMqYFhk,37797
111
+ aprsd/web/chat/static/images/aprs-symbols-16-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
112
+ aprsd/web/chat/static/images/aprs-symbols-16-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
113
+ aprsd/web/chat/static/images/aprs-symbols-64-0.png,sha256=Wd1Mbh6L4fYYmjRR01a0TzCVKm8-rqfBlNSV8WFx4g4,52962
114
+ aprsd/web/chat/static/images/aprs-symbols-64-1.png,sha256=cKj--7nEAir_Br_Zp3-vtUhx2v5sGakuPtJzrmGhyrE,48951
115
+ aprsd/web/chat/static/images/aprs-symbols-64-2.png,sha256=OIP7l9temgE-GfB8s29fytJ59GlFQ3TUpEqAA0Gzs2I,40716
116
+ aprsd/web/chat/static/images/globe.svg,sha256=x7kmRI-9gJaZI4FBlpG53K4ZscmqN_gajnzH-P4DzOI,1197
117
+ aprsd/web/chat/static/js/gps.js,sha256=8_DFgKvfCf8V54jULhN3GYvP3QKicJfcM-mfVPx6DzQ,2370
118
+ aprsd/web/chat/static/js/main.js,sha256=IZARmM7l-bNncXSTEo3Oq-SJfyUPPmKoEZPpVoRtXDc,1259
119
+ aprsd/web/chat/static/js/send-message.js,sha256=jMUqZ4-jUwqVJQjhnYDKpLUl7S93VDGsWXOnRBJdSNw,18851
120
+ aprsd/web/chat/static/js/tabs.js,sha256=cRePBekcExNQO54eRVGCnNXB1JHM9uURnv6LNoe8LMs,889
121
+ aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js,sha256=gGVATfqL6AhR6ukxISDCnWUX6UkUakDC2XchR0dpCDo,80664
122
+ aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js,sha256=_JqT3SQfawRcv_BIHPThkBvs0OEvtFFmqPF_lYI_Cxo,87533
123
+ aprsd/web/chat/static/js/upstream/jquery-ui.min.js,sha256=qdH_gU82QrS5SDHqeQku9i4KeF7Xbe6poSxbqorktPI,253669
124
+ aprsd/web/chat/static/js/upstream/jquery.toast.js,sha256=V4m4PbwAYUb9yr3uP64y2ogcoS9oQsl4oPLAGaxQnQI,12989
125
+ aprsd/web/chat/static/js/upstream/semantic.min.js,sha256=AYdrntK9PGcU1ZsyD7fTBJ4o0j1bMeD4xn7P-UagMW4,403125
126
+ aprsd/web/chat/static/js/upstream/socket.io.min.js,sha256=dYF5MG5zs6ekpbIOXBXelJXquX0gi_c48kkYm8tCaYE,64274
127
+ aprsd/web/chat/templates/index.html,sha256=9z8JoF3W6SlPndf28iCgdHwiaG9_f9fnk5nXWEfx5wg,6633
128
+ aprsd-3.4.1.dist-info/AUTHORS,sha256=-4JB7i9LE12SYMbLc4Rk6iXlQ0J7C4mC1RV6-vnO53E,467
129
+ aprsd-3.4.1.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
130
+ aprsd-3.4.1.dist-info/METADATA,sha256=aSg0NUOpR19y8oJAtiT_rCzfOSO5-u7b7mm3IT3SQLc,40060
131
+ aprsd-3.4.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
132
+ aprsd-3.4.1.dist-info/entry_points.txt,sha256=4fReoJUB-bFqOUK6eeXYYCvTdVLprL7KVH0hWQRP9eM,171
133
+ aprsd-3.4.1.dist-info/top_level.txt,sha256=v1O96niUcJOTMh9aQnFRknbScJ6mMOwqurdbxeaeSjs,6
134
+ aprsd-3.4.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.36.1)
2
+ Generator: setuptools (75.1.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