more bugs. Cleaner dockerfile
This commit is contained in:
parent
8f3ea25662
commit
024da446e7
@ -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
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user