-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtrassir_script_framework.py
6406 lines (5269 loc) · 261 KB
/
trassir_script_framework.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# -*- coding: utf-8 -*-
"""
<parameters>
<company>AATrubilin</company>
<title>trassir_script_framework</title>
<version>0.65</version>
</parameters>
"""
# _SERVICE_VERSION = 0.66
_TBOT_SERVICE = """
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
"""
import re
import os
import sys
import ssl
import time
import json
import pickle
import base64
import ftplib
import urllib
import urllib2
import httplib
import logging
import threading
import subprocess
if os.name == "nt":
import winsound
from Queue import Queue, Empty
from functools import wraps
from collections import deque
from __builtin__ import object as py_object
from datetime import datetime, date, timedelta
import host
logger = logging.getLogger() # pylint: disable=C0103
class ScriptError(Exception):
"""Base script exception"""
def __init__(self, *args):
super(ScriptError, self).__init__(*args)
host.timeout(1, self.rise_from_thread)
def rise_from_thread(self):
raise self
class HostLogHandler(logging.Handler):
"""Trassir main log handler"""
def __init__(self):
super(HostLogHandler, self).__init__()
def emit(self, record):
msg = self.format(record)
host.log_message(msg)
class PopupHandler(logging.Handler):
"""Trassir popup handler"""
def __init__(self):
super(PopupHandler, self).__init__()
self._popups = {
"CRITICAL": host.error,
"FATAL": host.error,
"ERROR": host.error,
"WARN": host.alert,
"WARNING": host.alert,
"INFO": host.message,
"DEBUG": host.message,
"NOTSET": host.message,
}
def emit(self, record):
msg = self.format(record)
self._popups[record.levelname](msg)
class DuplicateFilter(logging.Filter): # pylint: disable=R0903
"""Suppressing multiple messages with same content.
Tracking last logged record and filter out any
repeated (similar) records. Output something more rsyslog style.
Example:
--- The last message repeated 3 times
"""
def __init__(self):
super(DuplicateFilter, self).__init__()
self._last_log = None
self._last_log_count = 1
def filter(self, record):
record.duplicates = ""
current_log = (record.module, record.levelno, record.msg)
if current_log == self._last_log:
self._last_log_count += 1
return False
else:
if self._last_log_count > 1:
record.duplicates = (
"--- The last message repeated %s times\n" % self._last_log_count
)
self._last_log = current_log
self._last_log_count = 1
return True
class BaseUtils: # pylint: disable=R0904,C1001
"""Base utils for your scripts"""
_FOLDERS = {obj[1]: obj[3] for obj in host.objects_list("Folder")}
_TEXT_FILE_EXTENSIONS = [".txt", ".csv", ".log"]
_LPR_FLAG_BITS = {
"LPR_UP": 0x00001,
"LPR_DOWN": 0x00002,
"LPR_BLACKLIST": 0x00004,
"LPR_WHITELIST": 0x00008,
"LPR_INFO": 0x00010,
"LPR_FIRST_LANE": 0x01000,
"LPR_SECOND_LANE": 0x02000,
"LPR_THIRD_LANE": 0x04000,
"LPR_EXT_DB_ERROR": 0x00020,
"LPR_CORRECTED": 0x00040,
}
_EVENT_STR_TO_INT = {
"Border Crossed A -> B": -2010220362,
"Border Crossed B -> A": 881900680,
"Border %1 A-B Crossing": 1745631458,
"Border %1 B-A Crossing": 1382034490,
"Border %1 Unique Object A-B Crossing": -1764400102,
"Border %1 Unique Object B-A Crossing": -755097134,
"Connected To %1 under %2": -567223767,
"Connection Established": 1689573124,
"Connection Lost": -1739961019,
"Deny: %1 (%2)": 1400866841,
"Disconnected From %1": 854687023,
"FACS Connected": 928164014,
"FACS Disconnected": -528751441,
"Face Detected": -145480902,
"Face Recognized": 1904675878,
"Fire Detected": -2095846277,
"Fire Stopped": 1556160195,
"HDD Broken": -359176531,
"HDD Error": -2035571413,
"HDD Restored": 2054776042,
"Health Turns Bad": -1338064969,
"Health Turns Good": 1737407416,
"Input High to Low": 1260011944,
"Input Low to High": 108469542,
"Login Failed, %1 from %2": -1785217387,
"Login Successful, %1 from %2": 1634136664,
"Logout, %1 from %2": 334348171,
"Motion Start": -1960416690,
"Motion Stop": 452886769,
"No Connection to Cloud": -1220531757,
"Object Entered the Zone": -1484834142,
"Object Left the Zone": 1838034845,
"Output High to Low": -994975116,
"Output Low to High": 842360770,
"Pass: %1 (%2)": 1944146750,
"Photo Detected": -220640968,
"Script: %1": 865778551,
"Shutdown": 390175606,
"Signal Lost": -997068283,
"Signal Restored": -1801421619,
"Slow Down Detected": -438590449,
"Software update to version %1 succeeded": 1188419157,
"Startup": -37228692,
"Tracked Object Left Zone %1": 456308509,
"Tracked Unique Object Entered Zone %1": -1766980008,
}
_EVENT_INT_TO_STR = {v: k for k, v in _EVENT_STR_TO_INT.iteritems()}
_IMAGE_EXT = [".png", ".jpg", ".jpeg", ".bmp"]
_HTML_IMG_TEMPLATE = """<img src="data:image/png;base64,{img}" {attr}>"""
_SCR_DEFAULT_NAMES = [
"Yeni skript",
"Unnamed Script",
"უსახელო სკრიპტი",
"Жаңа скрипт",
"Script nou",
"Новый скрипт",
"Yeni skript dosyası",
"Новий скрипт",
"未命名脚本",
]
def __init__(self):
pass
# noinspection PyUnusedLocal
@staticmethod
def do_nothing(*args, **kwargs): # # pylint: disable=W0613
"""Ничего не делает.
Returns:
:obj:`bool`: ``True``
"""
return True
@staticmethod
def run_as_thread(func):
"""Декоратор для запуска функций в отдельном потоке.
Returns:
:obj:`threading.Thread`: Функция в отдельном потоке
Examples:
>>> import time
>>>
>>>
>>> @BaseUtils.run_as_thread
>>> def run_count_timer():
... time.sleep(1)
... host.stats()["run_count"] += 1
>>>
>>>
>>> run_count_timer()
"""
@wraps(func)
def run(*args, **kwargs):
thread = threading.Thread(target=func, args=args, kwargs=kwargs)
thread.daemon = True
thread.start()
return thread
return run
@staticmethod
def catch_request_exceptions(func):
"""Catch request errors"""
@wraps(func)
def wrapped(self, *args, **kwargs):
try:
return func(self, *args, **kwargs)
except urllib2.HTTPError as err:
return err.code, "HTTPError: {}".format(err.code)
except urllib2.URLError as err:
return err.reason, "URLError: {}".format(err.reason)
except httplib.HTTPException as err:
return err, "HTTPException: {}".format(err)
except ssl.SSLError as err:
return err.errno, "SSLError: {}".format(err)
return wrapped
@staticmethod
def win_encode_path(path):
"""Изменяет кодировку на ``"cp1251"`` для WinOS.
Args:
path (:obj:`str`): Путь до файла или папки
Returns:
:obj:`str`: Декодированый путь до файла или папки
Examples:
>>> path = r"D:/Shots/Скриншот.jpeg"
>>> os.path.isfile(path)
False
>>> os.path.isfile(BaseUtils.win_encode_path(path))
True
"""
if os.name == "nt":
try:
path = path.decode("utf8")
except (UnicodeDecodeError, UnicodeEncodeError):
pass
return path
@staticmethod
def is_file_exists(file_path, tries=1):
"""Проверяет, существует ли файл.
Проверка происходит в течении ``tries`` секунд.
Warning:
| Запускайте функцию только в отдельном потоке если ``tries > 1``
| Вторая и последующие проверки производятся с ``time.sleep(1)``
Args: