warp-beacon 2.6.83__tar.gz → 2.6.84__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.6.83/warp_beacon.egg-info → warp_beacon-2.6.84}/PKG-INFO +1 -1
- warp_beacon-2.6.84/warp_beacon/__version__.py +2 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scheduler/scheduler.py +7 -8
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/instagram/wb_instagrapi.py +16 -4
- {warp_beacon-2.6.83 → warp_beacon-2.6.84/warp_beacon.egg-info}/PKG-INFO +1 -1
- warp_beacon-2.6.83/warp_beacon/__version__.py +0 -2
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/LICENSE +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/MANIFEST.in +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/README.md +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/assets/placeholder.gif +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/etc/.gitignore +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/etc/accounts.json +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/etc/proxies.json +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/etc/warp_beacon.conf +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/etc/warp_beacon.service +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/pyproject.toml +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/setup.cfg +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/setup.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/compress/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/compress/video.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/jobs/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/jobs/abstract.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/jobs/download_job.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/jobs/types.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/jobs/upload_job.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/mediainfo/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/mediainfo/abstract.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/mediainfo/audio.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/mediainfo/silencer.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/mediainfo/video.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scheduler/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scheduler/instagram_human.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/abstract.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/account_selector.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/exceptions.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/fail_handler.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/instagram/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/instagram/captcha.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/instagram/instagram.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/link_resolver.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/utils.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/youtube/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/youtube/abstract.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/youtube/music.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/youtube/shorts.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/scraper/youtube/youtube.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/storage/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/storage/mongo.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/bot.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/caption_shortener.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/download_status.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/edit_message.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/handlers.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/placeholder_message.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/progress_bar.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/progress_file_reader.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/types.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/telegram/utils.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/uploader/__init__.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/warp_beacon.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon/yt_auth.py +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon.egg-info/SOURCES.txt +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon.egg-info/dependency_links.txt +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon.egg-info/entry_points.txt +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon.egg-info/requires.txt +0 -0
- {warp_beacon-2.6.83 → warp_beacon-2.6.84}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -13,13 +13,13 @@ import warp_beacon
|
|
13
13
|
class IGScheduler(object):
|
14
14
|
state_file = "/var/warp_beacon/scheduler_state.json"
|
15
15
|
yt_sessions_dir = "/var/warp_beacon"
|
16
|
-
downloader = None
|
17
|
-
running = True
|
18
|
-
thread = None
|
19
|
-
event = None
|
20
|
-
state = {"remaining": randrange(8400, 26200), "yt_sess_exp": []}
|
21
16
|
|
22
17
|
def __init__(self, downloader: warp_beacon.scraper.AsyncDownloader) -> None:
|
18
|
+
self.downloader = None
|
19
|
+
self.running = True
|
20
|
+
self.thread = None
|
21
|
+
self.event = None
|
22
|
+
self.state = {"remaining": randrange(8400, 26200), "yt_sess_exp": []}
|
23
23
|
self.downloader = downloader
|
24
24
|
self.event = threading.Event()
|
25
25
|
self.handle_time_planning()
|
@@ -37,9 +37,7 @@ class IGScheduler(object):
|
|
37
37
|
|
38
38
|
def load_yt_sessions(self) -> None:
|
39
39
|
try:
|
40
|
-
|
41
|
-
if not "yt_sess_exp" in self.state:
|
42
|
-
self.state["yt_sess_exp"] = []
|
40
|
+
self.state["yt_sess_exp"] = []
|
43
41
|
|
44
42
|
for f in os.listdir(self.yt_sessions_dir):
|
45
43
|
if f.startswith("yt_session") and f.endswith(".json"):
|
@@ -134,6 +132,7 @@ class IGScheduler(object):
|
|
134
132
|
self.load_state()
|
135
133
|
while self.running:
|
136
134
|
try:
|
135
|
+
self.load_yt_sessions()
|
137
136
|
yt_expires = self.yt_nearest_expire()
|
138
137
|
ig_sched = self.state["remaining"]
|
139
138
|
min_val = min(yt_expires, ig_sched)
|
@@ -43,7 +43,19 @@ class WBClient(Client):
|
|
43
43
|
raise TypeError("Progress callback must be callable")
|
44
44
|
self.progress_callback = callback
|
45
45
|
|
46
|
+
def adaptive_chunk_size(self, content_length: int) -> int:
|
47
|
+
if content_length < 100_000:
|
48
|
+
return 2048
|
49
|
+
elif content_length < 5_000_000:
|
50
|
+
return 8192
|
51
|
+
elif content_length < 100_000_000:
|
52
|
+
return 32768
|
53
|
+
else:
|
54
|
+
return 65536
|
55
|
+
|
46
56
|
def sanitize_instagram_url(self, url: str) -> str:
|
57
|
+
if "oh=" in url: # signed url, do not touch
|
58
|
+
return url
|
47
59
|
parsed = urlparse(url)
|
48
60
|
query = parse_qs(parsed.query)
|
49
61
|
filtered_query = {k: v for k, v in query.items() if k in self.essential_params}
|
@@ -51,7 +63,7 @@ class WBClient(Client):
|
|
51
63
|
return urlunparse(parsed._replace(query=new_query))
|
52
64
|
|
53
65
|
def video_download_by_url(self, url: str, filename: str = "", folder: Path = "") -> Path:
|
54
|
-
|
66
|
+
url = self.sanitize_instagram_url(url)
|
55
67
|
fname = urlparse(url).path.rsplit("/", 1)[1]
|
56
68
|
filename = f"{filename}.{fname.rsplit('.', 1)[1]}" if filename else fname
|
57
69
|
path = Path(folder or Path.cwd()) / filename
|
@@ -78,7 +90,7 @@ class WBClient(Client):
|
|
78
90
|
|
79
91
|
downloaded = 0
|
80
92
|
with open(path, "wb") as f:
|
81
|
-
for chunk in response.iter_content(chunk_size=
|
93
|
+
for chunk in response.iter_content(chunk_size=self.adaptive_chunk_size(content_length)):
|
82
94
|
if chunk:
|
83
95
|
f.write(chunk)
|
84
96
|
downloaded += len(chunk)
|
@@ -103,7 +115,7 @@ class WBClient(Client):
|
|
103
115
|
def photo_download_by_url(
|
104
116
|
self, url: str, filename: str = "", folder: Path = ""
|
105
117
|
) -> Path:
|
106
|
-
|
118
|
+
url = self.sanitize_instagram_url(url)
|
107
119
|
fname = urlparse(url).path.rsplit("/", 1)[1]
|
108
120
|
filename = f"{filename}.{(filename, fname.rsplit('.', 1)[1]) if filename else fname}"
|
109
121
|
path = Path(folder) / filename
|
@@ -136,7 +148,7 @@ class WBClient(Client):
|
|
136
148
|
downloaded = 0
|
137
149
|
with open(path, "wb") as f:
|
138
150
|
response.raw.decode_content = True
|
139
|
-
for chunk in response.iter_content(chunk_size=
|
151
|
+
for chunk in response.iter_content(chunk_size=self.adaptive_chunk_size(content_length)):
|
140
152
|
if chunk:
|
141
153
|
f.write(chunk)
|
142
154
|
downloaded += len(chunk)
|
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
|