plexflow 0.0.75__py3-none-any.whl → 0.0.76__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.
@@ -9,3 +9,4 @@ from plexflow.core.context.partials.tgx_batch import TgxBatch
9
9
  from plexflow.core.context.partials.reports import TorrentAnalysisReports
10
10
  from plexflow.core.context.partials.subtitles import Subtitles
11
11
  from plexflow.core.context.partials.universal_torrents import UniversalTorrents
12
+ from plexflow.core.context.partials.candidates import Candidates
@@ -0,0 +1,15 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from plexflow.core.downloads.candidates.download_candidate import DownloadCandidate
3
+ from typing import List
4
+
5
+ class Candidates(PartialContext):
6
+ def __init__(self, **kwargs) -> None:
7
+ super().__init__(**kwargs)
8
+
9
+ def all(self) -> List[DownloadCandidate]:
10
+ return self.get("download/candidates")
11
+
12
+ def update(self, candidates: List[DownloadCandidate]):
13
+ if len(candidates) == 0:
14
+ return
15
+ self.set("download/candidates", candidates)
@@ -1,6 +1,7 @@
1
1
  from plexflow.core.subtitles.providers.oss.utils.responses import Subtitle
2
2
  from datetime import datetime
3
3
  from plexflow.utils.imdb.imdb_codes import IMDbCode
4
+ import PTN
4
5
 
5
6
  class OSSSubtitle(Subtitle):
6
7
  def __init__(self, subtitle: Subtitle):
@@ -10,7 +11,11 @@ class OSSSubtitle(Subtitle):
10
11
  @property
11
12
  def release_name(self) -> str:
12
13
  return self.subtitle.release
13
-
14
+
15
+ @property
16
+ def parsed_release_name(self) -> str:
17
+ return PTN.parse(self.release_name)
18
+
14
19
  @property
15
20
  def uploader(self) -> str:
16
21
  return self.subtitle.uploader_name
@@ -84,6 +84,7 @@ class OpenSubtitlesManager:
84
84
  Returns:
85
85
  OpenSubtitlesManager: The created instance of the OpenSubtitlesManager class.
86
86
  """
87
+ print("YAML:", yaml_file)
87
88
  with open(yaml_file, 'r') as file:
88
89
  credentials = yaml.safe_load(file)
89
90
  return cls(credentials=credentials, r=r, **kwargs)
@@ -185,7 +185,22 @@ class UniversalTorrent:
185
185
  Returns:
186
186
  bool: True if the universal torrent is compatible with the subtitle, False otherwise.
187
187
  """
188
- return any(s.release_name.lower().strip() == t.release_name.lower().strip() or s.parsed_release_name[''] == t.encoder_name for t in self.torrents)
188
+ torrent_parsed_release_names = [t.parsed_release_name for t in self.torrents]
189
+ subtitle_parsed_release_name = s.parsed_release_name
190
+
191
+ if any(s.release_name.lower().strip() == t.release_name.lower().strip() for t in self.torrents):
192
+ return True
193
+ elif any(subtitle_parsed_release_name.get('encoder', 'NO_ENCODER_SUBTITLE').strip().lower() == parsed_release_name.get('encoder', 'NO_ENCODER_TORRENT').strip().lower() for parsed_release_name in torrent_parsed_release_names):
194
+ return True
195
+ elif any((subtitle_parsed_release_name.get('encoder', 'NO_ENCODER_SUBTITLE').strip().lower() in parsed_release_name.get('encoder', 'NO_ENCODER_TORRENT').strip().lower()
196
+ or parsed_release_name.get('encoder', 'NO_ENCODER_TORRENT').strip().lower() in subtitle_parsed_release_name.get('encoder', 'NO_ENCODER_SUBTITLE').strip().lower())
197
+ for parsed_release_name in torrent_parsed_release_names):
198
+ return True
199
+ # check for YTS
200
+ elif 'yts' in s.release_name.strip().lower() and any('yts' in t.release_name.lower().strip() for t in self.torrents):
201
+ return True
202
+
203
+ return False
189
204
 
190
205
  def __eq__(self, other):
191
206
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: plexflow
3
- Version: 0.0.75
3
+ Version: 0.0.76
4
4
  Summary: A short description of the package.
5
5
  License: MIT
6
6
  Keywords: keyword1,keyword2,keyword3
@@ -20,11 +20,12 @@ plexflow/core/context/metadata/tmdb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
20
20
  plexflow/core/context/metadata/tmdb/__pycache__/context.cpython-311.pyc,sha256=dcvTi-0PnZfbLfsLu5QuX_jpAeQYmZR7ZbjzQMHQov4,2627
