warp-beacon 2.8.17__tar.gz → 2.8.19__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.8.17/warp_beacon.egg-info → warp_beacon-2.8.19}/PKG-INFO +1 -1
- warp_beacon-2.8.19/warp_beacon/__version__.py +2 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/X/X.py +3 -3
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/bot.py +20 -20
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/handlers.py +1 -1
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/uploader/__init__.py +9 -10
- {warp_beacon-2.8.17 → warp_beacon-2.8.19/warp_beacon.egg-info}/PKG-INFO +1 -1
- warp_beacon-2.8.17/warp_beacon/__version__.py +0 -2
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/LICENSE +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/MANIFEST.in +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/README.md +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/assets/cc-group-black.png +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/assets/placeholder.gif +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/etc/.gitignore +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/etc/accounts.json +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/etc/proxies.json +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/etc/warp_beacon.conf +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/etc/warp_beacon.service +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/pyproject.toml +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/setup.cfg +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/setup.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/compress/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/compress/video.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/jobs/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/jobs/abstract.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/jobs/download_job.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/jobs/types.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/jobs/upload_job.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/mediainfo/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/mediainfo/abstract.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/mediainfo/audio.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/mediainfo/silencer.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/mediainfo/video.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scheduler/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scheduler/instagram_human.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scheduler/scheduler.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/X/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/X/abstract.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/X/types.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/abstract.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/account_selector.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/exceptions.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/fail_handler.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/instagram/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/instagram/captcha.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/instagram/instagram.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/instagram/wb_instagrapi.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/link_resolver.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/utils.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/youtube/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/youtube/abstract.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/youtube/music.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/youtube/shorts.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/scraper/youtube/youtube.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/storage/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/storage/mongo.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/__init__.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/caption_shortener.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/download_status.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/edit_message.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/placeholder_message.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/progress_bar.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/progress_file_reader.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/types.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/telegram/utils.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/warp_beacon.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon/yt_auth.py +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon.egg-info/SOURCES.txt +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon.egg-info/dependency_links.txt +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon.egg-info/entry_points.txt +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon.egg-info/requires.txt +0 -0
- {warp_beacon-2.8.17 → warp_beacon-2.8.19}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -20,10 +20,10 @@ class XScraper(XAbstract):
|
|
20
20
|
def extract_canonical_name(self, media: dict) -> str:
|
21
21
|
ret = ""
|
22
22
|
try:
|
23
|
-
if media.get("
|
23
|
+
if media.get("description"):
|
24
|
+
ret = media["description"]
|
25
|
+
elif media.get("title"):
|
24
26
|
ret = media["title"]
|
25
|
-
if media.get("description", ""):
|
26
|
-
ret += "\n" + media["description"]
|
27
27
|
except Exception as e:
|
28
28
|
logging.warning("Failed to extract canonical media name!")
|
29
29
|
logging.exception(e)
|
@@ -222,11 +222,11 @@ class Bot(object):
|
|
222
222
|
if job.source_username.startswith("<a href="):
|
223
223
|
caption += f"Requested by <b>{job.source_username}</b>"
|
224
224
|
else:
|
225
|
-
caption += f"Requested by <b>@{job.source_username}</b>"
|
225
|
+
caption += f"Requested by <b>@{html.escape(job.source_username)}</b>"
|
226
226
|
if job.source_username and job.url:
|
227
227
|
caption += " | "
|
228
228
|
if job.url:
|
229
|
-
caption += f'<a href="{job.url}">source link</a>'
|
229
|
+
caption += f'<a href="{html.escape(job.url)}">source link</a>'
|
230
230
|
|
231
231
|
return caption
|
232
232
|
|
@@ -238,11 +238,11 @@ class Bot(object):
|
|
238
238
|
args["media"] = InputMediaVideo(
|
239
239
|
media=job.tg_file_id.replace(":video", ''),
|
240
240
|
supports_streaming=True,
|
241
|
-
caption=self.build_signature_caption(job)
|
241
|
+
caption=self.build_signature_caption(job, job.message_text)
|
242
242
|
)
|
243
243
|
else:
|
244
244
|
args["video"] = job.tg_file_id.replace(":video", '')
|
245
|
-
args["caption"] = self.build_signature_caption(job)
|
245
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
246
246
|
else:
|
247
247
|
if job.placeholder_message_id:
|
248
248
|
args["media"] = InputMediaVideo(
|
@@ -252,7 +252,7 @@ class Bot(object):
|
|
252
252
|
height=job.media_info["height"],
|
253
253
|
duration=round(job.media_info["duration"]),
|
254
254
|
thumb=job.media_info["thumb"],
|
255
|
-
caption=self.build_signature_caption(job)
|
255
|
+
caption=self.build_signature_caption(job, job.message_text)
|
256
256
|
)
|
257
257
|
else:
|
258
258
|
args["video"] = job.local_media_path
|
@@ -261,7 +261,7 @@ class Bot(object):
|
|
261
261
|
args["height"] = job.media_info["height"]
|
262
262
|
args["duration"] = round(job.media_info["duration"])
|
263
263
|
args["thumb"] = job.media_info["thumb"]
|
264
|
-
args["caption"] = self.build_signature_caption(job)
|
264
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
265
265
|
|
266
266
|
args["file_name"] = os.path.basename(job.local_media_path)
|
267
267
|
elif job.media_type == JobType.IMAGE:
|
@@ -269,20 +269,20 @@ class Bot(object):
|
|
269
269
|
if job.placeholder_message_id:
|
270
270
|
args["media"] = InputMediaPhoto(
|
271
271
|
media=job.tg_file_id.replace(":image", ''),
|
272
|
-
caption=self.build_signature_caption(job)
|
272
|
+
caption=self.build_signature_caption(job, job.message_text)
|
273
273
|
)
|
274
274
|
else:
|
275
275
|
args["photo"] = job.tg_file_id.replace(":image", '')
|
276
|
-
args["caption"] = self.build_signature_caption(job)
|
276
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
277
277
|
else:
|
278
278
|
if job.placeholder_message_id:
|
279
279
|
args["media"] = InputMediaPhoto(
|
280
280
|
media=job.local_media_path,
|
281
|
-
caption=self.build_signature_caption(job)
|
281
|
+
caption=self.build_signature_caption(job, job.message_text)
|
282
282
|
)
|
283
283
|
else:
|
284
284
|
args["photo"] = job.local_media_path
|
285
|
-
args["caption"] = self.build_signature_caption(job)
|
285
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
286
286
|
|
287
287
|
args["file_name"] = os.path.basename(job.local_media_path)
|
288
288
|
elif job.media_type == JobType.AUDIO:
|
@@ -290,7 +290,7 @@ class Bot(object):
|
|
290
290
|
if job.placeholder_message_id:
|
291
291
|
args["media"] = InputMediaAudio(
|
292
292
|
media=job.tg_file_id.replace(":audio", ''),
|
293
|
-
caption=self.build_signature_caption(job)
|
293
|
+
caption=self.build_signature_caption(job, job.message_text)
|
294
294
|
)
|
295
295
|
else:
|
296
296
|
args["audio"] = job.tg_file_id.replace(":audio", '')
|
@@ -302,7 +302,7 @@ class Bot(object):
|
|
302
302
|
thumb=job.media_info["thumb"],
|
303
303
|
duration=round(job.media_info["duration"]),
|
304
304
|
title=job.canonical_name,
|
305
|
-
caption=self.build_signature_caption(job)
|
305
|
+
caption=self.build_signature_caption(job, job.message_text)
|
306
306
|
)
|
307
307
|
else:
|
308
308
|
args["audio"] = job.local_media_path
|
@@ -310,7 +310,7 @@ class Bot(object):
|
|
310
310
|
args["thumb"] = job.media_info["thumb"]
|
311
311
|
args["duration"] = round(job.media_info["duration"])
|
312
312
|
args["title"] = job.canonical_name
|
313
|
-
args["caption"] = self.build_signature_caption(job)
|
313
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
314
314
|
|
315
315
|
args["file_name"] = os.path.basename(job.local_media_path)
|
316
316
|
elif job.media_type == JobType.ANIMATION:
|
@@ -318,11 +318,11 @@ class Bot(object):
|
|
318
318
|
if job.placeholder_message_id:
|
319
319
|
args["media"] = InputMediaAnimation(
|
320
320
|
media=job.tg_file_id.replace(":animation", ''),
|
321
|
-
caption=self.build_signature_caption(job)
|
321
|
+
caption=self.build_signature_caption(job, job.message_text)
|
322
322
|
)
|
323
323
|
else:
|
324
324
|
args["animation"] = job.tg_file_id.replace(":animation", '')
|
325
|
-
args["caption"] = self.build_signature_caption(job)
|
325
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
326
326
|
else:
|
327
327
|
if job.placeholder_message_id:
|
328
328
|
args["media"] = InputMediaAnimation(
|
@@ -331,7 +331,7 @@ class Bot(object):
|
|
331
331
|
duration=round(job.media_info["duration"]),
|
332
332
|
width=job.media_info["width"],
|
333
333
|
height=job.media_info["height"],
|
334
|
-
caption=self.build_signature_caption(job)
|
334
|
+
caption=self.build_signature_caption(job, job.message_text)
|
335
335
|
)
|
336
336
|
else:
|
337
337
|
args["animation"] = job.local_media_path
|
@@ -339,7 +339,7 @@ class Bot(object):
|
|
339
339
|
args["height"] = job.media_info["height"]
|
340
340
|
args["duration"] = round(job.media_info["duration"])
|
341
341
|
args["thumb"] = job.media_info["thumb"]
|
342
|
-
args["caption"] = self.build_signature_caption(job)
|
342
|
+
args["caption"] = self.build_signature_caption(job, job.message_text)
|
343
343
|
|
344
344
|
args["file_name"] = os.path.basename(job.local_media_path)
|
345
345
|
elif job.media_type == JobType.COLLECTION:
|
@@ -352,11 +352,11 @@ class Bot(object):
|
|
352
352
|
ctype = JobType[mtype.upper()]
|
353
353
|
ptr = None
|
354
354
|
if ctype == JobType.VIDEO:
|
355
|
-
ptr = InputMediaVideo(media=tg_id, caption=self.build_signature_caption(job))
|
355
|
+
ptr = InputMediaVideo(media=tg_id, caption=self.build_signature_caption(job, job.message_text))
|
356
356
|
elif ctype == JobType.IMAGE:
|
357
|
-
ptr = InputMediaPhoto(media=tg_id, caption=self.build_signature_caption(job))
|
357
|
+
ptr = InputMediaPhoto(media=tg_id, caption=self.build_signature_caption(job, job.message_text))
|
358
358
|
elif ctype == JobType.ANIMATION:
|
359
|
-
ptr = InputMediaAnimation(media=tg_id, caption=self.build_signature_caption(job))
|
359
|
+
ptr = InputMediaAnimation(media=tg_id, caption=self.build_signature_caption(job, job.message_text))
|
360
360
|
tg_chunk.append(ptr)
|
361
361
|
|
362
362
|
args["media"].append(tg_chunk)
|
@@ -177,7 +177,7 @@ class Handlers(object):
|
|
177
177
|
url = new_url
|
178
178
|
origin = Origin.YOUTUBE
|
179
179
|
if origin is Origin.UNKNOWN:
|
180
|
-
logging.info("Only Instagram, YouTube Shorts
|
180
|
+
logging.info("Only Instagram, YouTube Shorts, YouTube Music and X are now supported. Skipping.")
|
181
181
|
continue
|
182
182
|
entities, tg_file_ids = [], []
|
183
183
|
uniq_id = Storage.compute_uniq(url)
|
@@ -12,7 +12,6 @@ from warp_beacon.storage import Storage
|
|
12
12
|
|
13
13
|
class AsyncUploader(object):
|
14
14
|
__JOE_BIDEN_WAKEUP = None
|
15
|
-
pool_size = 1
|
16
15
|
|
17
16
|
def __init__(self,
|
18
17
|
loop: asyncio.AbstractEventLoop,
|
@@ -65,6 +64,9 @@ class AsyncUploader(object):
|
|
65
64
|
def queue_task(self, job: UploadJob) -> None:
|
66
65
|
self.job_queue.put_nowait(job)
|
67
66
|
|
67
|
+
async def callback_wrap(self, *args, **kwargs) -> None:
|
68
|
+
await self.upload_wrapper(*args, **kwargs)
|
69
|
+
|
68
70
|
def do_work(self) -> None:
|
69
71
|
logging.info("Upload worker started")
|
70
72
|
while self.allow_loop:
|
@@ -103,16 +105,13 @@ class AsyncUploader(object):
|
|
103
105
|
else:
|
104
106
|
logging.info("Accepted upload job, file(s): '%s'", path)
|
105
107
|
|
106
|
-
async def callback_wrap(*args, **kwargs) -> None:
|
107
|
-
await self.upload_wrapper(*args, **kwargs)
|
108
|
-
|
109
108
|
try:
|
110
109
|
if job.job_failed:
|
111
110
|
logging.info("URL '%s' download failed. Skipping upload job ...", job.url)
|
112
111
|
if job.job_failed_msg: # we want to say something to user
|
113
112
|
self.loop.call_soon_threadsafe(
|
114
113
|
asyncio.create_task,
|
115
|
-
callback_wrap(job)
|
114
|
+
self.callback_wrap(job)
|
116
115
|
)
|
117
116
|
self.process_done(uniq_id)
|
118
117
|
continue
|
@@ -120,7 +119,7 @@ class AsyncUploader(object):
|
|
120
119
|
if job.replay:
|
121
120
|
self.loop.call_soon_threadsafe(
|
122
121
|
asyncio.create_task,
|
123
|
-
callback_wrap(job)
|
122
|
+
self.callback_wrap(job)
|
124
123
|
)
|
125
124
|
continue
|
126
125
|
|
@@ -129,7 +128,7 @@ class AsyncUploader(object):
|
|
129
128
|
if job.job_warning_msg:
|
130
129
|
self.loop.call_soon_threadsafe(
|
131
130
|
asyncio.create_task,
|
132
|
-
callback_wrap(job)
|
131
|
+
self.callback_wrap(job)
|
133
132
|
)
|
134
133
|
continue
|
135
134
|
if in_process:
|
@@ -147,7 +146,7 @@ class AsyncUploader(object):
|
|
147
146
|
job.canonical_name = db_data.get("canonical_name", "")
|
148
147
|
self.loop.call_soon_threadsafe(
|
149
148
|
asyncio.create_task,
|
150
|
-
callback_wrap(job)
|
149
|
+
self.callback_wrap(job)
|
151
150
|
)
|
152
151
|
self.process_done(uniq_id)
|
153
152
|
else:
|
@@ -155,7 +154,7 @@ class AsyncUploader(object):
|
|
155
154
|
else:
|
156
155
|
self.loop.call_soon_threadsafe(
|
157
156
|
asyncio.create_task,
|
158
|
-
callback_wrap(job)
|
157
|
+
self.callback_wrap(job)
|
159
158
|
)
|
160
159
|
self.process_done(uniq_id)
|
161
160
|
except Exception as e:
|
@@ -165,4 +164,4 @@ class AsyncUploader(object):
|
|
165
164
|
except Exception as e:
|
166
165
|
logging.error("Exception occurred inside upload worker!")
|
167
166
|
logging.exception(e)
|
168
|
-
|
167
|
+
logging.info("Thread done")
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|