warp-beacon 2.7.30__tar.gz → 2.7.31__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {warp_beacon-2.7.30/warp_beacon.egg-info → warp_beacon-2.7.31}/PKG-INFO +1 -1
- warp_beacon-2.7.31/warp_beacon/__version__.py +2 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/__init__.py +3 -3
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/fail_handler.py +3 -2
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/handlers.py +11 -4
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/uploader/__init__.py +5 -4
- {warp_beacon-2.7.30 → warp_beacon-2.7.31/warp_beacon.egg-info}/PKG-INFO +1 -1
- warp_beacon-2.7.30/warp_beacon/__version__.py +0 -2
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/LICENSE +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/MANIFEST.in +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/README.md +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/assets/cc-group-black.png +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/assets/placeholder.gif +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/etc/.gitignore +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/etc/accounts.json +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/etc/proxies.json +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/etc/warp_beacon.conf +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/etc/warp_beacon.service +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/pyproject.toml +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/setup.cfg +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/setup.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/compress/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/compress/video.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/jobs/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/jobs/abstract.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/jobs/download_job.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/jobs/types.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/jobs/upload_job.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/mediainfo/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/mediainfo/abstract.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/mediainfo/audio.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/mediainfo/silencer.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/mediainfo/video.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scheduler/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scheduler/instagram_human.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scheduler/scheduler.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/abstract.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/account_selector.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/exceptions.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/instagram/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/instagram/captcha.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/instagram/instagram.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/instagram/wb_instagrapi.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/link_resolver.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/utils.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/youtube/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/youtube/abstract.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/youtube/music.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/youtube/shorts.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/scraper/youtube/youtube.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/storage/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/storage/mongo.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/__init__.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/bot.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/caption_shortener.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/download_status.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/edit_message.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/placeholder_message.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/progress_bar.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/progress_file_reader.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/types.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/telegram/utils.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/warp_beacon.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon/yt_auth.py +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon.egg-info/SOURCES.txt +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon.egg-info/dependency_links.txt +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon.egg-info/entry_points.txt +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon.egg-info/requires.txt +0 -0
- {warp_beacon-2.7.30 → warp_beacon-2.7.31}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -79,8 +79,6 @@ class AsyncDownloader(object):
|
|
79
79
|
|
80
80
|
def try_next_account(self, selector: AccountSelector, job: DownloadJob, report_error: str = None) -> None:
|
81
81
|
logging.warning("Switching account!")
|
82
|
-
if job.account_switches > self.acc_selector.count_service_accounts(job.job_origin):
|
83
|
-
raise AllAccountsFailed("All config accounts failed!", job=job, reason=report_error)
|
84
82
|
if report_error:
|
85
83
|
selector.bump_acc_fail(report_error)
|
86
84
|
selector.next()
|
@@ -112,6 +110,9 @@ class AsyncDownloader(object):
|
|
112
110
|
replay=True
|
113
111
|
))
|
114
112
|
continue
|
113
|
+
|
114
|
+
if job.account_switches > self.acc_selector.count_service_accounts(job.job_origin):
|
115
|
+
raise AllAccountsFailed("All config accounts failed!", job=job)
|
115
116
|
if not job.in_process:
|
116
117
|
if job.job_postponed_until > 0:
|
117
118
|
if (job.job_postponed_until - time.time()) > 0:
|
@@ -403,7 +404,6 @@ class AsyncDownloader(object):
|
|
403
404
|
else:
|
404
405
|
logging.info("Job already in work in parallel worker. Redirecting job to upload worker.")
|
405
406
|
self.uploader.queue_task(job.to_upload_job())
|
406
|
-
|
407
407
|
except AllAccountsFailed as e:
|
408
408
|
self.send_message_to_admin(
|
409
409
|
f"Task <code>{job.job_id}</code> failed. URL: '{job.url}'. Reason: '<b>AllAccountsFailed</b>'."
|
@@ -28,13 +28,14 @@ class FailHandler(object):
|
|
28
28
|
logging.exception(e)
|
29
29
|
return db_id
|
30
30
|
|
31
|
-
def get_failed_jobs(self) -> list:
|
31
|
+
def get_failed_jobs(self, clean: bool = True) -> list:
|
32
32
|
ret = []
|
33
33
|
try:
|
34
34
|
cursor = self.db.find()
|
35
35
|
for document in cursor:
|
36
36
|
ret.append(pickle.loads(document["job_data"]))
|
37
|
-
|
37
|
+
if clean:
|
38
|
+
self.db.delete_many({})
|
38
39
|
except Exception as e:
|
39
40
|
logging.error("Failed to get failed jobs!")
|
40
41
|
logging.exception(e)
|
@@ -1,6 +1,7 @@
|
|
1
|
-
import
|
1
|
+
import logging
|
2
|
+
|
2
3
|
from pyrogram import Client
|
3
|
-
from pyrogram.types import Message, CallbackQuery
|
4
|
+
from pyrogram.types import Message, CallbackQuery#, InlineKeyboardButton, InlineKeyboardMarkup
|
4
5
|
from pyrogram.enums import ChatType, ParseMode
|
5
6
|
from pyrogram.types import BotCommand
|
6
7
|
|
@@ -13,8 +14,8 @@ from warp_beacon.jobs.upload_job import UploadJob
|
|
13
14
|
from warp_beacon.jobs import Origin
|
14
15
|
from warp_beacon.jobs.types import JobType
|
15
16
|
from warp_beacon.scraper.link_resolver import LinkResolver
|
16
|
-
|
17
|
-
import
|
17
|
+
from warp_beacon.scraper.fail_handler import FailHandler
|
18
|
+
from warp_beacon.storage.mongo import DBClient
|
18
19
|
|
19
20
|
class Handlers(object):
|
20
21
|
storage = None
|
@@ -24,6 +25,12 @@ class Handlers(object):
|
|
24
25
|
def __init__(self, bot: "Bot") -> None:
|
25
26
|
self.bot = bot
|
26
27
|
self.storage = bot.storage
|
28
|
+
# add uploader callbacks to handle service restart
|
29
|
+
for job in FailHandler(DBClient()).get_failed_jobs(clean=False):
|
30
|
+
self.bot.uploader.add_callback(
|
31
|
+
job.placeholder_message_id,
|
32
|
+
self.upload_wrapper
|
33
|
+
)
|
27
34
|
|
28
35
|
async def help(self, _: Client, message: Message) -> None:
|
29
36
|
"""Send a message when the command /help is issued."""
|
@@ -50,10 +50,11 @@ class AsyncUploader(object):
|
|
50
50
|
self.threads.append(thread)
|
51
51
|
|
52
52
|
def add_callback(self, message_id: int, callback: Callable) -> None:
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
if message_id not in self.callbacks:
|
54
|
+
async def callback_wrap(*args, **kwargs) -> None:
|
55
|
+
await callback(*args, **kwargs)
|
56
|
+
#self.remove_callback(message_id)
|
57
|
+
self.callbacks[message_id] = {"callback": callback_wrap}
|
57
58
|
|
58
59
|
def remove_callback(self, message_id: int) -> None:
|
59
60
|
if message_id in self.callbacks:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|