21
21
  plexflow/core/context/metadata/tmdb/context.py,sha256=zlI_Zs_1bAdR60xtl4j2_UBhIery1VcsQz2a53l5g20,1521
22
22
  plexflow/core/context/partial_context.py,sha256=Ptad0ZLRgE0FPIJlYzPIGCtrOlxU1mJzScaXzENlgY8,2010
23
- plexflow/core/context/partials/__init__.py,sha256=QuEI9UwFrymP0LWtU2GKoign3HdkUpoC9HBEA2MvfCo,699
23
+ plexflow/core/context/partials/__init__.py,sha256=oLSaTaAGejMIB1DtBg8xaXUbA3qK43zv48-k0HWxhjI,764
24
24
  plexflow/core/context/partials/__pycache__/__init__.cpython-311.pyc,sha256=x_5HUdt-0vrq9LMmc8Vj0usxqQ_ZHD4WZd4HrvhwAZc,346
25
25
  plexflow/core/context/partials/__pycache__/ids.cpython-311.pyc,sha256=wV7r4FAwonAshns-NGcowqGamtrM_Q_2NbiHQhOLkjg,2638
26
26
  plexflow/core/context/partials/__pycache__/watchlist.cpython-311.pyc,sha256=k-0BM-AvH-zObpwY0XR8CYrT21kPEa0fmeBmf0wscE0,1466
27
27
  plexflow/core/context/partials/cache.py,sha256=1QQ6yP69wqJiacuc2idhHsXpyUUCqavqgLk25wQB_tI,508
28
+ plexflow/core/context/partials/candidates.py,sha256=0YiMUxITmJ9c37EtlLua9E5ghqrHH2lIPFyVFIcJ15s,543
28
29
  plexflow/core/context/partials/context.py,sha256=pFzpAFxwCJdqPuhXJqhs6j4Xyvf0GQtzPRMmL4fcjEA,314
29
30
  plexflow/core/context/partials/ids.py,sha256=QoQ6FbX1OIWrE-iuz-G6kSzBlTt1_I1jyfl2JgKge2o,913
30
31
  plexflow/core/context/partials/movie.py,sha256=VXQ2SspFgGSRgDefg4VlHrH2fns3KRuKlU72ps6527o,3861
@@ -59,7 +60,11 @@ plexflow/core/context/watchlist/__pycache__/__init__.cpython-311.pyc,sha256=iwUR
59
60
  plexflow/core/context/watchlist/__pycache__/context.cpython-311.pyc,sha256=NbmRe6tzqI4BljIUesvFYaMUfYdXkVHz68SwAQCBtxg,2640
60
61
  plexflow/core/context/watchlist/context.py,sha256=_JKr1tddYLD6gemKelj_LB5t-pev_6SUIaQnl1tPX8c,1548
61
62
  plexflow/core/downloads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ plexflow/core/downloads/__pycache__/__init__.cpython-312.pyc,sha256=zUMxgNLYel7bBvNKnVb_QBn5GPVNLTKQn2do3Ra5gEU,159
62
64
  plexflow/core/downloads/candidates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ plexflow/core/downloads/candidates/__pycache__/__init__.cpython-312.pyc,sha256=kt2qFZ_JTsQjlaiDAeQN7-TwVB4oXGVLUGCC5ataZ8Y,170
66
+ plexflow/core/downloads/candidates/__pycache__/download_candidate.cpython-312.pyc,sha256=SG09qzDMYM-bFFkLxU-S3nynDzI6Bxn5xBfpE_rZ-Hw,9142
67
+ plexflow/core/downloads/candidates/__pycache__/utils.cpython-312.pyc,sha256=Jwoj7R4TFzjoXc3uq_Wps3WitzFE9K_miKp9XuT_l8Y,2079
63
68
  plexflow/core/downloads/candidates/download_candidate.py,sha256=KlW4GhAbp2hhDuoAphuFj3uweJE4LjwRvUNe-R7h-es,5819
64
69
  plexflow/core/downloads/candidates/filtered.py,sha256=HgUY0S3aWAeHASHTjND9hyjCtGNLhUzLOL90G2CDxKg,1842
65
70
  plexflow/core/downloads/candidates/utils.py,sha256=ahI6bvk7CHT_O0BEXsd7FtC180Swlt9Phj6_op1mhYA,1777
@@ -303,29 +308,29 @@ plexflow/core/subtitles/providers/__pycache__/__init__.cpython-311.pyc,sha256=2z
303
308
  plexflow/core/subtitles/providers/__pycache__/__init__.cpython-312.pyc,sha256=gp9rHSu09WohhuFlVII26NTnqB9maGtEsjc8rKQ7pvo,171
