def start(self): request = Request(con_pool_size=8) self.bot = MQBot(token=self.bot_key, request=request) self.subscription_watcher = SubscriptionWatcher.load_from_json( self.api, self.bot) self.subscription_watcher_thread = Thread( target=self.subscription_watcher.run) updater = Updater(bot=self.bot, use_context=True) dispatcher = updater.dispatcher logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) self.functionalities = self.initialise_functionalities() for func in self.functionalities: func.register(dispatcher) updater.start_polling() self.alive = True # Start the sub watcher self.subscription_watcher_thread.start() while self.alive: print("Main thread alive") try: time.sleep(30) except KeyboardInterrupt: self.alive = False # Kill the sub watcher self.subscription_watcher.running = False self.subscription_watcher_thread.join()
def test_to_json_and_back(self, bot): test_watcher_file = "./test_subscription_watcher.json" if os.path.exists(test_watcher_file): os.remove(test_watcher_file) old_filename = SubscriptionWatcher.FILENAME SubscriptionWatcher.FILENAME = test_watcher_file api = MockExportAPI() latest_submissions = [ SubmissionBuilder(submission_id="123243").build_short_submission(), SubmissionBuilder(submission_id="123242").build_short_submission(), SubmissionBuilder(submission_id="123240").build_short_submission() ] subscription1 = Subscription("query", 1234) subscription2 = Subscription("example", 5678) watcher = SubscriptionWatcher(api, bot) watcher._update_latest_ids(latest_submissions) watcher.subscriptions.add(subscription1) watcher.subscriptions.add(subscription2) watcher.blocklists[3452] = {"test", "example"} watcher.blocklists[1453] = {"ych"} try: watcher.save_to_json() new_watcher = SubscriptionWatcher.load_from_json(api, bot) assert len(new_watcher.latest_ids) == 3 assert "123243" in new_watcher.latest_ids assert "123242" in new_watcher.latest_ids assert "123240" in new_watcher.latest_ids assert list(watcher.latest_ids) == list(new_watcher.latest_ids) assert len(new_watcher.subscriptions) == 2 list_subs = list(new_watcher.subscriptions) if list_subs[0].query == "query": assert list_subs[0].destination == 1234 assert list_subs[1].query == "example" assert list_subs[1].destination == 5678 else: assert list_subs[0].query == "example" assert list_subs[0].destination == 5678 assert list_subs[1].query == "query" assert list_subs[1].destination == 1234 assert len(new_watcher.blocklists) == 2 assert 3452 in new_watcher.blocklists assert len(new_watcher.blocklists[3452]) == 2 assert isinstance(new_watcher.blocklists[3452], set) assert "test" in new_watcher.blocklists[3452] assert "example" in new_watcher.blocklists[3452] assert 1453 in new_watcher.blocklists assert len(new_watcher.blocklists[1453]) == 1 assert isinstance(new_watcher.blocklists[1453], set) assert "ych" in new_watcher.blocklists[1453] finally: SubscriptionWatcher.FILENAME = old_filename os.remove(test_watcher_file)
def test_from_json(self, bot): test_watcher_file = "./test_subscription_watcher.json" if os.path.exists(test_watcher_file): os.remove(test_watcher_file) old_filename = SubscriptionWatcher.FILENAME SubscriptionWatcher.FILENAME = test_watcher_file try: data = { "latest_ids": ["12423", "12422", "12420"], "subscriptions": [{ "query": "test", "destination": 87238, "latest_update": "2019-10-26T18:57:09" }, { "query": "example", "destination": -87023, "latest_update": "2019-10-25T17:34:08" }], "blacklists": { "8732": ["example", "ych"], "-123": ["fred"] } } with open(test_watcher_file, "w+") as f: json.dump(data, f) api = MockExportAPI() watcher = SubscriptionWatcher.load_from_json(api, bot) assert len(watcher.latest_ids) == 3 assert "12423" in watcher.latest_ids assert "12422" in watcher.latest_ids assert "12420" in watcher.latest_ids assert len(watcher.subscriptions) == 2 list_subs = list(watcher.subscriptions) if list_subs[0].query == "test": assert list_subs[0].destination == 87238 assert list_subs[0].latest_update == datetime.datetime( 2019, 10, 26, 18, 57, 9) assert list_subs[1].query == "example" assert list_subs[1].destination == -87023 assert list_subs[1].latest_update == datetime.datetime( 2019, 10, 25, 17, 34, 8) else: assert list_subs[0].query == "example" assert list_subs[0].destination == -87023 assert list_subs[0].latest_update == datetime.datetime( 2019, 10, 25, 17, 34, 8) assert list_subs[1].query == "test" assert list_subs[1].destination == 87238 assert list_subs[1].latest_update == datetime.datetime( 2019, 10, 26, 18, 57, 9) assert len(watcher.blocklists) == 2 assert 8732 in watcher.blocklists assert len(watcher.blocklists[8732]) == 2 assert isinstance(watcher.blocklists[8732], set) assert "example" in watcher.blocklists[8732] assert "ych" in watcher.blocklists[8732] assert -123 in watcher.blocklists assert len(watcher.blocklists[-123]) == 1 assert isinstance(watcher.blocklists[-123], set) assert "fred" in watcher.blocklists[-123] finally: SubscriptionWatcher.FILENAME = old_filename os.remove(test_watcher_file)