warp-beacon 2.7.3__py3-none-any.whl → 2.7.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.
@@ -1,2 +1,2 @@
1
- __version__ = "2.7.3"
1
+ __version__ = "2.7.5"
2
2
 
@@ -392,6 +392,10 @@ class AsyncDownloader(object):
392
392
  ))
393
393
  else:
394
394
  logging.info("Scrolling in progress, ignoring request")
395
+
396
+ # report media seen
397
+ if job.job_origin is Origin.INSTAGRAM:
398
+ actor.report_seen(items)
395
399
  else:
396
400
  logging.info("Job already in work in parallel worker. Redirecting job to upload worker.")
397
401
  self.uploader.queue_task(job.to_upload_job())
@@ -256,6 +256,7 @@ class InstagramScraper(ScraperAbstract):
256
256
  "canonical_name": self.extract_canonical_name(media_info),
257
257
  "media_type": JobType.VIDEO,
258
258
  "last_pk": media_info.pk,
259
+ "last_id": media_info.id,
259
260
  "media_info": {"duration": round(media_info.video_duration)}
260
261
  }
261
262
 
@@ -270,7 +271,8 @@ class InstagramScraper(ScraperAbstract):
270
271
  "local_media_path": self.rename_local_file(path),
271
272
  "canonical_name": self.extract_canonical_name(media_info),
272
273
  "media_type": JobType.IMAGE,
273
- "last_pk": media_info.pk
274
+ "last_pk": media_info.pk,
275
+ "last_id": media_info.id
274
276
  }
275
277
 
276
278
  def download_story(self, story_info: Story) -> dict:
@@ -296,7 +298,14 @@ class InstagramScraper(ScraperAbstract):
296
298
  media_type = JobType.VIDEO
297
299
  media_info["duration"] = story_info.video_duration
298
300
 
299
- return {"local_media_path": self.rename_local_file(path), "media_type": media_type, "media_info": media_info, "effective_url": effective_url}
301
+ return {
302
+ "local_media_path": self.rename_local_file(path),
303
+ "media_type": media_type,
304
+ "media_info": media_info,
305
+ "effective_url": effective_url,
306
+ "last_pk": story_info.pk,
307
+ "last_id": story_info.id
308
+ }
300
309
 
301
310
  def download_stories(self, stories: list[Story]) -> dict:
302
311
  chunks = []
@@ -306,21 +315,30 @@ class InstagramScraper(ScraperAbstract):
306
315
  chunk.append(self.download_story(story_info=story))
307
316
  chunks.append(chunk)
308
317
 
309
- return {"media_type": JobType.COLLECTION, "save_items": True, "items": chunks}
318
+ return {
319
+ "media_type": JobType.COLLECTION,
320
+ "save_items": True,
321
+ "items": chunks
322
+ }
310
323
 
311
324
  def download_album(self, media_info: Media) -> dict:
312
325
  chunks = []
313
326
  for media_chunk in Utils.chunker(media_info.resources, 10):
314
327
  chunk = []
315
328
  for media in media_chunk:
316
- _media_info = self.download_hndlr(self.cl.media_info_v1, media.pk)
329
+ _media_info = self.download_hndlr(self.cl.media_info, media.pk)
317
330
  if media.media_type == 1: # photo
318
331
  chunk.append(self.download_photo(url=_media_info.thumbnail_url, media_info=_media_info))
319
332
  elif media.media_type == 2: # video
320
333
  chunk.append(self.download_video(url=_media_info.video_url, media_info=_media_info))
321
334
  chunks.append(chunk)
322
335
 
323
- return {"media_type": JobType.COLLECTION, "items": chunks}
336
+ return {
337
+ "media_type": JobType.COLLECTION,
338
+ "items": chunks,
339
+ "last_pk": media_info.pk,
340
+ "last_id": media_info.id
341
+ }
324
342
 
325
343
  def extract_canonical_name(self, media: Media) -> str:
326
344
  ret = ""
@@ -349,7 +367,7 @@ class InstagramScraper(ScraperAbstract):
349
367
  # "chat_id": self.job.chat_id,
350
368
  # "message_id": self.job.placeholder_message_id
351
369
  #})
352
- media_info = self.download_hndlr(self.cl.media_info_v1, media_id)
370
+ media_info = self.download_hndlr(self.cl.media_info, media_id)
353
371
  logging.info("media_type is '%d', product_type is '%s'", media_info.media_type, media_info.product_type)
354
372
  if media_info.media_type == 2 and media_info.product_type in ("clips", "ad"): # Reels
355
373
  res.append(self.download_video(url=media_info.video_url, media_info=media_info))
@@ -357,10 +375,6 @@ class InstagramScraper(ScraperAbstract):
357
375
  res.append(self.download_photo(url=media_info.thumbnail_url, media_info=media_info))
358
376
  elif media_info.media_type == 8: # Album
359
377
  res.append(self.download_album(media_info=media_info))
