warp-beacon 2.6.84__tar.gz → 2.6.86__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 (69) hide show
  1. {warp_beacon-2.6.84/warp_beacon.egg-info → warp_beacon-2.6.86}/PKG-INFO +1 -1
  2. warp_beacon-2.6.86/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scheduler/instagram_human.py +3 -3
  4. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scheduler/scheduler.py +4 -3
  5. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/__init__.py +2 -12
  6. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/abstract.py +11 -6
  7. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/instagram/instagram.py +2 -2
  8. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/youtube/abstract.py +4 -0
  9. {warp_beacon-2.6.84 → warp_beacon-2.6.86/warp_beacon.egg-info}/PKG-INFO +1 -1
  10. warp_beacon-2.6.84/warp_beacon/__version__.py +0 -2
  11. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/LICENSE +0 -0
  12. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/MANIFEST.in +0 -0
  13. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/README.md +0 -0
  14. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/assets/placeholder.gif +0 -0
  15. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/etc/.gitignore +0 -0
  16. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/etc/accounts.json +0 -0
  17. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/etc/proxies.json +0 -0
  18. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/etc/warp_beacon.conf +0 -0
  19. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/etc/warp_beacon.service +0 -0
  20. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/pyproject.toml +0 -0
  21. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/setup.cfg +0 -0
  22. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/setup.py +0 -0
  23. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/__init__.py +0 -0
  24. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/compress/__init__.py +0 -0
  25. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/compress/video.py +0 -0
  26. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/jobs/__init__.py +0 -0
  27. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/jobs/abstract.py +0 -0
  28. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/jobs/download_job.py +0 -0
  29. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/jobs/types.py +0 -0
  30. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/jobs/upload_job.py +0 -0
  31. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/mediainfo/__init__.py +0 -0
  32. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/mediainfo/abstract.py +0 -0
  33. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/mediainfo/audio.py +0 -0
  34. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/mediainfo/silencer.py +0 -0
  35. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/mediainfo/video.py +0 -0
  36. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scheduler/__init__.py +0 -0
  37. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/account_selector.py +0 -0
  38. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/exceptions.py +0 -0
  39. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/fail_handler.py +0 -0
  40. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/instagram/__init__.py +0 -0
  41. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/instagram/captcha.py +0 -0
  42. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/instagram/wb_instagrapi.py +0 -0
  43. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/link_resolver.py +0 -0
  44. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/utils.py +0 -0
  45. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/youtube/__init__.py +0 -0
  46. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/youtube/music.py +0 -0
  47. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/youtube/shorts.py +0 -0
  48. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/scraper/youtube/youtube.py +0 -0
  49. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/storage/__init__.py +0 -0
  50. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/storage/mongo.py +0 -0
  51. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/__init__.py +0 -0
  52. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/bot.py +0 -0
  53. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/caption_shortener.py +0 -0
  54. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/download_status.py +0 -0
  55. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/edit_message.py +0 -0
  56. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/handlers.py +0 -0
  57. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/placeholder_message.py +0 -0
  58. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/progress_bar.py +0 -0
  59. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/progress_file_reader.py +0 -0
  60. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/types.py +0 -0
  61. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/telegram/utils.py +0 -0
  62. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/uploader/__init__.py +0 -0
  63. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/warp_beacon.py +0 -0
  64. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon/yt_auth.py +0 -0
  65. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon.egg-info/SOURCES.txt +0 -0
  66. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon.egg-info/dependency_links.txt +0 -0
  67. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon.egg-info/entry_points.txt +0 -0
  68. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/warp_beacon.egg-info/requires.txt +0 -0
  69. {warp_beacon-2.6.84 → warp_beacon-2.6.86}/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.84
3
+ Version: 2.6.86
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.86"
2
+
@@ -17,7 +17,7 @@ class InstagramHuman(object):
17
17
  self.operations_count = 0
18
18
 
19
19
  def watch_content(self, media: list) -> None:
20
- for m in media[:random.randint(1, 3)]:
20
+ for m in media[:random.randint(1, 15)]:
21
21
  try:
22
22
  logging.info("Wathing content with pk '%s'", str(m.pk))
23
23
  content = self.scrapler.cl.media_info_v1(m.pk)
@@ -34,7 +34,7 @@ class InstagramHuman(object):
34
34
  timeline_initialized = True
35
35
  self.scrapler.timeline_cursor = self.scrapler.download_hndlr(self.scrapler.cl.get_timeline_feed, reason="cold_start_fetch")
36
36
  logging.info("Starting to watch related reels with media_pk '%d'", last_pk)
37
- media = self.scrapler.download_hndlr(self.scrapler.cl.reels, amount=random.randint(4, 10), last_media_pk=last_pk)
37
+ media = self.scrapler.download_hndlr(self.scrapler.cl.reels, amount=random.randint(4, 15), last_media_pk=last_pk)
38
38
  self.operations_count += 1
39
39
  self.watch_content(media)
40
40
 
@@ -43,7 +43,7 @@ class InstagramHuman(object):
43
43
  if not timeline_initialized:
44
44
  self.scrapler.timeline_cursor = self.scrapler.download_hndlr(self.scrapler.cl.get_timeline_feed, reason="cold_start_fetch")
45
45
  logging.info("Starting to explore reels with media_pk '%d'", last_pk)
46
- media = self.scrapler.download_hndlr(self.scrapler.cl.explore_reels, amount=random.randint(4, 10), last_media_pk=last_pk)
46
+ media = self.scrapler.download_hndlr(self.scrapler.cl.explore_reels, amount=random.randint(4, 15), last_media_pk=last_pk)
47
47
  self.operations_count += 1
48
48
  self.watch_content(media)
49
49
 
@@ -15,10 +15,8 @@ class IGScheduler(object):
15
15
  yt_sessions_dir = "/var/warp_beacon"
16
16
 
17
17
  def __init__(self, downloader: warp_beacon.scraper.AsyncDownloader) -> None:
18
- self.downloader = None
19
18
  self.running = True
20
19
  self.thread = None
21
- self.event = None
22
20
  self.state = {"remaining": randrange(8400, 26200), "yt_sess_exp": []}
23
21
  self.downloader = downloader
24
22
  self.event = threading.Event()
@@ -108,6 +106,9 @@ class IGScheduler(object):
108
106
 
109
107
  def validate_yt_session(self) -> bool:
110
108
  try:
109
+ if self.downloader.yt_validate_event.is_set():
110
+ return True
111
+ self.downloader.yt_validate_event.set()
111
112
  logging.info("Setting YT validate task ...")
112
113
  self.downloader.queue_task(warp_beacon.jobs.download_job.DownloadJob.build(
113
114
  session_validation=True,
@@ -147,7 +148,7 @@ class IGScheduler(object):
147
148
  self.handle_time_planning()
148
149
 
149
150
  start_time = time.time()
150
- logging.info("Next scheduler activity in '%s' seconds", int(min_val))
151
+ logging.info("Next scheduler activity in '%d' seconds", int(min_val))
151
152
  logging.info("IG timeout '%d' secs", int(self.state["remaining"]))
152
153
  self.event.wait(timeout=min_val)
153
154
  self.event.clear()
@@ -33,18 +33,6 @@ PROXY_FILE = os.environ.get("PROXY_FILE", default="/var/warp_beacon/proxies.json
33
33
  class AsyncDownloader(object):
34
34
  TG_FILE_LIMIT = 2147483648 # 2 GiB
35
35
  __JOE_BIDEN_WAKEUP = None
36
- workers = None
37
- allow_loop = None
38
- job_queue = None
39
- uploader = None
40
- workers_count = 0
41
- auth_event = None
42
- manager = None
43
- acc_selector = None
44
- scheduler = None
45
- scrolling_now = None
46
- process_context = None
47
- status_pipe = None
48
36
 
49
37
  def __init__(self, uploader: AsyncUploader, pipe_connection: multiprocessing.connection.Connection, workers_count: int) -> None:
50
38
  self.workers = []
@@ -58,6 +46,7 @@ class AsyncDownloader(object):
58
46
  self.uploader = uploader
59
47
  self.workers_count = workers_count
60
48
  self.status_pipe = pipe_connection
49
+ self.yt_validate_event = multiprocessing.Event()
61
50
  if os.environ.get("TG_PREMIUM", default="false") == "true":
62
51
  self.TG_FILE_LIMIT = 4294967296 # 4 GiB
63
52
 
@@ -160,6 +149,7 @@ class AsyncDownloader(object):
160
149
  actor.request_yt_auth = self.request_yt_auth
161
150
  actor.auth_event = self.auth_event
162
151
  actor.status_pipe = self.status_pipe
152
+ actor.yt_validate_event = self.yt_validate_event
163
153
  # job retry loop
164
154
  while self.allow_loop.value == 1:
165
155
  try:
@@ -1,23 +1,28 @@
1
- import os
2
- import time
3
- import pathlib
4
- from abc import ABC, abstractmethod
5
- from typing import Callable, Union
6
1
  import logging
7
2
  import multiprocessing
8
3
  import multiprocessing.connection
4
+ import os
9
5
  import socket
10
- import requests.packages.urllib3.util.connection as urllib3_cn
6
+ import pathlib
7
+ import time
8
+ from abc import ABC, abstractmethod
9
+ from typing import TYPE_CHECKING, Callable, Union
11
10
 
12
11
  from PIL import Image
13
12
  from pillow_heif import register_heif_opener
14
13
 
14
+ import requests.packages.urllib3.util.connection as urllib3_cn
15
+
16
+ if TYPE_CHECKING:
17
+ from multiprocessing.synchronize import Event as EventType
18
+
15
19
  class ScraperAbstract(ABC):
16
20
  def __init__(self, account: tuple, proxy: dict = None) -> None:
17
21
  self.original_gai_family = None
18
22
  self.send_message_to_admin_func: Callable = lambda: None
19
23
  self.request_yt_auth: Callable = lambda: None
20
24
  self.status_pipe: multiprocessing.connection.Connection = None
25
+ self.yt_validate_event: EventType = None
21
26
  self.auth_event = None
22
27
  self.account = None
23
28
  self.account_index = 0
@@ -12,9 +12,9 @@ import logging
12
12
  import email
13
13
  import imaplib
14
14
  import json
15
+ from urllib.parse import urljoin, urlparse
15
16
  import requests
16
17
  import urllib3
17
- from urllib.parse import urljoin, urlparse
18
18
 
19
19
  from instagrapi import exceptions
20
20
  from instagrapi.exceptions import UnknownError as IGUnknownError
@@ -341,7 +341,7 @@ class InstagramScraper(ScraperAbstract):
341
341
  #})
342
342
  media_info = self.download_hndlr(self.cl.media_info_v1, media_id)
343
343
  logging.info("media_type is '%d', product_type is '%s'", media_info.media_type, media_info.product_type)
344
- if media_info.media_type == 2 and media_info.product_type == "clips": # Reels
344
+ if media_info.media_type == 2 and media_info.product_type in ("clips", "ad"): # Reels
345
345
  res.append(self.download_video(url=media_info.video_url, media_info=media_info))
346
346
  elif media_info.media_type == 1: # Photo
347
347
  res.append(self.download_photo(url=media_info.thumbnail_url, media_info=media_info))
@@ -63,6 +63,10 @@ class YoutubeAbstract(ScraperAbstract):
63
63
  logging.error("Failed to refresh Youtube session!")
64
64
  logging.exception(e)
65
65
 
66
+ # avoid task acquiring in parallel worker
67
+ self.yt_validate_event.clear()
68
+ #time.sleep(35)
69
+
66
70
  return 0
67
71
 
68
72
  def get_video_id(self, url: str) -> Optional[str]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.6.84
3
+ Version: 2.6.86
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.84"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes