warp-beacon 2.6.45__tar.gz → 2.6.47__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.
Files changed (64) hide show
  1. {warp_beacon-2.6.45/warp_beacon.egg-info → warp_beacon-2.6.47}/PKG-INFO +1 -1
  2. warp_beacon-2.6.47/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/bot.py +18 -34
  4. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/progress_file_reader.py +10 -6
  5. {warp_beacon-2.6.45 → warp_beacon-2.6.47/warp_beacon.egg-info}/PKG-INFO +1 -1
  6. warp_beacon-2.6.45/warp_beacon/__version__.py +0 -2
  7. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/LICENSE +0 -0
  8. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/MANIFEST.in +0 -0
  9. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/README.md +0 -0
  10. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/assets/placeholder.gif +0 -0
  11. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/etc/.gitignore +0 -0
  12. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/etc/accounts.json +0 -0
  13. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/etc/proxies.json +0 -0
  14. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/etc/warp_beacon.conf +0 -0
  15. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/etc/warp_beacon.service +0 -0
  16. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/pyproject.toml +0 -0
  17. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/setup.cfg +0 -0
  18. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/setup.py +0 -0
  19. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/__init__.py +0 -0
  20. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/compress/__init__.py +0 -0
  21. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/compress/video.py +0 -0
  22. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/jobs/__init__.py +0 -0
  23. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/jobs/abstract.py +0 -0
  24. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/jobs/download_job.py +0 -0
  25. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/jobs/types.py +0 -0
  26. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/jobs/upload_job.py +0 -0
  27. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/mediainfo/__init__.py +0 -0
  28. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/mediainfo/abstract.py +0 -0
  29. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/mediainfo/audio.py +0 -0
  30. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/mediainfo/silencer.py +0 -0
  31. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/mediainfo/video.py +0 -0
  32. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scheduler/__init__.py +0 -0
  33. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scheduler/instagram_human.py +0 -0
  34. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scheduler/scheduler.py +0 -0
  35. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/__init__.py +0 -0
  36. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/abstract.py +0 -0
  37. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/account_selector.py +0 -0
  38. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/exceptions.py +0 -0
  39. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/fail_handler.py +0 -0
  40. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/instagram/__init__.py +0 -0
  41. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/instagram/captcha.py +0 -0
  42. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/instagram/instagram.py +0 -0
  43. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/link_resolver.py +0 -0
  44. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/utils.py +0 -0
  45. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/youtube/__init__.py +0 -0
  46. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/youtube/abstract.py +0 -0
  47. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/youtube/music.py +0 -0
  48. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/youtube/shorts.py +0 -0
  49. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/scraper/youtube/youtube.py +0 -0
  50. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/storage/__init__.py +0 -0
  51. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/storage/mongo.py +0 -0
  52. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/__init__.py +0 -0
  53. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/caption_shortener.py +0 -0
  54. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/handlers.py +0 -0
  55. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/placeholder_message.py +0 -0
  56. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/telegram/utils.py +0 -0
  57. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/uploader/__init__.py +0 -0
  58. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/warp_beacon.py +0 -0
  59. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon/yt_auth.py +0 -0
  60. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon.egg-info/SOURCES.txt +0 -0
  61. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon.egg-info/dependency_links.txt +0 -0
  62. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon.egg-info/entry_points.txt +0 -0
  63. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon.egg-info/requires.txt +0 -0
  64. {warp_beacon-2.6.45 → warp_beacon-2.6.47}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.6.45
3
+ Version: 2.6.47
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -0,0 +1,2 @@
1
+ __version__ = "2.6.47"
2
+
@@ -227,7 +227,7 @@ class Bot(object):
227
227
 
228
228
  return caption
229
229
 
230
- def build_tg_args(self, job: UploadJob, file_io: ProgressFileReader = None) -> dict:
230
+ def build_tg_args(self, job: UploadJob) -> dict:
231
231
  args = {}
232
232
  if job.media_type == JobType.VIDEO:
233
233
  if job.tg_file_id:
@@ -243,7 +243,7 @@ class Bot(object):
243
243
  else:
244
244
  if job.placeholder_message_id:
