-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathmain.py
More file actions
79 lines (59 loc) · 2.19 KB
/
main.py
File metadata and controls
79 lines (59 loc) · 2.19 KB
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
import asyncio
import datetime
import signal
import sys
import types
from src.deletion_handler.deletion_handler import WatcherManager
from src.job_manager import JobManager
from src.settings.settings import Settings
from src.utils.log_setup import logger
from src.utils.startup import launch_steps
settings = Settings()
job_manager = JobManager(settings)
watch_manager = WatcherManager(settings)
def terminate(
sigterm: signal.SIGTERM, # noqa: ARG001, pylint: disable=unused-argument
frame: types.FrameType, # noqa: ARG001, pylint: disable=unused-argument
) -> None:
"""Terminate cleanly. Needed for respecting 'docker stop'.
Args:
----
sigterm (signal.Signal): The termination signal.
frame: The execution frame.
"""
logger.info(
f"Termination signal received at {datetime.datetime.now()}."
) # noqa: DTZ005
watch_manager.stop()
sys.exit(0)
async def wait_next_run():
# Calculate next run time dynamically (to display)
next_run = datetime.datetime.now() + datetime.timedelta(
minutes=settings.general.timer
)
formatted_next_run = next_run.strftime("%Y-%m-%d %H:%M")
logger.verbose(f"*** Done - Next run at {formatted_next_run} ****")
# Wait for the next run
await asyncio.sleep(settings.general.timer * 60)
# Main function
async def main():
await launch_steps(settings)
if settings.jobs.detect_deletions:
await WatcherManager(settings).setup()
# Start Cleaning
while True:
logger.info("-" * 50)
# Refresh qBit Cookies (SABnzbd doesn't need cookie refresh)
for qbit in settings.download_clients.qbittorrent:
await qbit.refresh_cookie()
# Run script for each instance
for arr in settings.instances:
await job_manager.run_jobs(arr)
logger.verbose("")
# Run download client jobs (these run independently of *arr instances)
await job_manager.run_download_client_jobs()
# Wait for the next run
await wait_next_run()
if __name__ == "__main__":
signal.signal(signal.SIGTERM, terminate)
asyncio.run(main())