warp-beacon 2.8.19__tar.gz → 2.8.21__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 (74) hide show
  1. {warp_beacon-2.8.19/warp_beacon.egg-info → warp_beacon-2.8.21}/PKG-INFO +1 -1
  2. warp_beacon-2.8.21/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/X/abstract.py +9 -7
  4. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/instagram/instagram.py +39 -30
  5. {warp_beacon-2.8.19 → warp_beacon-2.8.21/warp_beacon.egg-info}/PKG-INFO +1 -1
  6. warp_beacon-2.8.19/warp_beacon/__version__.py +0 -2
  7. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/LICENSE +0 -0
  8. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/MANIFEST.in +0 -0
  9. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/README.md +0 -0
  10. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/assets/cc-group-black.png +0 -0
  11. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/assets/placeholder.gif +0 -0
  12. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/etc/.gitignore +0 -0
  13. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/etc/accounts.json +0 -0
  14. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/etc/proxies.json +0 -0
  15. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/etc/warp_beacon.conf +0 -0
  16. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/etc/warp_beacon.service +0 -0
  17. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/pyproject.toml +0 -0
  18. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/setup.cfg +0 -0
  19. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/setup.py +0 -0
  20. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/__init__.py +0 -0
  21. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/compress/__init__.py +0 -0
  22. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/compress/video.py +0 -0
  23. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/jobs/__init__.py +0 -0
  24. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/jobs/abstract.py +0 -0
  25. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/jobs/download_job.py +0 -0
  26. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/jobs/types.py +0 -0
  27. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/jobs/upload_job.py +0 -0
  28. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/mediainfo/__init__.py +0 -0
  29. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/mediainfo/abstract.py +0 -0
  30. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/mediainfo/audio.py +0 -0
  31. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/mediainfo/silencer.py +0 -0
  32. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/mediainfo/video.py +0 -0
  33. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scheduler/__init__.py +0 -0
  34. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scheduler/instagram_human.py +0 -0
  35. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scheduler/scheduler.py +0 -0
  36. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/X/X.py +0 -0
  37. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/X/__init__.py +0 -0
  38. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/X/types.py +0 -0
  39. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/__init__.py +0 -0
  40. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/abstract.py +0 -0
  41. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/account_selector.py +0 -0
  42. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/exceptions.py +0 -0
  43. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/fail_handler.py +0 -0
  44. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/instagram/__init__.py +0 -0
  45. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/instagram/captcha.py +0 -0
  46. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/instagram/wb_instagrapi.py +0 -0
  47. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/link_resolver.py +0 -0
  48. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/utils.py +0 -0
  49. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/youtube/__init__.py +0 -0
  50. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/youtube/abstract.py +0 -0
  51. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/youtube/music.py +0 -0
  52. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/youtube/shorts.py +0 -0
  53. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/scraper/youtube/youtube.py +0 -0
  54. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/storage/__init__.py +0 -0
  55. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/storage/mongo.py +0 -0
  56. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/__init__.py +0 -0
  57. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/bot.py +0 -0
  58. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/caption_shortener.py +0 -0
  59. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/download_status.py +0 -0
  60. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/edit_message.py +0 -0
  61. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/handlers.py +0 -0
  62. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/placeholder_message.py +0 -0
  63. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/progress_bar.py +0 -0
  64. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/progress_file_reader.py +0 -0
  65. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/types.py +0 -0
  66. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/telegram/utils.py +0 -0
  67. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/uploader/__init__.py +0 -0
  68. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/warp_beacon.py +0 -0
  69. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon/yt_auth.py +0 -0
  70. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon.egg-info/SOURCES.txt +0 -0
  71. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon.egg-info/dependency_links.txt +0 -0
  72. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon.egg-info/entry_points.txt +0 -0
  73. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/warp_beacon.egg-info/requires.txt +0 -0
  74. {warp_beacon-2.8.19 → warp_beacon-2.8.21}/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.8.19
3
+ Version: 2.8.21
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.8.21"
2
+
@@ -51,18 +51,16 @@ class XAbstract(ScraperAbstract):
51
51
  except urllib3.exceptions.ProxyError as e:
52
52
  logging.warning("Proxy error!")
53
53
  raise BadProxy(extract_exception_message(e.original_error))
54
+ except playwright.sync_api.TimeoutError as e:
55
+ logging.warning("Plawright timeout error", exc_info=e)
56
+ raise BadProxy("Content unvailable")
54
57
  except (socket.timeout,
55
58
  ssl.SSLError,
56
59
  http.client.IncompleteRead,
57
60
  http.client.HTTPException,
58
61
  requests.RequestException,
59
62
  urllib.error.URLError,
60
- urllib.error.HTTPError,
61
- playwright.sync_api.TimeoutError) as e:
62
- if hasattr(e, "code") and (int(e.code) == 403 or int(e.code) == 400):
63
- raise Unavailable(extract_exception_message(e))
64
- if hasattr(e, "reason") and "Remote end closed connection without response" in str(e.reason):
65
- raise Unavailable(extract_exception_message(e))
63
+ urllib.error.HTTPError) as e:
66
64
  logging.warning("X read timeout! Retrying in '%d' seconds ...", pause_secs)
67
65
  logging.info("Your `X_MAX_RETRIES` values is '%d'", max_retries)
68
66
  logging.exception(extract_exception_message(e))
@@ -135,5 +133,9 @@ class XAbstract(ScraperAbstract):
135
133
 
136
134
  def download(self, job: DownloadJob) -> list:
137
135
  self.job = job
138
- ret = self.download_hndlr(self._download, job.url)
136
+ ret = []
137
+ try:
138
+ ret = self.download_hndlr(self._download, job.url)
139
+ except playwright.errors.TimeoutError as e:
140
+ pass
139
141
  return ret
@@ -414,39 +414,48 @@ class InstagramScraper(ScraperAbstract):
414
414
 
415
415
  def email_challenge_resolver(self, username: str) -> Optional[str]:
416
416
  logging.info("Started email challenge resolver")
417
- mail = imaplib.IMAP4_SSL(self.account.get("imap_server", "imap.bagrintsev.me"))
418
- mail.login(self.account.get("imap_login", ""), self.account.get("imap_password", "")) # email server creds
419
- mail.select("inbox")
420
- _, data = mail.search(None, "(UNSEEN)")
421
- ids = data.pop().split()
422
- for num in reversed(ids):
423
- mail.store(num, "+FLAGS", "\\Seen") # mark as read
424
- _, data = mail.fetch(num, "(RFC822)")
425
- msg = email.message_from_string(data[0][1].decode())
426
- payloads = msg.get_payload()
427
- if not isinstance(payloads, list):
428
- payloads = [msg]
429
- code = None
430
- for payload in payloads:
431
- body = ''
417
+ try:
418
+ mail = imaplib.IMAP4_SSL(self.account.get("imap_server", "imap.bagrintsev.me"))
419
+ mail.login(self.account.get("imap_login", ""), self.account.get("imap_password", "")) # email server creds
420
+ mail.select("inbox")
421
+ _, data = mail.search(None, "(UNSEEN)")
422
+ ids = data.pop().split()
423
+ for num in reversed(ids):
424
+ mail.store(num, "+FLAGS", "\\Seen") # mark as read
425
+ _, data = mail.fetch(num, "(RFC822)")
426
+ msg, payloads = "", None
432
427
  try:
433
- body = payload.get_payload(decode=True).decode()
428
+ msg = email.message_from_string(data[0][1].decode())
429
+ payloads = msg.get_payload()
434
430
  except:
431
+ logging.error("Failed to parse imap message!")
435
432
  continue
436
- if "<div" not in body:
437
- continue
438
- match = re.search(">([^>]*?({u})[^<]*?)<".format(u=username), body)
439
- if not match:
440
- continue
441
- logging.info("Match from email: '%s'", match.group(1))
442
- match = re.search(r">(\d{6})<", body)
443
- if not match:
444
- logging.info('Skip this email, "code" not found')
445
- continue
446
- code = match.group(1)
447
- if code:
448
- logging.info("Found IG code at mail server: '%s'", code)
449
- return code
433
+ if not isinstance(payloads, list):
434
+ payloads = [msg]
435
+ code = None
436
+ for payload in payloads:
437
+ body = ''
438
+ try:
439
+ body = payload.get_payload(decode=True).decode()
440
+ except:
441
+ continue
442
+ if "<div" not in body:
443
+ continue
444
+ match = re.search(">([^>]*?({u})[^<]*?)<".format(u=username), body)
445
+ if not match:
446
+ continue
447
+ logging.info("Match from email: '%s'", match.group(1))
448
+ match = re.search(r">(\d{6})<", body)
449
+ if not match:
450
+ logging.info('Skip this email, "code" not found')
451
+ continue
452
+ code = match.group(1)
453
+ if code:
454
+ logging.info("Found IG code at mail server: '%s'", code)
455
+ return code
456
+ except Exception as e:
457
+ logging.error("Failed to scan IMAP folder")
458
+ logging.exception(e)
450
459
  return None
451
460
 
452
461
  def get_code_from_sms(self, username: str) -> Optional[str]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.8.19
3
+ Version: 2.8.21
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.8.19"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes