warp-beacon 2.2.20__tar.gz → 2.2.22__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 (54) hide show
  1. {warp_beacon-2.2.20/warp_beacon.egg-info → warp_beacon-2.2.22}/PKG-INFO +1 -1
  2. warp_beacon-2.2.22/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scheduler/scheduler.py +4 -2
  4. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/__init__.py +6 -6
  5. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/account_selector.py +18 -16
  6. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/youtube/abstract.py +1 -1
  7. {warp_beacon-2.2.20 → warp_beacon-2.2.22/warp_beacon.egg-info}/PKG-INFO +1 -1
  8. warp_beacon-2.2.20/warp_beacon/__version__.py +0 -2
  9. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/LICENSE +0 -0
  10. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/MANIFEST.in +0 -0
  11. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/README.md +0 -0
  12. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/assets/placeholder.gif +0 -0
  13. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/etc/.gitignore +0 -0
  14. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/etc/accounts.json +0 -0
  15. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/etc/warp_beacon.conf +0 -0
  16. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/etc/warp_beacon.service +0 -0
  17. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/pyproject.toml +0 -0
  18. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/setup.cfg +0 -0
  19. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/setup.py +0 -0
  20. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/__init__.py +0 -0
  21. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/compress/__init__.py +0 -0
  22. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/compress/video.py +0 -0
  23. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/jobs/__init__.py +0 -0
  24. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/jobs/abstract.py +0 -0
  25. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/jobs/download_job.py +0 -0
  26. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/jobs/types.py +0 -0
  27. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/jobs/upload_job.py +0 -0
  28. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/mediainfo/__init__.py +0 -0
  29. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/mediainfo/abstract.py +0 -0
  30. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/mediainfo/audio.py +0 -0
  31. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/mediainfo/silencer.py +0 -0
  32. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/mediainfo/video.py +0 -0
  33. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scheduler/__init__.py +0 -0
  34. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/abstract.py +0 -0
  35. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/exceptions.py +0 -0
  36. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/instagram/__init__.py +0 -0
  37. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/instagram/instagram.py +0 -0
  38. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/youtube/__init__.py +0 -0
  39. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/youtube/music.py +0 -0
  40. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/youtube/shorts.py +0 -0
  41. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/scraper/youtube/youtube.py +0 -0
  42. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/storage/__init__.py +0 -0
  43. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/telegram/__init__.py +0 -0
  44. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/telegram/bot.py +0 -0
  45. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/telegram/handlers.py +0 -0
  46. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/telegram/placeholder_message.py +0 -0
  47. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/telegram/utils.py +0 -0
  48. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/uploader/__init__.py +0 -0
  49. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon/warp_beacon.py +0 -0
  50. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon.egg-info/SOURCES.txt +0 -0
  51. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon.egg-info/dependency_links.txt +0 -0
  52. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon.egg-info/entry_points.txt +0 -0
  53. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon.egg-info/requires.txt +0 -0
  54. {warp_beacon-2.2.20 → warp_beacon-2.2.22}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.2.20
3
+ Version: 2.2.22
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.2.22"
2
+
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import time
3
+ from random import randrange
3
4
  import threading
4
5
  import json
5
6
 
@@ -14,7 +15,7 @@ class IGScheduler(object):
14
15
  running = True
15
16
  thread = None
16
17
  event = None
17
- state = {"remaining": 3600}
18
+ state = {"remaining": randrange(3600, 10800)}
18
19
 
19
20
  def __init__(self, downloader: warp_beacon.scraper.AsyncDownloader) -> None:
20
21
  self.downloader = downloader
@@ -81,7 +82,8 @@ class IGScheduler(object):
81
82
  while self.running:
82
83
  try:
83
84
  if self.state["remaining"] <= 0:
84
- self.state["remaining"] = 3600
85
+ self.state["remaining"] = randrange(3600, 10800)
86
+ logging.info("Next scheduler activity in '%s' seconds", self.state["remaining"])
85
87
 
86
88
  start_time = time.time()
87
89
  self.event.wait(timeout=self.state["remaining"])
@@ -28,21 +28,21 @@ class AsyncDownloader(object):
28
28
  uploader = None
29
29
  workers_count = 0
30
30
  auth_event = multiprocessing.Event()
31
+ manager = None
31
32
  acc_selector = None
32
33
  scheduler = None
33
34
 
34
35
  def __init__(self, uploader: AsyncUploader, workers_count: int) -> None:
35
- self.allow_loop = multiprocessing.Value('i', 1)
36
+ self.manager = multiprocessing.Manager()
37
+ self.allow_loop = self.manager.Value('i', 1)
38
+ self.acc_selector = AccountSelector(self.manager, ACC_FILE)
36
39
  self.uploader = uploader
37
40
  self.workers_count = workers_count
38
- AccountSelector.register('AccoutSelector', AccountSelector)
39
41
 
40
42
  def __del__(self) -> None:
41
43
  self.stop_all()
42
44
 
43
45
  def start(self) -> None:
44
- self.acc_selector = AccountSelector(ACC_FILE)
45
- self.acc_selector.start()
46
46
  for _ in range(self.workers_count):
