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,374 @@
1
+ // jQuery toast plugin created by Kamran Ahmed copyright MIT license 2015
2
+ if ( typeof Object.create !== 'function' ) {
3
+ Object.create = function( obj ) {
4
+ function F() {}
5
+ F.prototype = obj;
6
+ return new F();
7
+ };
8
+ }
9
+
10
+ (function( $, window, document, undefined ) {
11
+
12
+ "use strict";
13
+
14
+ var Toast = {
15
+
16
+ _positionClasses : ['bottom-left', 'bottom-right', 'top-right', 'top-left', 'bottom-center', 'top-center', 'mid-center'],
17
+ _defaultIcons : ['success', 'error', 'info', 'warning'],
18
+
19
+ init: function (options, elem) {
20
+ this.prepareOptions(options, $.toast.options);
21
+ this.process();
22
+ },
23
+
24
+ prepareOptions: function(options, options_to_extend) {
25
+ var _options = {};
26
+ if ( ( typeof options === 'string' ) || ( options instanceof Array ) ) {
27
+ _options.text = options;
28
+ } else {
29
+ _options = options;
30
+ }
31
+ this.options = $.extend( {}, options_to_extend, _options );
32
+ },
33
+
34
+ process: function () {
35
+ this.setup();
36
+ this.addToDom();
37
+ this.position();
38
+ this.bindToast();
39
+ this.animate();
40
+ },
41
+
42
+ setup: function () {
43
+
44
+ var _toastContent = '';
45
+
46
+ this._toastEl = this._toastEl || $('<div></div>', {
47
+ class : 'jq-toast-single'
48
+ });
49
+
50
+ // For the loader on top
51
+ _toastContent += '<span class="jq-toast-loader"></span>';
52
+
53
+ if ( this.options.allowToastClose ) {
54
+ _toastContent += '<span class="close-jq-toast-single">&times;</span>';
55
+ };
56
+
57
+ if ( this.options.text instanceof Array ) {
58
+
59
+ if ( this.options.heading ) {
60
+ _toastContent +='<h2 class="jq-toast-heading">' + this.options.heading + '</h2>';
61
+ };
62
+
63
+ _toastContent += '<ul class="jq-toast-ul">';
64
+ for (var i = 0; i < this.options.text.length; i++) {
65
+ _toastContent += '<li class="jq-toast-li" id="jq-toast-item-' + i + '">' + this.options.text[i] + '</li>';
66
+ }
67
+ _toastContent += '</ul>';
68
+
69
+ } else {
70
+ if ( this.options.heading ) {
71
+ _toastContent +='<h2 class="jq-toast-heading">' + this.options.heading + '</h2>';
72
+ };
73
+ _toastContent += this.options.text;
74
+ }
75
+
76
+ this._toastEl.html( _toastContent );
77
+
78
+ if ( this.options.bgColor !== false ) {
79
+ this._toastEl.css("background-color", this.options.bgColor);
80
+ };
81
+
82
+ if ( this.options.textColor !== false ) {
83
+ this._toastEl.css("color", this.options.textColor);
84
+ };
85
+
86
+ if ( this.options.textAlign ) {
87
+ this._toastEl.css('text-align', this.options.textAlign);
88
+ }
89
+
90
+ if ( this.options.icon !== false ) {
91
+ this._toastEl.addClass('jq-has-icon');
92
+
93
+ if ( $.inArray(this.options.icon, this._defaultIcons) !== -1 ) {
94
+ this._toastEl.addClass('jq-icon-' + this.options.icon);
95
+ };
96
+ };
97
+
98
+ if ( this.options.class !== false ){
99
+ this._toastEl.addClass(this.options.class)
100
+ }
101
+ },
102
+
103
+ position: function () {
104
+ if ( ( typeof this.options.position === 'string' ) && ( $.inArray( this.options.position, this._positionClasses) !== -1 ) ) {
105
+
106
+ if ( this.options.position === 'bottom-center' ) {
107
+ this._container.css({
108
+ left: ( $(window).outerWidth() / 2 ) - this._container.outerWidth()/2,
109
+ bottom: 20
110
+ });
111
+ } else if ( this.options.position === 'top-center' ) {
112
+ this._container.css({
113
+ left: ( $(window).outerWidth() / 2 ) - this._container.outerWidth()/2,
114
+ top: 20
115
+ });
116
+ } else if ( this.options.position === 'mid-center' ) {
117
+ this._container.css({
118
+ left: ( $(window).outerWidth() / 2 ) - this._container.outerWidth()/2,
119
+ top: ( $(window).outerHeight() / 2 ) - this._container.outerHeight()/2
120
+ });
121
+ } else {
122
+ this._container.addClass( this.options.position );
123
+ }
124
+
125
+ } else if ( typeof this.options.position === 'object' ) {
126
+ this._container.css({
127
+ top : this.options.position.top ? this.options.position.top : 'auto',
128
+ bottom : this.options.position.bottom ? this.options.position.bottom : 'auto',
129
+ left : this.options.position.left ? this.options.position.left : 'auto',
130
+ right : this.options.position.right ? this.options.position.right : 'auto'
131
+ });
132
+ } else {
133
+ this._container.addClass( 'bottom-left' );
134
+ }
135
+ },
136
+
137
+ bindToast: function () {
138
+
139
+ var that = this;
140
+
141
+ this._toastEl.on('afterShown', function () {
142
+ that.processLoader();
143
+ });
144
+
145
+ this._toastEl.find('.close-jq-toast-single').on('click', function ( e ) {
146
+
147
+ e.preventDefault();
148
+
149
+ if( that.options.showHideTransition === 'fade') {
150
+ that._toastEl.trigger('beforeHide');
151
+ that._toastEl.fadeOut(function () {
152
+ that._toastEl.trigger('afterHidden');
153
+ });
154
+ } else if ( that.options.showHideTransition === 'slide' ) {
155
+ that._toastEl.trigger('beforeHide');
156
+ that._toastEl.slideUp(function () {
157
+ that._toastEl.trigger('afterHidden');
158
+ });
159
+ } else {
160
+ that._toastEl.trigger('beforeHide');
161
+ that._toastEl.hide(function () {
162
+ that._toastEl.trigger('afterHidden');
163
+ });
164
+ }
165
+ });
166
+
167
+ if ( typeof this.options.beforeShow == 'function' ) {
168
+ this._toastEl.on('beforeShow', function () {
169
+ that.options.beforeShow(that._toastEl);
170
+ });
171
+ };
172
+
173
+ if ( typeof this.options.afterShown == 'function' ) {
174
+ this._toastEl.on('afterShown', function () {
175
+ that.options.afterShown(that._toastEl);
176
+ });
177
+ };
178
+
179
+ if ( typeof this.options.beforeHide == 'function' ) {
180
+ this._toastEl.on('beforeHide', function () {
181
+ that.options.beforeHide(that._toastEl);
182
+ });
183
+ };
184
+
185
+ if ( typeof this.options.afterHidden == 'function' ) {
186
+ this._toastEl.on('afterHidden', function () {
187
+ that.options.afterHidden(that._toastEl);
188
+ });
189
+ };
190
+
191
+ if ( typeof this.options.onClick == 'function' ) {
192
+ this._toastEl.on('click', function () {
193
+ that.options.onClick(that._toastEl);
194
+ });
195
+ };
196
+ },
197
+
198
+ addToDom: function () {
199
+
200
+ var _container = $('.jq-toast-wrap');
201
+
202
+ if ( _container.length === 0 ) {
203
+
204
+ _container = $('<div></div>',{
205
+ class: "jq-toast-wrap",
206
+ role: "alert",
207
+ "aria-live": "polite"
208
+ });
209
+
210
+ $('body').append( _container );
211
+
212
+ } else if ( !this.options.stack || isNaN( parseInt(this.options.stack, 10) ) ) {
213
+ _container.empty();
214
+ }
215
+
216
+ _container.find('.jq-toast-single:hidden').remove();
217
+
218
+ _container.append( this._toastEl );
219
+
220
+ if ( this.options.stack && !isNaN( parseInt( this.options.stack ), 10 ) ) {
221
+
222
+ var _prevToastCount = _container.find('.jq-toast-single').length,
223
+ _extToastCount = _prevToastCount - this.options.stack;
224
+
225
+ if ( _extToastCount > 0 ) {
226
+ $('.jq-toast-wrap').find('.jq-toast-single').slice(0, _extToastCount).remove();
227
+ };
228
+
229
+ }
230
+
231
+ this._container = _container;
232
+ },
233
+
234
+ canAutoHide: function () {
235
+ return ( this.options.hideAfter !== false ) && !isNaN( parseInt( this.options.hideAfter, 10 ) );
236
+ },
237
+
238
+ processLoader: function () {
239
+ // Show the loader only, if auto-hide is on and loader is demanded
240
+ if (!this.canAutoHide() || this.options.loader === false) {
241
+ return false;
242
+ }
243
+
244
+ var loader = this._toastEl.find('.jq-toast-loader');
245
+
246
+ // 400 is the default time that jquery uses for fade/slide
247
+ // Divide by 1000 for milliseconds to seconds conversion
248
+ var transitionTime = (this.options.hideAfter - 400) / 1000 + 's';
249
+ var loaderBg = this.options.loaderBg;
250
+
251
+ var style = loader.attr('style') || '';
252
+ style = style.substring(0, style.indexOf('-webkit-transition')); // Remove the last transition definition
253
+
254
+ style += '-webkit-transition: width ' + transitionTime + ' ease-in; \
255
+ -o-transition: width ' + transitionTime + ' ease-in; \
256
+ transition: width ' + transitionTime + ' ease-in; \
257
+ background-color: ' + loaderBg + ';';
258
+
259
+
260
+ loader.attr('style', style).addClass('jq-toast-loaded');
261
+ },
262
+
263
+ animate: function () {
264
+
265
+ var that = this;
266
+
267
+ this._toastEl.hide();
268
+
269
+ this._toastEl.trigger('beforeShow');
270
+
271
+ if ( this.options.showHideTransition.toLowerCase() === 'fade' ) {
272
+ this._toastEl.fadeIn(function ( ){
273
+ that._toastEl.trigger('afterShown');
274
+ });
275
+ } else if ( this.options.showHideTransition.toLowerCase() === 'slide' ) {
276
+ this._toastEl.slideDown(function ( ){
277
+ that._toastEl.trigger('afterShown');
278
+ });
279
+ } else {
280
+ this._toastEl.show(function ( ){
281
+ that._toastEl.trigger('afterShown');
282
+ });
283
+ }
284
+
285
+ if (this.canAutoHide()) {
286
+
287
+ var that = this;
288
+
289
+ window.setTimeout(function(){
290
+
291
+ if ( that.options.showHideTransition.toLowerCase() === 'fade' ) {
292
+ that._toastEl.trigger('beforeHide');
293
+ that._toastEl.fadeOut(function () {
294
+ that._toastEl.trigger('afterHidden');
295
+ });
296
+ } else if ( that.options.showHideTransition.toLowerCase() === 'slide' ) {
297
+ that._toastEl.trigger('beforeHide');
298
+ that._toastEl.slideUp(function () {
299
+ that._toastEl.trigger('afterHidden');
300
+ });
301
+ } else {
302
+ that._toastEl.trigger('beforeHide');
303
+ that._toastEl.hide(function () {
304
+ that._toastEl.trigger('afterHidden');
305
+ });
306
+ }
307
+
308
+ }, this.options.hideAfter);
309
+ };
310
+ },
311
+
312
+ reset: function ( resetWhat ) {
313
+
314
+ if ( resetWhat === 'all' ) {
315
+ $('.jq-toast-wrap').remove();
316
+ } else {
317
+ this._toastEl.remove();
318
+ }
319
+
320
+ },
321
+
322
+ update: function(options) {
323
+ this.prepareOptions(options, this.options);
324
+ this.setup();
325
+ this.bindToast();
326
+ },
327
+
328
+ close: function() {
329
+ this._toastEl.find('.close-jq-toast-single').click();
330
+ }
331
+ };
332
+
333
+ $.toast = function(options) {
334
+ var toast = Object.create(Toast);
335
+ toast.init(options, this);
336
+
337
+ return {
338
+
339
+ reset: function ( what ) {
340
+ toast.reset( what );
341
+ },
342
+
343
+ update: function( options ) {
344
+ toast.update( options );
345
+ },
346
+
347
+ close: function( ) {
348
+ toast.close( );
349
+ }
350
+ }
351
+ };
352
+
353
+ $.toast.options = {
354
+ text: '',
355
+ heading: '',
356
+ showHideTransition: 'fade',
357
+ allowToastClose: true,
358
+ hideAfter: 3000,
359
+ loader: true,
360
+ loaderBg: '#9EC600',
361
+ stack: 5,
362
+ position: 'bottom-left',
363
+ bgColor: false,
364
+ textColor: false,
365
+ textAlign: 'left',
366
+ icon: false,
367
+ beforeShow: function () {},
368
+ afterShown: function () {},
369
+ beforeHide: function () {},
370
+ afterHidden: function () {},
371
+ onClick: function () {}
372
+ };
373
+
374
+ })( jQuery, window, document );