360
- try:
361
- self.cl.media_seen([media_info.id])
362
- except Exception as e:
363
- logging.warning("Failed to mark seen with id = '%s'", media_info.id, exc_info=e)
364
378
  elif scrap_type == "story":
365
379
  story_info = self.cl.story_info(media_id)
366
380
  logging.info("media_type for story is '%d'", story_info.media_type)
@@ -460,4 +474,27 @@ class InstagramScraper(ScraperAbstract):
460
474
  "report_type": ReportType.PROGRESS
461
475
  }
462
476
  self.status_pipe.send(msg)
463
- self._download_progress_threshold += 5
477
+ self._download_progress_threshold += 5
478
+
479
+ def report_seen(self, items: dict) -> None:
480
+ try:
481
+ seen = []
482
+ for item in items:
483
+ if item["media_type"] == JobType.COLLECTION:
484
+ if item.get("last_id", None):
485
+ seen.append(item["last_id"])
486
+ if item.get("items", None):
487
+ for chunk in item["items"]:
488
+ for col_item in chunk:
489
+ last_id = col_item.get("last_id", None)
490
+ if last_id:
491
+ seen.append(last_id)
492
+ else:
493
+ last_id = item.get("last_id", None)
494
+ if last_id:
495
+ seen.append(last_id)
496
+
497
+ if seen:
498
+ self.download_hndlr(self.cl.media_seen, seen)
499
+ except Exception as e:
500
+ logging.error("Failed to report seen media!", exc_info=e)
@@ -9,7 +9,7 @@ from pyrogram import Client
9
9
  from warp_beacon.telegram.types import ReportType
10
10
 
11
11
  class ProgressBar(object):
12
- MAX_PROGRESS_RENDER_SIZE = 1_500_000 # 1 MB
12
+ MAX_PROGRESS_RENDER_SIZE = 500_000 # 500 kB
13
13
 
14
14
  def __init__(self, client: Client) -> None:
15
15
  self._next_threshold = 5
@@ -4,6 +4,7 @@ from typing import Callable
4
4
  import asyncio
5
5
  import threading
6
6
  import multiprocessing
7
+ from queue import Empty
7
8
 
8
9
  from warp_beacon.jobs.types import JobType
9
10
  from warp_beacon.jobs.upload_job import UploadJob
@@ -179,7 +180,7 @@ class AsyncUploader(object):
179
180
  logging.info("No callback no call!!")
180
181
  except Exception as e:
181
182
  logging.exception(e)
182
- except multiprocessing.Queue.empty:
183
+ except Empty:
183
184
  pass
184
185
  except Exception as e:
185
186
  logging.error("Exception occurred inside upload worker!")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warp_beacon
3
- Version: 2.7.3
3
+ Version: 2.7.5
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
@@ -4,7 +4,7 @@ var/warp_beacon/accounts.json,sha256=OsXdncs6h88xrF_AP6_WDCK1waGBn9SR-uYdIeK37GM
4
4
  var/warp_beacon/placeholder.gif,sha256=cE5CGJVaop4Sx21zx6j4AyoHU0ncmvQuS2o6hJfEH88,6064
5
5
  var/warp_beacon/proxies.json,sha256=VnjlQDXumOEq72ZFjbh6IqHS1TEHqn8HPYAZqWCeSIA,95
6
6
  warp_beacon/__init__.py,sha256=_rThNODmz0nDp_n4mWo_HKaNFE5jk1_7cRhHyYaencI,163
7
- warp_beacon/__version__.py,sha256=zHOuiSy6iXgjI1Uya4AAc0Z69GIAz6P6Pp3YBK0PpoY,23
7
+ warp_beacon/__version__.py,sha256=kvIAlwPLWbb1-76WKES6wpdLYyO-U4V_rglHAGDsFEw,23
8
8
  warp_beacon/warp_beacon.py,sha256=ADCR30uGXIsDrt9WoiI9Ghu2QtWs0qZIK6x3pQKM_B4,1109
9
9
  warp_beacon/yt_auth.py,sha256=GUTKqYr_tzDC-07Lx_ahWXSag8EyLxXBUnQbDBIkEmk,6022
10
10
  warp_beacon/compress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -22,7 +22,7 @@ warp_beacon/mediainfo/video.py,sha256=UBZrhTN5IDI-aYu6tsJEILo9nFkjHhkldGVFmvV7tE
22
22
  warp_beacon/scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  warp_beacon/scheduler/instagram_human.py,sha256=gqayCcn0xRYSNSFxeSpCGhBJyIwNAbk4Fnt1SCd61iA,11259
24
24
  warp_beacon/scheduler/scheduler.py,sha256=Bf4sGXjX75Dox3q-yzUHhagtzUAj3hl5GzfnZya-_io,4995
25
- warp_beacon/scraper/__init__.py,sha256=k3M0X_m5f7b_DbBB3Ahk62ewEYr5AkqJL0PJXf0G4mI,20140
25
+ warp_beacon/scraper/__init__.py,sha256=KTmch6hUXuXSI7Br8yjgZHf2ET9NRBhcXhl2SQ6De48,20258
26
26
  warp_beacon/scraper/abstract.py,sha256=pWbaTu-gDZgi-iFjqMR_uGzPl5KLv-4gTdJ9w6cD4sk,3802