245
245
  args["media"] = InputMediaVideo(
246
- media=file_io,
246
+ media=job.local_media_path,
247
247
  supports_streaming=True,
248
248
  width=job.media_info["width"],
249
249
  height=job.media_info["height"],
@@ -252,7 +252,7 @@ class Bot(object):
252
252
  caption=self.build_signature_caption(job)
253
253
  )
254
254
  else:
255
- args["video"] = file_io
255
+ args["video"] = job.local_media_path
256
256
  args["supports_streaming"] = True
257
257
  args["width"] = job.media_info["width"]
258
258
  args["height"] = job.media_info["height"]
@@ -274,11 +274,11 @@ class Bot(object):
274
274
  else:
275
275
  if job.placeholder_message_id:
276
276
  args["media"] = InputMediaPhoto(
277
- media=file_io,
277
+ media=job.local_media_path,
278
278
  caption=self.build_signature_caption(job)
279
279
  )
280
280
  else:
281
- args["photo"] = file_io
281
+ args["photo"] = job.local_media_path
282
282
  args["caption"] = self.build_signature_caption(job)
283
283
 
284
284
  args["file_name"] = os.path.basename(job.local_media_path)
@@ -294,7 +294,7 @@ class Bot(object):
294
294
  else:
295
295
  if job.placeholder_message_id:
296
296
  args["media"] = InputMediaAudio(
297
- media=file_io,
297
+ media=job.local_media_path,
298
298
  performer=job.media_info["performer"],
299
299
  thumb=job.media_info["thumb"],
300
300
  duration=round(job.media_info["duration"]),
@@ -302,7 +302,7 @@ class Bot(object):
302
302
  caption=self.build_signature_caption(job)
303
303
  )
304
304
  else:
305
- args["audio"] = file_io
305
+ args["audio"] = job.local_media_path
306
306
  args["performer"] = job.media_info["performer"]
307
307
  args["thumb"] = job.media_info["thumb"]
308
308
  args["duration"] = round(job.media_info["duration"])
@@ -323,7 +323,7 @@ class Bot(object):
323
323
  else:
324
324
  if job.placeholder_message_id:
325
325
  args["media"] = InputMediaAnimation(
326
- media=file_io,
326
+ media=job.local_media_path,
327
327
  thumb=job.media_info["thumb"],
328
328
  duration=round(job.media_info["duration"]),
329
329
  width=job.media_info["width"],
@@ -331,7 +331,7 @@ class Bot(object):
331
331
  caption=self.build_signature_caption(job)
332
332
  )
333
333
  else:
334
- args["animation"] = file_io
334
+ args["animation"] = job.local_media_path
335
335
  args["width"] = job.media_info["width"]
336
336
  args["height"] = job.media_info["height"]
337
337
  args["duration"] = round(job.media_info["duration"])
@@ -364,7 +364,7 @@ class Bot(object):
364
364
  for j in chunk:
365
365
  if j.media_type == JobType.VIDEO:
366
366
  vid = InputMediaVideo(
367
- media=ProgressFileReader(j.local_media_path, self.progress_callback),
367
+ media=j.local_media_path,
368
368
  supports_streaming=True,
369
369
  width=j.media_info["width"],
370
370
  height=j.media_info["height"],
@@ -375,7 +375,7 @@ class Bot(object):
375
375
  tg_chunk.append(vid)
376
376
  elif j.media_type == JobType.IMAGE:
377
377
  photo = InputMediaPhoto(
378
- media=ProgressFileReader(j.local_media_path, self.progress_callback),
378
+ media=j.local_media_path,
379
379
  caption=self.build_signature_caption(job)
380
380
  )
381
381
  tg_chunk.append(photo)
@@ -405,9 +405,6 @@ class Bot(object):
405
405
 
406
406
  return args
407
407
 
408
- def progress_callback(self, filename: str, current: int, total: int) -> None:
409
- logging.info("[%s] Uploaded %.1f%%", filename, current * 100 / total)
410
-
411
408
  async def upload_job(self, job: UploadJob) -> list[str]:
412
409
  tg_file_ids = []
413
410
  try:
@@ -421,8 +418,7 @@ class Bot(object):
421
418
  await Utils.ensure_me_loaded(self.client)
422
419
  if job.placeholder_message_id:
423
420
  try:
424
- with ProgressFileReader(job.local_media_path, self.progress_callback) as f:
425
- reply_message = await self.client.edit_message_media(**self.build_tg_args(job, f))
421
+ reply_message = await self.client.edit_message_media(**self.build_tg_args(job))
426
422
  except MessageIdInvalid:
427
423
  logging.warning("Placeholder message not found. Looks like placeholder message was deleted by administrator.")
428
424
  job.placeholder_message_id = None
@@ -435,41 +431,29 @@ class Bot(object):
435
431
  JobType.ANIMATION: self.client.send_animation
436
432
  }
437
433
  try:
438
- with ProgressFileReader(job.local_media_path, self.progress_callback) as f:
439
- reply_message = await send_funcs[job.media_type](**self.build_tg_args(job, f))
434
+ reply_message = await send_funcs[job.media_type](**self.build_tg_args(job))
440
435
  except ValueError as e:
441
436
  err_text = str(e)
442
437
  if "Expected" in err_text:
443
438
  logging.warning("Expectations exceeded reality.")
444
439
  logging.warning(err_text)
445
440
  expectation, reality = Utils.parse_expected_patronum_error(err_text)
446
- with ProgressFileReader(job.local_media_path, self.progress_callback) as f:
447
- job_args = self.build_tg_args(job, f)
448
- job_args[reality.value.lower()] = job_args.pop(expectation.value.lower())
449
- reply_message = await send_funcs[reality](**job_args)
441
+ job_args = self.build_tg_args(job)
442
+ job_args[reality.value.lower()] = job_args.pop(expectation.value.lower())
443
+ reply_message = await send_funcs[reality](**job_args)
450
444
 
451
445
  tg_file_id = Utils.extract_file_id(reply_message)
452
446
  tg_file_ids.append(tg_file_id)
453
447
  job.tg_file_id = tg_file_id
454
448
  logging.info("Uploaded media file with type '%s' tg_file_id is '%s'", job.media_type.value, job.tg_file_id)
455
449
  elif job.media_type == JobType.COLLECTION:
456
- #uploaded_files = await self.upload_with_progress(job)
457
450
  col_job_args = self.build_tg_args(job)
458
451
  sent_messages = []
459
452
  snd_grp_options = {"chat_id": job.chat_id, "reply_to_message_id": job.message_id}
460
453
  for i, media_chunk in enumerate(col_job_args["media"]):
461
454
  snd_grp_options["media"] = media_chunk
462
- messages = None
463
- try:
464
- messages = await self.client.send_media_group(**snd_grp_options)
465
- finally:
466
- try:
467
- for med in snd_grp_options["media"]:
468
- med.media.close()
469
- except AttributeError:
470
- pass
471
- if messages:
472
- sent_messages += messages
455
+ messages = await self.client.send_media_group(**snd_grp_options)
456
+ sent_messages += messages
473
457
  if job.media_collection:
474
458
  for j, _ in enumerate(media_chunk):
475
459
  tg_file_id = Utils.extract_file_id(messages[j])
@@ -9,15 +9,15 @@ class ProgressFileReader(io.BufferedReader):
9
9
  super().__init__(raw)
10
10
  self._raw = raw
11
11
  self.callback = callback
12
- self.total = os.path.getsize(file_path)
13
- self.read_bytes = 0
14
- self.name = os.path.basename(file_path)
12
+ self._total = os.path.getsize(file_path)
13
+ self._read_bytes = 0
14
+ self._name = os.path.basename(file_path)
15
15
 
16
16
  def read(self, size: int = -1) -> bytes:
17
17
  chunk = super().read(size)
18
- self.read_bytes += len(chunk)
18
+ self._read_bytes += len(chunk)
19
19
  if self.callback:
20
- self.callback(self.name, self.read_bytes, self.total)
20
+ self.callback(self.name, self._read_bytes, self._total)
21
21
  return chunk
22
22
 
23
23
  def close(self) -> None:
@@ -33,4 +33,8 @@ class ProgressFileReader(io.BufferedReader):
33
33
  exc_val: Optional[BaseException],
34
34
  exc_tb: Optional[TracebackType]
35
35
  ) -> None:
36
- self.close()
36
+ self.close()
37
+
38
+ @property
39
+ def name(self) -> str:
40
+ return self._name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.6.45
3
+ Version: 2.6.47
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -1,2 +0,0 @@
1
- __version__ = "2.6.45"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes