warp-beacon 2.2.3__py3-none-any.whl → 2.2.5__py3-none-any.whl
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/__version__.py +1 -1
- warp_beacon/scraper/__init__.py +19 -15
- warp_beacon/scraper/account_selector.py +5 -1
- warp_beacon/scraper/youtube/abstract.py +6 -10
- warp_beacon/telegram/handlers.py +2 -0
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/METADATA +1 -1
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/RECORD +11 -11
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/LICENSE +0 -0
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/WHEEL +0 -0
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/entry_points.txt +0 -0
- {warp_beacon-2.2.3.dist-info → warp_beacon-2.2.5.dist-info}/top_level.txt +0 -0
warp_beacon/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
__version__ = "2.2.
|
1
|
+
__version__ = "2.2.5"
|
2
2
|
|
warp_beacon/scraper/__init__.py
CHANGED
@@ -35,14 +35,16 @@ class AsyncDownloader(object):
|
|
35
35
|
self.allow_loop = multiprocessing.Value('i', 1)
|
36
36
|
self.uploader = uploader
|
37
37
|
self.workers_count = workers_count
|
38
|
-
|
38
|
+
AccountSelector.register('AccoutSelector', AccountSelector)
|
39
39
|
|
40
40
|
def __del__(self) -> None:
|
41
41
|
self.stop_all()
|
42
42
|
|
43
43
|
def start(self) -> None:
|
44
|
+
self.acc_selector = AccountSelector(ACC_FILE)
|
45
|
+
self.acc_selector.start()
|
44
46
|
for _ in range(self.workers_count):
|
45
|
-
proc = multiprocessing.Process(target=self.do_work)
|
47
|
+
proc = multiprocessing.Process(target=self.do_work, args=(self.acc_selector,))
|
46
48
|
self.workers.append(proc)
|
47
49
|
proc.start()
|
48
50
|
|
@@ -53,7 +55,8 @@ class AsyncDownloader(object):
|
|
53
55
|
if media_type == JobType.VIDEO:
|
54
56
|
video_info = VideoInfo(path)
|
55
57
|
media_info = video_info.get_finfo(tuple(fr_media_info.keys()))
|
56
|
-
|
58
|
+
if fr_media_info:
|
59
|
+
media_info.update(fr_media_info)
|
57
60
|
if not media_info.get("thumb", None):
|
58
61
|
media_info["thumb"] = video_info.generate_thumbnail()
|
59
62
|
media_info["has_sound"] = video_info.has_sound()
|
@@ -66,18 +69,18 @@ class AsyncDownloader(object):
|
|
66
69
|
|
67
70
|
return media_info
|
68
71
|
|
69
|
-
def try_next_account(self, job: DownloadJob, report_error: str = None) -> None:
|
72
|
+
def try_next_account(self, selector: AccountSelector, job: DownloadJob, report_error: str = None) -> None:
|
70
73
|
logging.warning("Switching account!")
|
71
74
|
if job.account_switches > self.acc_selector.count_service_accounts(job.job_origin):
|
72
75
|
raise AllAccountsFailed("All config accounts failed!")
|
73
76
|
if report_error:
|
74
|
-
|
75
|
-
|
76
|
-
cur_acc =
|
77
|
+
selector.bump_acc_fail("rate_limits")
|
78
|
+
selector.next()
|
79
|
+
cur_acc = selector.get_current()
|
77
80
|
logging.info("Current account: '%s'", str(cur_acc))
|
78
81
|
job.account_switches += 1
|
79
82
|
|
80
|
-
def do_work(self) -> None:
|
83
|
+
def do_work(self, selector: AccountSelector) -> None:
|
81
84
|
logging.info("download worker started")
|
82
85
|
while self.allow_loop.value == 1:
|
83
86
|
try:
|
@@ -97,16 +100,16 @@ class AsyncDownloader(object):
|
|
97
100
|
self.acc_selector.set_module(job.job_origin)
|
98
101
|
if job.job_origin is Origin.INSTAGRAM:
|
99
102
|
from warp_beacon.scraper.instagram.instagram import InstagramScraper
|
100
|
-
actor = InstagramScraper(
|
103
|
+
actor = InstagramScraper(selector.get_current())
|
101
104
|
elif job.job_origin is Origin.YT_SHORTS:
|
102
105
|
from warp_beacon.scraper.youtube.shorts import YoutubeShortsScraper
|
103
|
-
actor = YoutubeShortsScraper(
|
106
|
+
actor = YoutubeShortsScraper(selector.get_current())
|
104
107
|
elif job.job_origin is Origin.YT_MUSIC:
|
105
108
|
from warp_beacon.scraper.youtube.music import YoutubeMusicScraper
|
106
|
-
actor = YoutubeMusicScraper(
|
109
|
+
actor = YoutubeMusicScraper(selector.get_current())
|
107
110
|
elif job.job_origin is Origin.YOUTUBE:
|
108
111
|
from warp_beacon.scraper.youtube.youtube import YoutubeScraper
|
109
|
-
actor = YoutubeScraper(
|
112
|
+
actor = YoutubeScraper(selector.get_current())
|
110
113
|
actor.send_message_to_admin_func = self.send_message_to_admin
|
111
114
|
actor.auth_event = self.auth_event
|
112
115
|
while True:
|
@@ -141,7 +144,7 @@ class AsyncDownloader(object):
|
|
141
144
|
break
|
142
145
|
job.unvailable_error_count += 1
|
143
146
|
logging.info("Trying to switch account")
|
144
|
-
|
147
|
+
selector.next()
|
145
148
|
self.job_queue.put(job)
|
146
149
|
break
|
147
150
|
except TimeOut as e:
|
@@ -169,13 +172,13 @@ class AsyncDownloader(object):
|
|
169
172
|
except IGRateLimitOccurred as e:
|
170
173
|
logging.warning("IG ratelimit occurred :(")
|
171
174
|
logging.exception(e)
|
172
|
-
self.try_next_account(job, report_error="rate_limits")
|
175
|
+
self.try_next_account(selector, job, report_error="rate_limits")
|
173
176
|
self.job_queue.put(job)
|
174
177
|
break
|
175
178
|
except CaptchaIssue as e:
|
176
179
|
logging.warning("Challange occurred!")
|
177
180
|
logging.exception(e)
|
178
|
-
self.try_next_account(job)
|
181
|
+
self.try_next_account(selector, job)
|
179
182
|
self.job_queue.put(job)
|
180
183
|
break
|
181
184
|
except YotubeLiveError as e:
|
@@ -334,6 +337,7 @@ class AsyncDownloader(object):
|
|
334
337
|
#proc.terminate()
|
335
338
|
logging.info("process #%d stopped", proc.pid)
|
336
339
|
self.workers.clear()
|
340
|
+
self.acc_selector.shutdown()
|
337
341
|
|
338
342
|
def queue_task(self, job: DownloadJob) -> str:
|
339
343
|
self.job_queue.put_nowait(job)
|
@@ -4,11 +4,13 @@ import re
|
|
4
4
|
|
5
5
|
from itertools import cycle
|
6
6
|
|
7
|
+
from multiprocessing.managers import BaseManager
|
8
|
+
|
7
9
|
from warp_beacon.jobs import Origin
|
8
10
|
|
9
11
|
import logging
|
10
12
|
|
11
|
-
class AccountSelector(
|
13
|
+
class AccountSelector(BaseManager):
|
12
14
|
accounts = []
|
13
15
|
acc_pool = None
|
14
16
|
current = None
|
@@ -26,6 +28,8 @@ class AccountSelector(object):
|
|
26
28
|
self.load_yt_sessions()
|
27
29
|
else:
|
28
30
|
raise ValueError("Accounts file not found")
|
31
|
+
|
32
|
+
super().__init__()
|
29
33
|
|
30
34
|
def __del__(self) -> None:
|
31
35
|
pass
|
@@ -3,16 +3,12 @@ import pathlib
|
|
3
3
|
import time
|
4
4
|
import socket
|
5
5
|
import ssl
|
6
|
-
|
7
6
|
#from abc import abstractmethod
|
8
|
-
from typing import Callable, Union
|
9
|
-
|
7
|
+
from typing import Callable, Union, Optional
|
10
8
|
import json
|
11
|
-
|
12
|
-
import requests
|
13
9
|
import urllib
|
10
|
+
import urllib.request
|
14
11
|
import http.client
|
15
|
-
import requests
|
16
12
|
from PIL import Image
|
17
13
|
|
18
14
|
from warp_beacon.scraper.abstract import ScraperAbstract
|
@@ -106,11 +102,11 @@ class YoutubeAbstract(ScraperAbstract):
|
|
106
102
|
if "yt_download_" in i:
|
107
103
|
os.unlink("%s/%s" % (self.DOWNLOAD_DIR, i))
|
108
104
|
|
109
|
-
def download_thumbnail(self, url: str, timeout: int) ->
|
105
|
+
def download_thumbnail(self, url: str, timeout: int) -> Optional[io.BytesIO]:
|
110
106
|
try:
|
111
|
-
|
112
|
-
|
113
|
-
image = Image.open(io.BytesIO(
|
107
|
+
logging.info("Youtube thumbnail url '%s'", url)
|
108
|
+
with urllib.request.urlopen(url, timeout=timeout) as f:
|
109
|
+
image = Image.open(io.BytesIO(f.read()))
|
114
110
|
image = MediaInfoAbstract.shrink_image_to_fit(image)
|
115
111
|
io_buf = io.BytesIO()
|
116
112
|
image.save(io_buf, format='JPEG')
|
warp_beacon/telegram/handlers.py
CHANGED
@@ -95,6 +95,7 @@ class Handlers(object):
|
|
95
95
|
if ent_len > 1:
|
96
96
|
await self.bot.upload_job(
|
97
97
|
UploadJob(
|
98
|
+
url=url,
|
98
99
|
tg_file_id=",".join(tg_file_ids),
|
99
100
|
message_id=effective_message_id,
|
100
101
|
media_type=JobType.COLLECTION,
|
@@ -108,6 +109,7 @@ class Handlers(object):
|
|
108
109
|
media_type = JobType[entities[0]["media_type"].upper()]
|
109
110
|
await self.bot.upload_job(
|
110
111
|
UploadJob(
|
112
|
+
url=url,
|
111
113
|
tg_file_id=tg_file_ids.pop(),
|
112
114
|
message_id=effective_message_id,
|
113
115
|
media_type=media_type,
|
@@ -3,7 +3,7 @@ lib/systemd/system/warp_beacon.service,sha256=lPmHqLqcI2eIV7nwHS0qcALQrznixqJuww
|
|
3
3
|
var/warp_beacon/accounts.json,sha256=rKFQM_b9eoDS4mJ1B_SZNolPLXx1SQdQMdY2F_ZcBt8,1523
|
4
4
|
var/warp_beacon/placeholder.gif,sha256=cE5CGJVaop4Sx21zx6j4AyoHU0ncmvQuS2o6hJfEH88,6064
|
5
5
|
warp_beacon/__init__.py,sha256=_rThNODmz0nDp_n4mWo_HKaNFE5jk1_7cRhHyYaencI,163
|
6
|
-
warp_beacon/__version__.py,sha256=
|
6
|
+
warp_beacon/__version__.py,sha256=1N7zioGPswYd_sGrglKng-K01jHFk6oVItbCYK4wBSM,23
|
7
7
|
warp_beacon/warp_beacon.py,sha256=7KEtZDj-pdhtl6m-zFLsSojs1ZR4o7L0xbqtdmYPvfE,342
|
8
8
|
warp_beacon/compress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
warp_beacon/compress/video.py,sha256=_PDMVYCyzLYxHv1uZmmzGcG_8rjaZr7BTXsXTTy_oS4,2846
|
@@ -19,27 +19,27 @@ warp_beacon/mediainfo/silencer.py,sha256=MgUc9Ibbhjhg9GbJMNfJqrdDkMsQShZkQ1sCwvW
|
|
19
19
|
warp_beacon/mediainfo/video.py,sha256=AIRy_op_BvehsjarM1rvT5Qo0QWwf-Q6xVVd_aCnbJ4,2505
|
20
20
|
warp_beacon/scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
warp_beacon/scheduler/scheduler.py,sha256=8gjW0CLuX3KyYpSDSkRE0i48AsJbi-fQ2qJZAJ-yt_s,2411
|
22
|
-
warp_beacon/scraper/__init__.py,sha256=
|
22
|
+
warp_beacon/scraper/__init__.py,sha256=mY0DdzEy1ZV5wmirwuV9f6e57LbNVzH3ZVPMnbUPGB4,14908
|
23
23
|
warp_beacon/scraper/abstract.py,sha256=aNZ9ypF9B8BjflcIwi-7wEzIqF-XPeF0xvfX9CP_iIw,2708
|
24
|
-
warp_beacon/scraper/account_selector.py,sha256=
|
24
|
+
warp_beacon/scraper/account_selector.py,sha256=x1TAqHVWtxvhzKCTBERpHoUJ0fOcnswStQjEcDxkrFU,2960
|
25
25
|
warp_beacon/scraper/exceptions.py,sha256=lHsPrYy5iYnHsIdUHqRxZmzlqrkNj_TS4TkiTJfWhTs,1326
|
26
26
|
warp_beacon/scraper/instagram/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
warp_beacon/scraper/instagram/instagram.py,sha256=iT66IM7nsbVDWQzBW-CJUWDBjoBbRZH4BHx6TJw3oqo,13517
|
28
28
|
warp_beacon/scraper/youtube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
-
warp_beacon/scraper/youtube/abstract.py,sha256=
|
29
|
+
warp_beacon/scraper/youtube/abstract.py,sha256=oL0ZtgPdyBMe_BGQS31T2kQHTceSM2vlWPhB57XQSrc,6048
|
30
30
|
warp_beacon/scraper/youtube/music.py,sha256=8TguqXc1BC9Slp09BzCU8dtQ6BnyKwzZSLLFHpqDHtg,1498
|
31
31
|
warp_beacon/scraper/youtube/shorts.py,sha256=pHfvEBau8Zp7Ar3LBuPmjqYq8fmjJUQvzeZXujQMpG4,1203
|
32
32
|
warp_beacon/scraper/youtube/youtube.py,sha256=K98n2TSJaDZt-xT7mADZL1UEf2exIYm0Wnenn2GAYfI,2250
|
33
33
|
warp_beacon/storage/__init__.py,sha256=8XsJXq9X7GDlTaWREF4W1PDX9PH5utwhjf5c5M8Bb7o,3378
|
34
34
|
warp_beacon/telegram/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
35
|
warp_beacon/telegram/bot.py,sha256=khk2NvVz_UvxEA_Cz43D5jFuV4z_mUNLOXLhwXKUxz8,15069
|
36
|
-
warp_beacon/telegram/handlers.py,sha256=
|
36
|
+
warp_beacon/telegram/handlers.py,sha256=LWDdJBLuB-ImemPtzldgm9UY42T2mr0yJsHHQZDmQkI,6759
|
37
37
|
warp_beacon/telegram/placeholder_message.py,sha256=u5kVfTjGmVYkwA5opniRltHXGpsdSxI41WEde8J5os0,6418
|
38
38
|
warp_beacon/telegram/utils.py,sha256=ikfwmuDvd0XtOuwP29tZPjAz7kwiGSSu_QR-vpv6pMY,2352
|
39
39
|
warp_beacon/uploader/__init__.py,sha256=rsUkzzmtaeQY-kNkcIiPsrayS9idFKY3hBC71mR19XE,4743
|
40
|
-
warp_beacon-2.2.
|
41
|
-
warp_beacon-2.2.
|
42
|
-
warp_beacon-2.2.
|
43
|
-
warp_beacon-2.2.
|
44
|
-
warp_beacon-2.2.
|
45
|
-
warp_beacon-2.2.
|
40
|
+
warp_beacon-2.2.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
41
|
+
warp_beacon-2.2.5.dist-info/METADATA,sha256=GJue-K8EOklIVmECLOVU4NFd6LxdaX1hj8WA6E_m7Ck,21250
|
42
|
+
warp_beacon-2.2.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
43
|
+
warp_beacon-2.2.5.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
|
44
|
+
warp_beacon-2.2.5.dist-info/top_level.txt,sha256=ALb_Ft_eG-OY4_m0TWUifNUOZsrx483L-zw7G7vqXoc,971
|
45
|
+
warp_beacon-2.2.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|