more bugs. Cleaner dockerfile
This commit is contained in:
		| @@ -1,7 +1,8 @@ | |||||||
| FROM python:latest | FROM python:latest | ||||||
|  |  | ||||||
|  | RUN echo "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> /etc/apt/sources.list | ||||||
| RUN apt-get update && apt-get install -y \ | RUN apt-get update && apt-get install -y \ | ||||||
| evince libcanberra-gtk-module \ | evince \ | ||||||
| # for checking | # for checking | ||||||
| xauth wget tar firefox \ | xauth wget tar firefox \ | ||||||
| # for geckodriver + gui | # for geckodriver + gui | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ where the `Dockerfile` has to be in the working directory | |||||||
| `docker run -it -v /mnt/Data/COSS/CONTAINERDATA/:/app/file_storage/ -v /mnt/Data/COSS/auto_news/app:/code --entrypoint /bin/bash auto_news` | `docker run -it -v /mnt/Data/COSS/CONTAINERDATA/:/app/file_storage/ -v /mnt/Data/COSS/auto_news/app:/code --entrypoint /bin/bash auto_news` | ||||||
|  |  | ||||||
|  |  | ||||||
| `docker run -it -v /mnt/Data/COSS/DOWNLOADS/auto_news/container_data/:/app/file_storage/ -e DISPLAY=":0" --network host -v \$XAUTHORITY:/root/.Xauthority auto_news check` | `docker run -it -v /mnt/Data/COSS/CONTAINERDATA/:/app/file_storage/ -e DISPLAY=":0" --network host -v XAUTHORITY:/root/.Xauthority auto_news check` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| import configuration | import configuration | ||||||
| models = configuration.models | models = configuration.models | ||||||
| import sys | import sys | ||||||
|  | from threading import Thread | ||||||
| import logging | import logging | ||||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| @@ -96,10 +97,10 @@ class ArticleWatcher: | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class Coordinator: | class Coordinator(Thread): | ||||||
|     def __init__(self, **kwargs) -> None: |     def __init__(self, **kwargs) -> None: | ||||||
|         """Launcher calls this Coordinator as the main thread to handle connections between the other workers (threaded).""" |         """Launcher calls this Coordinator as the main thread to handle connections between the other workers (threaded).""" | ||||||
|         pass |         super().__init__(target = self.launch) | ||||||
|      |      | ||||||
|     def add_workers(self, **kwargs): |     def add_workers(self, **kwargs): | ||||||
|         self.worker_slack = kwargs.pop("worker_slack", None)  |         self.worker_slack = kwargs.pop("worker_slack", None)  | ||||||
| @@ -112,7 +113,8 @@ class Coordinator: | |||||||
|          |          | ||||||
|         self.kwargs = kwargs |         self.kwargs = kwargs | ||||||
|  |  | ||||||
|         for w in [self.worker_slack, self.worker_download, self.worker_fetch, self.worker_upload, self.worker_compress]: |     def launch(self) -> None: | ||||||
|  |         for w in [self.worker_download, self.worker_fetch, self.worker_upload, self.worker_compress]: | ||||||
|             if not w is None: |             if not w is None: | ||||||
|                 w.start() |                 w.start() | ||||||
|  |  | ||||||
| @@ -170,12 +172,15 @@ if __name__ == "__main__": | |||||||
|         check_runner.verify_unchecked() |         check_runner.verify_unchecked() | ||||||
|  |  | ||||||
|     else: # launch with full action |     else: # launch with full action | ||||||
|  |         slack_runner = slack_runner.BotRunner(coordinator.incoming_request) | ||||||
|         kwargs = { |         kwargs = { | ||||||
|             "worker_download" : DownloadWorker(), |             "worker_download" : DownloadWorker(), | ||||||
|             "worker_fetch" : FetchWorker(), |             "worker_fetch" : FetchWorker(), | ||||||
|             "worker_upload" : UploadWorker(), |             "worker_upload" : UploadWorker(), | ||||||
|             "worker_compress" : CompressWorker(), |             "worker_compress" : CompressWorker(), | ||||||
|             "worker_slack" : slack_runner.BotRunner(coordinator.incoming_request), |             "worker_slack" : slack_runner, | ||||||
|             "worker_mail" : mail_runner, |             "worker_mail" : mail_runner, | ||||||
|         } |         } | ||||||
|         coordinator.add_workers(**kwargs) |         coordinator.add_workers(**kwargs) | ||||||
|  |         coordinator.start() | ||||||
|  |         slack_runner.start() | ||||||
|   | |||||||
| @@ -123,7 +123,7 @@ async def fetch_missed_thread_messages(): | |||||||
|             )["messages"] |             )["messages"] | ||||||
|         except SlackApiError: |         except SlackApiError: | ||||||
|             logger.error("Hit rate limit while querying threaded messages, retrying in {}s ({}/{} queries elapsed)".format(config["api_wait_time"], i, len(threads))) |             logger.error("Hit rate limit while querying threaded messages, retrying in {}s ({}/{} queries elapsed)".format(config["api_wait_time"], i, len(threads))) | ||||||
|             await asyncio.sleep(config["api_wait_time"]) |             await asyncio.sleep(int(config["api_wait_time"])) | ||||||
|             messages = slack_client.conversations_replies( |             messages = slack_client.conversations_replies( | ||||||
|                 channel = config["archive_id"], |                 channel = config["archive_id"], | ||||||
|                 ts = t.slack_ts, |                 ts = t.slack_ts, | ||||||
| @@ -152,7 +152,7 @@ async def fetch_missed_channel_reactions(): | |||||||
|             reactions = query["message"].get("reactions", []) # default = [] |             reactions = query["message"].get("reactions", []) # default = [] | ||||||
|         except SlackApiError: # probably a rate_limit: |         except SlackApiError: # probably a rate_limit: | ||||||
|             logger.error("Hit rate limit while querying reactions. retrying in {}s ({}/{} queries elapsed)".format(config["api_wait_time"], i, len(threads))) |             logger.error("Hit rate limit while querying reactions. retrying in {}s ({}/{} queries elapsed)".format(config["api_wait_time"], i, len(threads))) | ||||||
|             await asyncio.sleep(config["api_wait_time"]) |             await asyncio.sleep(int(config["api_wait_time"])) | ||||||
|             reactions = query["message"].get("reactions", []) |             reactions = query["message"].get("reactions", []) | ||||||
|  |  | ||||||
|         for r in reactions: |         for r in reactions: | ||||||
| @@ -202,11 +202,13 @@ def message_dict_to_model(message): | |||||||
|         ) |         ) | ||||||
|         logger.info("Saved (text) {} (new={})".format(m, new)) |         logger.info("Saved (text) {} (new={})".format(m, new)) | ||||||
|  |  | ||||||
|         for f in message.get("files", []): #default: [] |         files = message.get("files", []) | ||||||
|  |         if len(files) >= 1: | ||||||
|  |             f = files[0] #default: [] | ||||||
|             m.file_type = f["filetype"] |             m.file_type = f["filetype"] | ||||||
|             m.perma_link = f["url_private_download"] |             m.perma_link = f["url_private_download"] | ||||||
|             m.save() |             m.save() | ||||||
|             logger.info("Saved permalink {} to {} (possibly overwriting)".format(f["name"], m)) |             logger.info("Saved permalink {} to {}".format(f["name"], m)) | ||||||
|         if new: |         if new: | ||||||
|             return m |             return m | ||||||
|         else: |         else: | ||||||
|   | |||||||
| @@ -164,7 +164,7 @@ class BotApp(App): | |||||||
|      |      | ||||||
|  |  | ||||||
|  |  | ||||||
| class BotRunner(Thread): | class BotRunner(): | ||||||
|     """Stupid encapsulation so that we can apply the slack decorators to the BotApp""" |     """Stupid encapsulation so that we can apply the slack decorators to the BotApp""" | ||||||
|     def __init__(self, callback, *args, **kwargs) -> None: |     def __init__(self, callback, *args, **kwargs) -> None: | ||||||
|         self.bot_worker = BotApp(callback, token=config["auth_token"]) |         self.bot_worker = BotApp(callback, token=config["auth_token"]) | ||||||
| @@ -177,11 +177,11 @@ class BotRunner(Thread): | |||||||
|         def handle_incoming_reaction(event, say): |         def handle_incoming_reaction(event, say): | ||||||
|             return self.bot_worker.handle_incoming_reaction(event) |             return self.bot_worker.handle_incoming_reaction(event) | ||||||
|  |  | ||||||
|         target = self.launch |         # target = self.launch | ||||||
|         super().__init__(target=target) |         # super().__init__(target=target) | ||||||
|  |  | ||||||
|  |  | ||||||
|     def launch(self): |     def start(self): | ||||||
|         self.bot_worker.start() |         self.bot_worker.start() | ||||||
|         SocketModeHandler(self.bot_worker, config["app_token"]).start() |         SocketModeHandler(self.bot_worker, config["app_token"]).start() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -207,7 +207,7 @@ class Thread(ChatBaseModel): | |||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def initiator_message(self): |     def initiator_message(self): | ||||||
|         return self.messages[0] # todo check if this needs sorting |         return self.messages[0] # TODO check if this needs sorting | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def message_count(self): |     def message_count(self): | ||||||
| @@ -241,6 +241,7 @@ class Message(ChatBaseModel): | |||||||
|     user = ForeignKeyField(User, backref="messages") |     user = ForeignKeyField(User, backref="messages") | ||||||
|     text = TextField(default='') |     text = TextField(default='') | ||||||
|     thread = ForeignKeyField(Thread, backref="messages", default=None) |     thread = ForeignKeyField(Thread, backref="messages", default=None) | ||||||
|  |     file_type = CharField(default='') | ||||||
|     perma_link = CharField(default='') |     perma_link = CharField(default='') | ||||||
|     is_processed_override = BooleanField(default=False) |     is_processed_override = BooleanField(default=False) | ||||||
|     # reaction |     # reaction | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ def shrink_pdf(article): | |||||||
|         return article # it probably was a youtube video |         return article # it probably was a youtube video | ||||||
|          |          | ||||||
|     c = subprocess.run( |     c = subprocess.run( | ||||||
|         ["gs", "-sDEVICE=pdfwrite", "-dPDFSETTINGS=/screen", "-dNOPAUSE", "-dBATCH", f"-sOutputFile={config['default_download_path']}/compressed.pdf", f'"{article.save_path + article.file_name}"'], |         ["gs", "-sDEVICE=pdfwrite", "-dPDFSETTINGS=/screen", "-dNOPAUSE", "-dBATCH", f"-sOutputFile={config['default_download_path']}/compressed.pdf", f"{article.save_path + article.file_name}"], | ||||||
|         stdout=subprocess.PIPE, |         stdout=subprocess.PIPE, | ||||||
|         stderr=subprocess.PIPE |         stderr=subprocess.PIPE | ||||||
|     ) |     ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Remy Moll
					Remy Moll