47
47
  proc = multiprocessing.Process(target=self.do_work, args=(self.acc_selector,))
48
48
  self.workers.append(proc)
@@ -74,7 +74,7 @@ class AsyncDownloader(object):
74
74
  if job.account_switches > self.acc_selector.count_service_accounts(job.job_origin):
75
75
  raise AllAccountsFailed("All config accounts failed!")
76
76
  if report_error:
77
- selector.bump_acc_fail("rate_limits")
77
+ selector.bump_acc_fail(report_error)
78
78
  selector.next()
79
79
  cur_acc = selector.get_current()
80
80
  logging.info("Current account: '%s'", str(cur_acc))
@@ -339,7 +339,7 @@ class AsyncDownloader(object):
339
339
  #proc.terminate()
340
340
  logging.info("process #%d stopped", proc.pid)
341
341
  self.workers.clear()
342
- self.acc_selector.shutdown()
342
+ self.manager.shutdown()
343
343
 
344
344
  def queue_task(self, job: DownloadJob) -> str:
345
345
  self.job_queue.put_nowait(job)
@@ -1,25 +1,29 @@
1
+ import multiprocessing.managers
1
2
  import os
2
3
  import json
3
4
  import re
4
5
 
6
+ import multiprocessing
5
7
  from itertools import cycle
6
8
 
7
- from multiprocessing.managers import BaseManager
8
-
9
9
  from warp_beacon.jobs import Origin
10
10
 
11
11
  import logging
12
12
 
13
- class AccountSelector(BaseManager):
13
+ class AccountSelector(object):
14
14
  accounts = []
15
15
  acc_pool = None
16
16
  current = None
17
17
  current_module_name = None
18
- index = 0
19
- accounts_meta_data = {}
18
+ index = None
19
+ accounts_meta_data = None
20
20
  session_dir = "/var/warp_beacon"
21
+ manager = None
21
22
 
22
- def __init__(self, acc_file_path: str) -> None:
23
+ def __init__(self, manager: multiprocessing.managers.SyncManager, acc_file_path: str) -> None:
24
+ self.manager = manager
25
+ self.index = self.manager.Value('i', 0)
26
+ self.accounts_meta_data = self.manager.dict()
23
27
  if os.path.exists(acc_file_path):
24
28
  with open(acc_file_path, 'r', encoding="utf-8") as f:
25
29
  self.accounts = json.loads(f.read())
@@ -28,8 +32,6 @@ class AccountSelector(BaseManager):
28
32
  self.load_yt_sessions()
29
33
  else:
30
34
  raise ValueError("Accounts file not found")
31
-
32
- super().__init__()
33
35
 
34
36
  def __del__(self) -> None:
35
37
  pass
@@ -61,26 +63,26 @@ class AccountSelector(BaseManager):
61
63
  self.current_module_name = module_name
62
64
  self.acc_pool = cycle(self.accounts[module_name])
63
65
  self.current = next(self.acc_pool)
64
- self.index = self.accounts[module_name].index(self.current)
66
+ self.index.value = self.accounts[module_name].index(self.current)
65
67
 
66
68
  def next(self) -> dict:
67
69
  self.current = next(self.acc_pool)
68
- self.index = self.accounts[self.current_module_name].index(self.current)
69
- logging.info("Next account index is '%d'", self.index)
70
+ self.index.value = self.accounts[self.current_module_name].index(self.current)
71
+ logging.info("Next account index is '%d'", self.index.value)
70
72
  return self.current
71
73
 
72
74
  def bump_acc_fail(self, key: str, amount: int = 1) -> int:
73
- self.accounts_meta_data[self.index][key] += amount
74
- return self.accounts_meta_data[self.index][key]
75
+ self.accounts_meta_data[self.index.value][key] += amount
76
+ return self.accounts_meta_data[self.index.value][key]
75
77
 
76
78
  def how_much(self, key: str) -> int:
77
- return self.accounts_meta_data[self.current_module_name][self.index][key]
79
+ return self.accounts_meta_data[self.current_module_name][self.index.value][key]
78
80
 
79
81
  def get_current(self) -> tuple:
80
- return (self.index, self.current)
82
+ return (self.index.value, self.current)
81
83
 
82
84
  def get_meta_data(self) -> dict:
83
- return self.accounts_meta_data[self.current_module_name][self.index]
85
+ return self.accounts_meta_data[self.current_module_name][self.index.value]
84
86
 
85
87
  def count_service_accounts(self, mod_name: Origin) -> int:
86
88
  module_name = 'youtube' if next((s for s in ("yt", "youtube", "youtu_be") if s in mod_name.value), None) else 'instagram'
@@ -119,7 +119,7 @@ class YoutubeAbstract(ScraperAbstract):
119
119
 
120
120
  if aspect_ratio_height > 4:
121
121
  image = image.resize((image.size[0], image.size[1]+new_image.size[1]))
122
- height += new_image.size[1] - 20
122
+ height += new_image.size[1] - 10
123
123
 
124
124
  paste_position = ((target_width - width) // 2, (target_height - height) // 2)
125
125
  new_image.paste(image, paste_position)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.2.20
3
+ Version: 2.2.22
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.2.20"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes