MCPcopy Create free account
hub / github.com/eternnoir/pyTelegramBotAPI / FileHandlerBackend

Class FileHandlerBackend

telebot/handler_backends.py:56–129  ·  view source on GitHub ↗

:meta private:

Source from the content-addressed store, hash-verified

54
55
56class FileHandlerBackend(HandlerBackend):
57 """
58 :meta private:
59 """
60 def __init__(self, handlers=None, filename='./.handler-saves/handlers.save', delay=120):
61 super(FileHandlerBackend, self).__init__(handlers)
62 self.filename = filename
63 self.delay = delay
64 self.timer = threading.Timer(delay, self.save_handlers)
65
66 def register_handler(self, handler_group_id, handler):
67 if handler_group_id in self.handlers:
68 self.handlers[handler_group_id].append(handler)
69 else:
70 self.handlers[handler_group_id] = [handler]
71 self.start_save_timer()
72
73 def clear_handlers(self, handler_group_id):
74 self.handlers.pop(handler_group_id, None)
75 self.start_save_timer()
76
77 def get_handlers(self, handler_group_id):
78 handlers = self.handlers.pop(handler_group_id, None)
79 self.start_save_timer()
80 return handlers
81
82 def start_save_timer(self):
83 if not self.timer.is_alive():
84 if self.delay <= 0:
85 self.save_handlers()
86 else:
87 self.timer = threading.Timer(self.delay, self.save_handlers)
88 self.timer.start()
89
90 def save_handlers(self):
91 self.dump_handlers(self.handlers, self.filename)
92
93 def load_handlers(self, filename=None, del_file_after_loading=True):
94 if not filename:
95 filename = self.filename
96 tmp = self.return_load_handlers(filename, del_file_after_loading=del_file_after_loading)
97 if tmp is not None:
98 self.handlers.update(tmp)
99
100 @staticmethod
101 def dump_handlers(handlers, filename, file_mode="wb"):
102 dirs = filename.rsplit('/', maxsplit=1)[0]
103 os.makedirs(dirs, exist_ok=True)
104
105 with open(filename + ".tmp", file_mode) as file:
106 if apihelper.CUSTOM_SERIALIZER is None:
107 pickle.dump(handlers, file)
108 else:
109 apihelper.CUSTOM_SERIALIZER.dump(handlers, file)
110
111 if os.path.isfile(filename):
112 os.remove(filename)
113

Calls

no outgoing calls

Used in the wild real call sites across dependent graphs

searching dependent graphs…