27
27
  warp_beacon/scraper/account_selector.py,sha256=vxIVesGPQKVtL3uSn5CFlZB1eAYowUN7lTeiGUFmtDk,10067
28
28
  warp_beacon/scraper/exceptions.py,sha256=EKwoF0oH2xZWbNU-v8DOaWK5skKwa3s1yTIBdlcfMpc,1452
@@ -31,7 +31,7 @@ warp_beacon/scraper/link_resolver.py,sha256=Rc9ZuMyOo3iPywDHwjngy-WRQ2SXhJwxcg-5
31
31
  warp_beacon/scraper/utils.py,sha256=yL-nrdCOAXNZgmIFPurIYFHfPsxHDl8pqif6BYKrzJI,1218
32
32
  warp_beacon/scraper/instagram/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  warp_beacon/scraper/instagram/captcha.py,sha256=9UYziuqB3Tsat_ET6ex-cnZDbi6yCnsXHSpmE8MuUHk,4651
34
- warp_beacon/scraper/instagram/instagram.py,sha256=cGInSO6UzmPcq2DokoL8_jmuIco1PBlVrafywDXazBg,17861
34
+ warp_beacon/scraper/instagram/instagram.py,sha256=6ZEJAoAiB32BywE-On_kQdOoBe2iUWJ6wJqhuGAKmYk,18548
35
35
  warp_beacon/scraper/instagram/wb_instagrapi.py,sha256=M5NCtLwdUvByjmDBZMWljgB275R0LSBFblsGpapluD0,5968
36
36
  warp_beacon/scraper/youtube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  warp_beacon/scraper/youtube/abstract.py,sha256=lJCmtXYwEB8exTFr_uSA0MCyjVcoSdVHGDRxwZPvEv8,15276
@@ -47,14 +47,14 @@ warp_beacon/telegram/download_status.py,sha256=N-Qg13LVcPskyQNKG1lw50K1lhFtXu003
47
47
  warp_beacon/telegram/edit_message.py,sha256=6DX8eJV70MG_b79WbuJG55qLBs66boElzYdCr8zpMeI,5380
48
48
  warp_beacon/telegram/handlers.py,sha256=uvR6TPHSqdSxigp3wR-ewiE6t3TvVcbVLVcYGwkgD2s,9559
49
49
  warp_beacon/telegram/placeholder_message.py,sha256=wN9-BRiyrtHG-EvXtZkGJHt2CX71munQ57ITttjt0mw,6400
50
- warp_beacon/telegram/progress_bar.py,sha256=WLasAysPB_0buh-N6FOuDcz2QHiuaogC9ILAt0a59Lc,4996
50
+ warp_beacon/telegram/progress_bar.py,sha256=dqMZFSqxRCOPPRlahkz0L37mqMhfr5rvg9bg-sqAP4Q,4997
51
51
  warp_beacon/telegram/progress_file_reader.py,sha256=e3equyNKlKs764AD-iE9QRsh3YDHTzP78Mx5tdvPPWs,969
52
52
  warp_beacon/telegram/types.py,sha256=Kvdng6uCF1HRoqQgGW1ZYYPJoVuYkFb-LDvMBbW5Hjk,89
53
53
  warp_beacon/telegram/utils.py,sha256=1Lq67aRylVJzbwSyvAgjPAGjJZFATkICvAj3TJGuJiM,4635
54
- warp_beacon/uploader/__init__.py,sha256=j3qcuKhpchseZLGzSsSiogqe6WdMbkK8d3I-ConhNRs,5687
55
- warp_beacon-2.7.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
56
- warp_beacon-2.7.3.dist-info/METADATA,sha256=fW2gRFXVMGTaRSR4EW37Anz92FKujSZKREco4n0bRX0,23214
57
- warp_beacon-2.7.3.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
58
- warp_beacon-2.7.3.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
59
- warp_beacon-2.7.3.dist-info/top_level.txt,sha256=5YQRN46STNg81V_3jdzZ6bftkMxhe1hTPSFvJugDu84,1405
60
- warp_beacon-2.7.3.dist-info/RECORD,,
54
+ warp_beacon/uploader/__init__.py,sha256=ewvR60k9osJxw_kb5U-TlZkCGR_574biq3w_aR1tjIU,5689
55
+ warp_beacon-2.7.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
56
+ warp_beacon-2.7.5.dist-info/METADATA,sha256=EAbVMEWj43GP-wOMTBoRFaqD7LSWS90OKImnddQxOMk,23214
57
+ warp_beacon-2.7.5.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
58
+ warp_beacon-2.7.5.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
59
+ warp_beacon-2.7.5.dist-info/top_level.txt,sha256=5YQRN46STNg81V_3jdzZ6bftkMxhe1hTPSFvJugDu84,1405
60
+ warp_beacon-2.7.5.dist-info/RECORD,,