304
309
  plexflow/core/subtitles/providers/__pycache__/auto_subtiltes.cpython-311.pyc,sha256=Coddhp2j6Ay3oA1H5qQEHbn1qqpBLrHaINC8K-TaZqI,3857
305
310
  plexflow/core/subtitles/providers/__pycache__/auto_subtitles.cpython-311.pyc,sha256=BEiGR-WcFPy0Lp4bgA8ykjs081bpT5m0L3sqy6Kqfdg,3893
306
- plexflow/core/subtitles/providers/__pycache__/auto_subtitles.cpython-312.pyc,sha256=JqzDzkfmfCe_2Oa_XKWtvGAb7s2QbYP3ExS0xQGXB6c,3463
311
+ plexflow/core/subtitles/providers/__pycache__/auto_subtitles.cpython-312.pyc,sha256=_hAilgddUB2JPMtU6TREs9hACj_F-MgcVfMKtK65BUU,3463
307
312
  plexflow/core/subtitles/providers/auto_subtitles.py,sha256=lq7pEBBkrrkVjieB7uPs89v-SDlrOGbMhUzkA0pzii0,2200
308
313
  plexflow/core/subtitles/providers/oss/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
314
  plexflow/core/subtitles/providers/oss/__pycache__/__init__.cpython-311.pyc,sha256=fisyzWOS6ZR67F7A-k7WEaapRbm2h0mapOixVKgavqs,187
310
315
  plexflow/core/subtitles/providers/oss/__pycache__/__init__.cpython-312.pyc,sha256=H2fhQnTvVsfRSfrDSReYATGTisbG-QEA6P-AHi8y-1U,175
311
316
  plexflow/core/subtitles/providers/oss/__pycache__/datatypes.cpython-311.pyc,sha256=wCE0qHCaISXvsiDdrakvfbW8_Fww3JeG8ep2wmfwgQ4,8771
312
317
  plexflow/core/subtitles/providers/oss/__pycache__/download.cpython-311.pyc,sha256=qyfLK7z1Yb0r5aM8KvPLeu0P1hflX5zqHEvfLtmF_hw,3733
313
- plexflow/core/subtitles/providers/oss/__pycache__/download.cpython-312.pyc,sha256=AJ3vVJBQKuvE0xI9CrhwXDyKm2bG-gfZWNbWfn9PWgg,3307
318
+ plexflow/core/subtitles/providers/oss/__pycache__/download.cpython-312.pyc,sha256=sG-imk-qM-JFhKtphS0tLPTACdBhw7atgFiKmunkkAE,3380
314
319
  plexflow/core/subtitles/providers/oss/__pycache__/oss.cpython-311.pyc,sha256=tbcGIfaslOGnfjwoko8TSKIGRRO4sM86Gbmy7OG9occ,21609
315
320
  plexflow/core/subtitles/providers/oss/__pycache__/oss.cpython-312.pyc,sha256=UXRE-8qiUAEkB55aYFtWb7WL8jHXozdIDGHZWkyQKRM,19694
316
321
  plexflow/core/subtitles/providers/oss/__pycache__/oss_subtitle.cpython-311.pyc,sha256=IfUEII4Khd7b4vs1Ag73irbmoulk1f9uKOX9xI0vtlo,2396
317
- plexflow/core/subtitles/providers/oss/__pycache__/oss_subtitle.cpython-312.pyc,sha256=0PePMgbDM2KZPA7JUib_JjKtDziyICdBDU6xBc09Lz8,2287
322
+ plexflow/core/subtitles/providers/oss/__pycache__/oss_subtitle.cpython-312.pyc,sha256=VBhKFDlVJlfe_Hn0J44d73WGoJjNXUhYvWCz1O1_Mx0,2576
318
323
  plexflow/core/subtitles/providers/oss/__pycache__/search.cpython-311.pyc,sha256=Hb6ZX9B0wjeOvOMNaw-eZnPBITsINQ3Cs8cYebq-dKs,3038
319
324
  plexflow/core/subtitles/providers/oss/__pycache__/search.cpython-312.pyc,sha256=nSqaXHXI1Fe9mncp492AhLr444SMze-6QrZkdz94wr8,2662
320
325
  plexflow/core/subtitles/providers/oss/__pycache__/unlimited_oss.cpython-311.pyc,sha256=OUvBlMRcl1mDpT9UnhZl9g9YZgfJj5Y8Gff2oIto1V8,12587
