warp-beacon 2.8.14__py3-none-any.whl → 2.8.15__py3-none-any.whl
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/__version__.py +1 -1
- warp_beacon/scraper/__init__.py +1 -1
- warp_beacon/scraper/fail_handler.py +22 -3
- warp_beacon/telegram/handlers.py +1 -13
- warp_beacon/uploader/__init__.py +47 -64
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/METADATA +1 -1
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/RECORD +11 -11
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/WHEEL +0 -0
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/entry_points.txt +0 -0
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/licenses/LICENSE +0 -0
- {warp_beacon-2.8.14.dist-info → warp_beacon-2.8.15.dist-info}/top_level.txt +0 -0
warp_beacon/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
__version__ = "2.8.
|
1
|
+
__version__ = "2.8.15"
|
2
2
|
|
warp_beacon/scraper/__init__.py
CHANGED
@@ -16,12 +16,15 @@ class FailHandler(object):
|
|
16
16
|
self.client.close()
|
17
17
|
|
18
18
|
def store_failed_job(self, job: DownloadJob) -> int:
|
19
|
-
db_id =
|
19
|
+
db_id = ""
|
20
20
|
try:
|
21
21
|
job_serilized = pickle.dumps(job)
|
22
22
|
db_id = self.db.insert_one(
|
23
23
|
{
|
24
|
-
"job_data": job_serilized
|
24
|
+
"job_data": job_serilized,
|
25
|
+
"uniq_id": job.uniq_id,
|
26
|
+
"message_id": job.message_id,
|
27
|
+
"chat_id": job.chat_id
|
25
28
|
}).inserted_id
|
26
29
|
except Exception as e:
|
27
30
|
logging.error("Failed to store job as failed!")
|
@@ -33,10 +36,26 @@ class FailHandler(object):
|
|
33
36
|
try:
|
34
37
|
cursor = self.db.find()
|
35
38
|
for document in cursor:
|
36
|
-
ret.append(
|
39
|
+
ret.append({
|
40
|
+
"_id": document["_id"],
|
41
|
+
"job": pickle.loads(document["job_data"]),
|
42
|
+
"uniq_id": document.get("uniq_id"),
|
43
|
+
"message_id": document.get("message_id"),
|
44
|
+
"chat_id": document.get("chat_id")
|
45
|
+
})
|
37
46
|
if clean:
|
38
47
|
self.db.delete_many({})
|
39
48
|
except Exception as e:
|
40
49
|
logging.error("Failed to get failed jobs!")
|
41
50
|
logging.exception(e)
|
42
51
|
return ret
|
52
|
+
|
53
|
+
def remove_failed_job(self, uniq_id: str) -> bool:
|
54
|
+
try:
|
55
|
+
result = self.db.delete_one({"uniq_id": uniq_id})
|
56
|
+
if result.deleted_count > 0:
|
57
|
+
return True
|
58
|
+
except Exception as e:
|
59
|
+
logging.error("Failed to remove failed job!", exc_info=e)
|
60
|
+
|
61
|
+
return False
|
warp_beacon/telegram/handlers.py
CHANGED
@@ -14,8 +14,6 @@ from warp_beacon.jobs.upload_job import UploadJob
|
|
14
14
|
from warp_beacon.jobs import Origin
|
15
15
|
from warp_beacon.jobs.types import JobType
|
16
16
|
from warp_beacon.scraper.link_resolver import LinkResolver
|
17
|
-
from warp_beacon.scraper.fail_handler import FailHandler
|
18
|
-
from warp_beacon.storage.mongo import DBClient
|
19
17
|
|
20
18
|
class Handlers(object):
|
21
19
|
storage = None
|
@@ -25,12 +23,7 @@ class Handlers(object):
|
|
25
23
|
def __init__(self, bot: "Bot") -> None:
|
26
24
|
self.bot = bot
|
27
25
|
self.storage = bot.storage
|
28
|
-
|
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
|
-
)
|
26
|
+
self.bot.uploader.uploader_wrapper = self.upload_wrapper
|
34
27
|
|
35
28
|
async def help(self, _: Client, message: Message) -> None:
|
36
29
|
"""Send a message when the command /help is issued."""
|
@@ -147,11 +140,6 @@ class Handlers(object):
|
|
147
140
|
text="Failed to create message placeholder. Please check your bot Internet connection."
|
148
141
|
)
|
149
142
|
|
150
|
-
self.bot.uploader.add_callback(
|
151
|
-
job.placeholder_message_id,
|
152
|
-
self.upload_wrapper
|
153
|
-
)
|
154
|
-
|
155
143
|
self.bot.downloader.queue_task(job)
|
156
144
|
except Exception as e:
|
157
145
|
logging.error("Failed to schedule download task!")
|
warp_beacon/uploader/__init__.py
CHANGED
@@ -31,7 +31,6 @@ class AsyncUploader(object):
|
|
31
31
|
pool_size: int=min(32, os.cpu_count() + 4)
|
32
32
|
) -> None:
|
33
33
|
self.threads = []
|
34
|
-
self.callbacks = {}
|
35
34
|
self.in_process = set()
|
36
35
|
self.storage = storage
|
37
36
|
self.loop = loop
|
@@ -39,6 +38,7 @@ class AsyncUploader(object):
|
|
39
38
|
self.admin_message_callback = admin_message_callback
|
40
39
|
self.request_yt_auth_callback = request_yt_auth_callback
|
41
40
|
self.pool_size = pool_size
|
41
|
+
self.upload_wrapper: Callable = lambda: None
|
42
42
|
|
43
43
|
def __del__(self) -> None:
|
44
44
|
self.stop_all()
|
@@ -49,18 +49,6 @@ class AsyncUploader(object):
|
|
49
49
|
thread.start()
|
50
50
|
self.threads.append(thread)
|
51
51
|
|
52
|
-
def add_callback(self, message_id: int, callback: Callable) -> None:
|
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}
|
58
|
-
|
59
|
-
def remove_callback(self, message_id: int) -> None:
|
60
|
-
if message_id in self.callbacks:
|
61
|
-
logging.debug("Removing callback with message id #%d", message_id)
|
62
|
-
del self.callbacks[message_id]
|
63
|
-
|
64
52
|
def stop_all(self) -> None:
|
65
53
|
self.allow_loop = False
|
66
54
|
if self.threads:
|
@@ -115,7 +103,6 @@ class AsyncUploader(object):
|
|
115
103
|
|
116
104
|
in_process = job.in_process
|
117
105
|
uniq_id = job.uniq_id
|
118
|
-
message_id = job.placeholder_message_id
|
119
106
|
|
120
107
|
if not in_process and not job.job_failed and not job.job_warning and not job.replay:
|
121
108
|
if job.media_type == JobType.TEXT:
|
@@ -123,65 +110,61 @@ class AsyncUploader(object):
|
|
123
110
|
else:
|
124
111
|
logging.info("Accepted upload job, file(s): '%s'", path)
|
125
112
|
|
113
|
+
async def callback_wrap(*args, **kwargs) -> None:
|
114
|
+
await self.upload_wrapper(*args, **kwargs)
|
115
|
+
|
126
116
|
try:
|
127
|
-
if
|
128
|
-
|
129
|
-
|
130
|
-
if job.job_failed_msg: # we want to say something to user
|
131
|
-
self.loop.call_soon_threadsafe(
|
132
|
-
asyncio.create_task,
|
133
|
-
self.callbacks[message_id]["callback"](job)
|
134
|
-
)
|
135
|
-
self.process_done(uniq_id)
|
136
|
-
self.remove_callback(message_id)
|
137
|
-
continue
|
138
|
-
|
139
|
-
if job.replay:
|
117
|
+
if job.job_failed:
|
118
|
+
logging.info("URL '%s' download failed. Skipping upload job ...", job.url)
|
119
|
+
if job.job_failed_msg: # we want to say something to user
|
140
120
|
self.loop.call_soon_threadsafe(
|
141
121
|
asyncio.create_task,
|
142
|
-
|
122
|
+
callback_wrap(job)
|
143
123
|
)
|
144
|
-
|
145
|
-
|
124
|
+
self.process_done(uniq_id)
|
125
|
+
continue
|
126
|
+
|
127
|
+
if job.replay:
|
128
|
+
self.loop.call_soon_threadsafe(
|
129
|
+
asyncio.create_task,
|
130
|
+
callback_wrap(job)
|
131
|
+
)
|
132
|
+
continue
|
146
133
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
self.loop.call_soon_threadsafe(
|
151
|
-
asyncio.create_task,
|
152
|
-
self.callbacks[message_id]["callback"](job)
|
153
|
-
)
|
154
|
-
continue
|
155
|
-
if in_process:
|
156
|
-
db_list_dicts = self.storage.db_lookup_id(uniq_id)
|
157
|
-
if db_list_dicts:
|
158
|
-
tg_file_ids = [i["tg_file_id"] for i in db_list_dicts]
|
159
|
-
dlds_len = len(db_list_dicts)
|
160
|
-
if dlds_len > 1:
|
161
|
-
job.tg_file_id = ",".join(tg_file_ids)
|
162
|
-
job.media_type = JobType.COLLECTION
|
163
|
-
elif dlds_len:
|
164
|
-
job.tg_file_id = ",".join(tg_file_ids)
|
165
|
-
db_data = db_list_dicts.pop()
|
166
|
-
job.media_type = JobType[db_data["media_type"].upper()]
|
167
|
-
job.canonical_name = db_data.get("canonical_name", "")
|
168
|
-
self.loop.call_soon_threadsafe(
|
169
|
-
asyncio.create_task,
|
170
|
-
self.callbacks[message_id]["callback"](job)
|
171
|
-
)
|
172
|
-
self.process_done(uniq_id)
|
173
|
-
self.remove_callback(message_id)
|
174
|
-
else:
|
175
|
-
self.queue_task(job)
|
176
|
-
else:
|
134
|
+
if job.job_warning:
|
135
|
+
logging.info("Job warning occurred ...")
|
136
|
+
if job.job_warning_msg:
|
177
137
|
self.loop.call_soon_threadsafe(
|
178
138
|
asyncio.create_task,
|
179
|
-
|
139
|
+
callback_wrap(job)
|
140
|
+
)
|
141
|
+
continue
|
142
|
+
if in_process:
|
143
|
+
db_list_dicts = self.storage.db_lookup_id(uniq_id)
|
144
|
+
if db_list_dicts:
|
145
|
+
tg_file_ids = [i["tg_file_id"] for i in db_list_dicts]
|
146
|
+
dlds_len = len(db_list_dicts)
|
147
|
+
if dlds_len > 1:
|
148
|
+
job.tg_file_id = ",".join(tg_file_ids)
|
149
|
+
job.media_type = JobType.COLLECTION
|
150
|
+
elif dlds_len:
|
151
|
+
job.tg_file_id = ",".join(tg_file_ids)
|
152
|
+
db_data = db_list_dicts.pop()
|
153
|
+
job.media_type = JobType[db_data["media_type"].upper()]
|
154
|
+
job.canonical_name = db_data.get("canonical_name", "")
|
155
|
+
self.loop.call_soon_threadsafe(
|
156
|
+
asyncio.create_task,
|
157
|
+
callback_wrap(job)
|
180
158
|
)
|
181
159
|
self.process_done(uniq_id)
|
182
|
-
|
160
|
+
else:
|
161
|
+
self.queue_task(job)
|
183
162
|
else:
|
184
|
-
|
163
|
+
self.loop.call_soon_threadsafe(
|
164
|
+
asyncio.create_task,
|
165
|
+
callback_wrap(job)
|
166
|
+
)
|
167
|
+
self.process_done(uniq_id)
|
185
168
|
except Exception as e:
|
186
169
|
logging.exception(e)
|
187
170
|
except Empty:
|
@@ -189,4 +172,4 @@ class AsyncUploader(object):
|
|
189
172
|
except Exception as e:
|
190
173
|
logging.error("Exception occurred inside upload worker!")
|
191
174
|
logging.exception(e)
|
192
|
-
|
175
|
+
logging.info("Thread done")
|
@@ -4,7 +4,7 @@ var/warp_beacon/accounts.json,sha256=OsXdncs6h88xrF_AP6_WDCK1waGBn9SR-uYdIeK37GM
|
|
4
4
|
var/warp_beacon/placeholder.gif,sha256=cE5CGJVaop4Sx21zx6j4AyoHU0ncmvQuS2o6hJfEH88,6064
|
5
5
|
var/warp_beacon/proxies.json,sha256=VnjlQDXumOEq72ZFjbh6IqHS1TEHqn8HPYAZqWCeSIA,95
|
6
6
|
warp_beacon/__init__.py,sha256=_rThNODmz0nDp_n4mWo_HKaNFE5jk1_7cRhHyYaencI,163
|
7
|
-
warp_beacon/__version__.py,sha256=
|
7
|
+
warp_beacon/__version__.py,sha256=sZeqGczIyRlbc0NkgjPVyhnq-P8plt-ZEzfbVLMPUZY,24
|
8
8
|
warp_beacon/warp_beacon.py,sha256=ADCR30uGXIsDrt9WoiI9Ghu2QtWs0qZIK6x3pQKM_B4,1109
|
9
9
|
warp_beacon/yt_auth.py,sha256=GUTKqYr_tzDC-07Lx_ahWXSag8EyLxXBUnQbDBIkEmk,6022
|
10
10
|
warp_beacon/compress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -22,11 +22,11 @@ warp_beacon/mediainfo/video.py,sha256=UBZrhTN5IDI-aYu6tsJEILo9nFkjHhkldGVFmvV7tE
|
|
22
22
|
warp_beacon/scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
warp_beacon/scheduler/instagram_human.py,sha256=lOytnonvqtB_8z6TVzrVJ1prqqgE4fktZZl-xpn7SOA,12951
|
24
24
|
warp_beacon/scheduler/scheduler.py,sha256=0u9AIr9fTBmjU1GpOwKlPuNLskeJ4A-S2uAUzb-qO6w,4997
|
25
|
-
warp_beacon/scraper/__init__.py,sha256=
|
25
|
+
warp_beacon/scraper/__init__.py,sha256=q4Z2UQ84jjnNviALdyqFv33exnrPwwfAeZK1BH85kFk,20825
|
26
26
|
warp_beacon/scraper/abstract.py,sha256=pWbaTu-gDZgi-iFjqMR_uGzPl5KLv-4gTdJ9w6cD4sk,3802
|
27
27
|
warp_beacon/scraper/account_selector.py,sha256=n-466AiTXZ8o5cgcNkNwNiWLoi-EkLC7bHh6El1eIF8,10274
|
28
28
|
warp_beacon/scraper/exceptions.py,sha256=hicAe6_0xN7Ry2gcFX4UvqPWMtF_lX2ihH1njQAaqCA,1496
|
29
|
-
warp_beacon/scraper/fail_handler.py,sha256=
|
29
|
+
warp_beacon/scraper/fail_handler.py,sha256=hu0mGS6zeyo3VV86XORvCIWbTApcb2bE_EBoxANpFPo,1529
|
30
30
|
warp_beacon/scraper/link_resolver.py,sha256=Rc9ZuMyOo3iPywDHwjngy-WRQ2SXhJwxcg-5ripx7tM,2447
|
31
31
|
warp_beacon/scraper/utils.py,sha256=AOZmDki2Pbr84IG-j_wN2UghKCiWFVDYdx6HJl0JTBs,1258
|
32
32
|
warp_beacon/scraper/X/X.py,sha256=lKxNe70iIasLnyN8QA_1rLa70Bd3Y9fL6J4AEdUgNJs,9200
|
@@ -49,16 +49,16 @@ warp_beacon/telegram/bot.py,sha256=xeSzUxNZf8zjU5K_UkwtzBzB6nIml1UPI0g1ITQdoEQ,2
|
|
49
49
|
warp_beacon/telegram/caption_shortener.py,sha256=EnguNCF52ne7y4P-iJAbI6K3sqoJqJbND_dX5Fhwkv0,1549
|
50
50
|
warp_beacon/telegram/download_status.py,sha256=N-Qg13LVcPskyQNKG1lw50K1lhFtXu003muCRzZ7wiE,1561
|
51
51
|
warp_beacon/telegram/edit_message.py,sha256=vzSrtlt-QxBU-X9uRSKo7gJftOrvB5Qo3iNsVNptCoE,5684
|
52
|
-
warp_beacon/telegram/handlers.py,sha256=
|
52
|
+
warp_beacon/telegram/handlers.py,sha256=gNtu5LQ4vHKo9fzdQ_gh88r5885Ctjdlk0Ve6p8fPr8,10435
|
53
53
|
warp_beacon/telegram/placeholder_message.py,sha256=wN9-BRiyrtHG-EvXtZkGJHt2CX71munQ57ITttjt0mw,6400
|
54
54
|
warp_beacon/telegram/progress_bar.py,sha256=IP4xtvLtdJtqdr2C-0YaU428iQGrKurbP4Npr31iW74,5014
|
55
55
|
warp_beacon/telegram/progress_file_reader.py,sha256=e3equyNKlKs764AD-iE9QRsh3YDHTzP78Mx5tdvPPWs,969
|
56
56
|
warp_beacon/telegram/types.py,sha256=Kvdng6uCF1HRoqQgGW1ZYYPJoVuYkFb-LDvMBbW5Hjk,89
|
57
57
|
warp_beacon/telegram/utils.py,sha256=zTF8VQfAWetBSjAPbmNe_Zi_LN5fAcWptJKjLaFNHaE,5073
|
58
|
-
warp_beacon/uploader/__init__.py,sha256=
|
59
|
-
warp_beacon-2.8.
|
60
|
-
warp_beacon-2.8.
|
61
|
-
warp_beacon-2.8.
|
62
|
-
warp_beacon-2.8.
|
63
|
-
warp_beacon-2.8.
|
64
|
-
warp_beacon-2.8.
|
58
|
+
warp_beacon/uploader/__init__.py,sha256=3UklNdhRO4fYrCf5vWQVHdMNvDvxL9ZlqeQRdpr4yMU,5024
|
59
|
+
warp_beacon-2.8.15.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
60
|
+
warp_beacon-2.8.15.dist-info/METADATA,sha256=Tz32Ew3qtE8F4mtdvzYKOQU_muLz3HCGn6OiyD4UlHg,23236
|
61
|
+
warp_beacon-2.8.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
62
|
+
warp_beacon-2.8.15.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
|
63
|
+
warp_beacon-2.8.15.dist-info/top_level.txt,sha256=RraB0PWGvRK2zPYkuICKNgStLG1C5s7rPHHJEHJbkgA,1510
|
64
|
+
warp_beacon-2.8.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|