321
- plexflow/core/subtitles/providers/oss/__pycache__/unlimited_oss.cpython-312.pyc,sha256=Z4akT251BicN1_OsJ8VWq-7b5EoPyHL-JfalKVEi0xA,11705
326
+ plexflow/core/subtitles/providers/oss/__pycache__/unlimited_oss.cpython-312.pyc,sha256=UUbEBl2ixwwSvXoDaG5kfo8Um-I58o10GHZHP6eCNGE,11756
322
327
  plexflow/core/subtitles/providers/oss/datatypes.py,sha256=7YvjS8a3riEJ4yqLKzTRv5g6vftcrcoYKGcBoq0MCLo,3620
323
328
  plexflow/core/subtitles/providers/oss/download.py,sha256=xEnmslFQnHhk8gDw35ePDGF-MZo47UUvivpHFhCzhsM,2121
324
329
  plexflow/core/subtitles/providers/oss/old.py,sha256=IoZ7iIRs3FoxxJgzGrgMGNJpVXqZ3aAaadjKJJ3Lw0o,5566
325
330
  plexflow/core/subtitles/providers/oss/oss.py,sha256=m0UGVMs50-et8_RfYCOOJXPDRabBZOW8UyLiPeq83AQ,15921
326
- plexflow/core/subtitles/providers/oss/oss_subtitle.py,sha256=SuFv90Z_KUELHnAm85SpZNsH0tXKJMMgFKODYgjDmzc,879
331
+ plexflow/core/subtitles/providers/oss/oss_subtitle.py,sha256=HTsOUxBxFtqF4Ds-C7ZSOTTcypvK26Hpibsh0UMOjoM,987
327
332
  plexflow/core/subtitles/providers/oss/search.py,sha256=VKMVgaZ67Juxlvf7IRqpo1QYKVKAaJg8Zhj-NQhjoy0,1865
328
- plexflow/core/subtitles/providers/oss/unlimited_oss.py,sha256=7PN6N5-1Pc9TNQqmnIPX5Q9ZQhEAnRTrO2ExlE2xOWc,9562
333
+ plexflow/core/subtitles/providers/oss/unlimited_oss.py,sha256=6ysiAElC4nuiqNJY233Kgd172RVm3584ReXrPd6Wtz4,9596
329
334
  plexflow/core/subtitles/providers/oss/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
330
335
  plexflow/core/subtitles/providers/oss/utils/__pycache__/__init__.cpython-311.pyc,sha256=nBHOv53UkuFjaPU3Zih_W5tvdRYEmZOeySSrsa3qsGo,193
331
336
  plexflow/core/subtitles/providers/oss/utils/__pycache__/__init__.cpython-312.pyc,sha256=nWQpxGf6NgdB_p8RS6e0DO4jYZ9h8xjAc8GGiJUs8wk,181
@@ -340,7 +345,7 @@ plexflow/core/subtitles/providers/oss/utils/__pycache__/file_utils.cpython-312.p
340
345
  plexflow/core/subtitles/providers/oss/utils/__pycache__/languages.cpython-311.pyc,sha256=0k4-Lqv1r5D3ZNxeo-xGbyLLFM_ZRvDheuO-WZtnP_s,2788
341
346
  plexflow/core/subtitles/providers/oss/utils/__pycache__/languages.cpython-312.pyc,sha256=rY8WBgZ40MSUZvvoFMsVm5aZcB64UGWXtlu5ZCKUGvc,2734
342
347
  plexflow/core/subtitles/providers/oss/utils/__pycache__/response_base.cpython-311.pyc,sha256=Xf9Lx6enEAsRsU1tBeNyR7E-TVJimX9C0V5qNYjJsL8,11167
343
- plexflow/core/subtitles/providers/oss/utils/__pycache__/response_base.cpython-312.pyc,sha256=nmd6BPGFRcn5qowE2VzZ7mHxiE3wedijDRKxzU-jUyU,10003
348
+ plexflow/core/subtitles/providers/oss/utils/__pycache__/response_base.cpython-312.pyc,sha256=FU7rAhL1o_uO3ipIAnZxcg9Tq3u86Tr18IUY6wQbb5w,9992
344
349
  plexflow/core/subtitles/providers/oss/utils/__pycache__/responses.cpython-311.pyc,sha256=I1CDautiTgrgGU-SdCxemjszBHhq85lxIMVBdfOOUDs,14585
345
350
  plexflow/core/subtitles/providers/oss/utils/__pycache__/responses.cpython-312.pyc,sha256=9dCyif_w_KUPIfjlysUfQ4WIZwoYwVTxMasfqXSBhKU,12499
346
351
  plexflow/core/subtitles/providers/oss/utils/__pycache__/srt.cpython-311.pyc,sha256=bp8nzSZkZ_751NHl6wiT5wFTO9R-WaZkaqHmON9FfXY,23929
@@ -494,10 +499,10 @@ plexflow/core/torrents/results/__pycache__/__init__.cpython-311.pyc,sha256=FJHx4
494
499
  plexflow/core/torrents/results/__pycache__/__init__.cpython-312.pyc,sha256=ZUXrXdVtbKDOsGXTY2h9h1GTk4atgBsFSsm-ffcVUUc,168
495
500
  plexflow/core/torrents/results/__pycache__/torrent.cpython-311.pyc,sha256=SxfylbSxF9gpzXvNey4Fv9XdKLjwm0a0LYlGFhg7zAY,7655
496
501
  plexflow/core/torrents/results/__pycache__/torrent.cpython-312.pyc,sha256=6-XcS5D4UMNkJEJ-tNn8DwSROZcLYA_jm3pR8Eu-hbY,7420
497
- plexflow/core/torrents/results/__pycache__/universal.cpython-312.pyc,sha256=Sbvn5JyDCDU58AL_5xUqJ6PDnyilRU3ImVTPz910l8Q,12053
502
+ plexflow/core/torrents/results/__pycache__/universal.cpython-312.pyc,sha256=HlAiFLzyDC-7NpW1Nyzj6HPdAefkUTBgUtiMIg6QKWg,14162
498
503
  plexflow/core/torrents/results/__pycache__/utils.cpython-312.pyc,sha256=vqEt3jQLzZ-K_E9WV0kKz4K79AScvcg2xyOUTlAcu70,1136
499
504
  plexflow/core/torrents/results/torrent.py,sha256=xsFFOG8Wh5YslQ4d5lhrhi2I5LHGBTCdC30CU06GAKs,4770
500
- plexflow/core/torrents/results/universal.py,sha256=jZDk4ahi7cgUfc1kW3SN4nHDQE3FezcvvxRRkYTAyXg,6670
505
+ plexflow/core/torrents/results/universal.py,sha256=ycprOMT1Px8IthmB82YhmnxeNt7P3GAcrOlEkpKoaQk,7706
501
506
  plexflow/core/torrents/results/utils.py,sha256=abiiO_QQYDpA5aMyO8WFPxnGu5sL5xfACezE5bwrnJU,691
502
507
  plexflow/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
503
508
  plexflow/events/download/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -649,7 +654,7 @@ plexflow/utils/video/__pycache__/audio.cpython-312.pyc,sha256=vXBnJwWgTDFdixMBs-
649
654
  plexflow/utils/video/__pycache__/subtitle.cpython-312.pyc,sha256=PCjpCLydGXaRsQy6cikhgsEs8WlComfOoYPiLFqfVMA,2515
650
655
  plexflow/utils/video/audio.py,sha256=tJ_lNwcjVuBQYD5cYOlXpr__eh8-hnReIgNRgIYOpqo,3380
651
656
  plexflow/utils/video/subtitle.py,sha256=LOGONGxs_RzmqtGP-DBKreOzS1eUFEKo75Q6AfnavW0,1290
652
- plexflow-0.0.75.dist-info/METADATA,sha256=L6gTk_qUSmG7YMo0XNnBm5rEU-mgMRAXhjtqOpuMWSo,2954
653
- plexflow-0.0.75.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
654
- plexflow-0.0.75.dist-info/entry_points.txt,sha256=A-_w_iUmjrSgDtOcX-G5H3NboAAZNzwiFoQbBf4bVjg,1302
655
- plexflow-0.0.75.dist-info/RECORD,,
657
+ plexflow-0.0.76.dist-info/METADATA,sha256=QEa4LdqmRplb7pYygd90qT3FkIIoq0vZDhdQI1D-X-w,2954
658
+ plexflow-0.0.76.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
659
+ plexflow-0.0.76.dist-info/entry_points.txt,sha256=aEqDHlozu_zjWrl2sibtrqtQHMgU8kSJZrE782CP47g,1362
660
+ plexflow-0.0.76.dist-info/RECORD,,
@@ -1,6 +1,7 @@
1
1
  [console_scripts]
2
2
  audio_extract=scripts.video.audio_extract:main
3
3
  auto_torrents=scripts.torrents.auto_torrents:main
4
+ candidate_matching=scripts.torrents.candidate_matching:main
4
5
  chat_with_plexa=scripts.plex.discover.chat_with_plexa:main
5
6
  download_subtitles=scripts.subtitles.download_subtitles:main
6
7
  find_torrents=scripts.torrents.find_torrents:main