plexflow 0.0.64__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 (634) hide show
  1. plexflow-0.0.64/PKG-INFO +71 -0
  2. plexflow-0.0.64/plexflow/__init__.py +0 -0
  3. plexflow-0.0.64/plexflow/__main__.py +15 -0
  4. plexflow-0.0.64/plexflow/core/.DS_Store +0 -0
  5. plexflow-0.0.64/plexflow/core/__init__.py +0 -0
  6. plexflow-0.0.64/plexflow/core/__pycache__/__init__.cpython-311.pyc +0 -0
  7. plexflow-0.0.64/plexflow/core/__pycache__/__init__.cpython-312.pyc +0 -0
  8. plexflow-0.0.64/plexflow/core/context/__init__.py +0 -0
  9. plexflow-0.0.64/plexflow/core/context/__pycache__/__init__.cpython-311.pyc +0 -0
  10. plexflow-0.0.64/plexflow/core/context/__pycache__/__init__.cpython-312.pyc +0 -0
  11. plexflow-0.0.64/plexflow/core/context/__pycache__/context.cpython-311.pyc +0 -0
  12. plexflow-0.0.64/plexflow/core/context/__pycache__/partial_context.cpython-311.pyc +0 -0
  13. plexflow-0.0.64/plexflow/core/context/__pycache__/partial_context.cpython-312.pyc +0 -0
  14. plexflow-0.0.64/plexflow/core/context/__pycache__/plexflow_context.cpython-311.pyc +0 -0
  15. plexflow-0.0.64/plexflow/core/context/__pycache__/plexflow_property.cpython-311.pyc +0 -0
  16. plexflow-0.0.64/plexflow/core/context/metadata/__init__.py +0 -0
  17. plexflow-0.0.64/plexflow/core/context/metadata/__pycache__/__init__.cpython-311.pyc +0 -0
  18. plexflow-0.0.64/plexflow/core/context/metadata/__pycache__/context.cpython-311.pyc +0 -0
  19. plexflow-0.0.64/plexflow/core/context/metadata/context.py +32 -0
  20. plexflow-0.0.64/plexflow/core/context/metadata/tmdb/__init__.py +0 -0
  21. plexflow-0.0.64/plexflow/core/context/metadata/tmdb/__pycache__/context.cpython-311.pyc +0 -0
  22. plexflow-0.0.64/plexflow/core/context/metadata/tmdb/context.py +45 -0
  23. plexflow-0.0.64/plexflow/core/context/partial_context.py +46 -0
  24. plexflow-0.0.64/plexflow/core/context/partials/__init__.py +8 -0
  25. plexflow-0.0.64/plexflow/core/context/partials/__pycache__/__init__.cpython-311.pyc +0 -0
  26. plexflow-0.0.64/plexflow/core/context/partials/__pycache__/ids.cpython-311.pyc +0 -0
  27. plexflow-0.0.64/plexflow/core/context/partials/__pycache__/watchlist.cpython-311.pyc +0 -0
  28. plexflow-0.0.64/plexflow/core/context/partials/cache.py +16 -0
  29. plexflow-0.0.64/plexflow/core/context/partials/context.py +12 -0
  30. plexflow-0.0.64/plexflow/core/context/partials/ids.py +37 -0
  31. plexflow-0.0.64/plexflow/core/context/partials/movie.py +115 -0
  32. plexflow-0.0.64/plexflow/core/context/partials/tgx_batch.py +33 -0
  33. plexflow-0.0.64/plexflow/core/context/partials/tgx_context.py +34 -0
  34. plexflow-0.0.64/plexflow/core/context/partials/torrents.py +23 -0
  35. plexflow-0.0.64/plexflow/core/context/partials/watchlist.py +35 -0
  36. plexflow-0.0.64/plexflow/core/context/plexflow_context.py +29 -0
  37. plexflow-0.0.64/plexflow/core/context/plexflow_property.py +36 -0
  38. plexflow-0.0.64/plexflow/core/context/root/__init__.py +0 -0
  39. plexflow-0.0.64/plexflow/core/context/root/__pycache__/context.cpython-311.pyc +0 -0
  40. plexflow-0.0.64/plexflow/core/context/root/context.py +25 -0
  41. plexflow-0.0.64/plexflow/core/context/select/__init__.py +0 -0
  42. plexflow-0.0.64/plexflow/core/context/select/__pycache__/__init__.cpython-311.pyc +0 -0
  43. plexflow-0.0.64/plexflow/core/context/select/__pycache__/context.cpython-311.pyc +0 -0
  44. plexflow-0.0.64/plexflow/core/context/select/context.py +45 -0
  45. plexflow-0.0.64/plexflow/core/context/torrent/__init__.py +0 -0
  46. plexflow-0.0.64/plexflow/core/context/torrent/__pycache__/__init__.cpython-311.pyc +0 -0
  47. plexflow-0.0.64/plexflow/core/context/torrent/__pycache__/context.cpython-311.pyc +0 -0
  48. plexflow-0.0.64/plexflow/core/context/torrent/context.py +43 -0
  49. plexflow-0.0.64/plexflow/core/context/torrent/tpb/__init__.py +0 -0
  50. plexflow-0.0.64/plexflow/core/context/torrent/tpb/__pycache__/context.cpython-311.pyc +0 -0
  51. plexflow-0.0.64/plexflow/core/context/torrent/tpb/context.py +45 -0
  52. plexflow-0.0.64/plexflow/core/context/torrent/yts/__init__.py +0 -0
  53. plexflow-0.0.64/plexflow/core/context/torrent/yts/__pycache__/context.cpython-311.pyc +0 -0
  54. plexflow-0.0.64/plexflow/core/context/torrent/yts/context.py +45 -0
  55. plexflow-0.0.64/plexflow/core/context/watchlist/__init__.py +0 -0
  56. plexflow-0.0.64/plexflow/core/context/watchlist/__pycache__/__init__.cpython-311.pyc +0 -0
  57. plexflow-0.0.64/plexflow/core/context/watchlist/__pycache__/context.cpython-311.pyc +0 -0
  58. plexflow-0.0.64/plexflow/core/context/watchlist/context.py +46 -0
  59. plexflow-0.0.64/plexflow/core/downloads/__init__.py +0 -0
  60. plexflow-0.0.64/plexflow/core/downloads/candidates/__init__.py +0 -0
  61. plexflow-0.0.64/plexflow/core/downloads/candidates/download_candidate.py +210 -0
  62. plexflow-0.0.64/plexflow/core/downloads/candidates/filtered.py +51 -0
  63. plexflow-0.0.64/plexflow/core/downloads/candidates/utils.py +39 -0
  64. plexflow-0.0.64/plexflow/core/env/__init__.py +0 -0
  65. plexflow-0.0.64/plexflow/core/env/env.py +31 -0
  66. plexflow-0.0.64/plexflow/core/genai/__init__.py +0 -0
  67. plexflow-0.0.64/plexflow/core/genai/__pycache__/__init__.cpython-311.pyc +0 -0
  68. plexflow-0.0.64/plexflow/core/genai/__pycache__/bot.cpython-311.pyc +0 -0
  69. plexflow-0.0.64/plexflow/core/genai/__pycache__/plexa.cpython-311.pyc +0 -0
  70. plexflow-0.0.64/plexflow/core/genai/bot.py +9 -0
  71. plexflow-0.0.64/plexflow/core/genai/plexa.py +54 -0
  72. plexflow-0.0.64/plexflow/core/genai/torrent/__pycache__/imdb_verify.cpython-311.pyc +0 -0
  73. plexflow-0.0.64/plexflow/core/genai/torrent/__pycache__/movie.cpython-311.pyc +0 -0
  74. plexflow-0.0.64/plexflow/core/genai/torrent/imdb_verify.py +65 -0
  75. plexflow-0.0.64/plexflow/core/genai/torrent/movie.py +25 -0
  76. plexflow-0.0.64/plexflow/core/genai/utils/__init__.py +0 -0
  77. plexflow-0.0.64/plexflow/core/genai/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  78. plexflow-0.0.64/plexflow/core/genai/utils/__pycache__/loader.cpython-311.pyc +0 -0
  79. plexflow-0.0.64/plexflow/core/genai/utils/loader.py +5 -0
  80. plexflow-0.0.64/plexflow/core/metadata/__init__.py +0 -0
  81. plexflow-0.0.64/plexflow/core/metadata/__pycache__/__init__.cpython-311.pyc +0 -0
  82. plexflow-0.0.64/plexflow/core/metadata/__pycache__/__init__.cpython-312.pyc +0 -0
  83. plexflow-0.0.64/plexflow/core/metadata/auto/__init__.py +0 -0
  84. plexflow-0.0.64/plexflow/core/metadata/auto/__pycache__/__init__.cpython-311.pyc +0 -0
  85. plexflow-0.0.64/plexflow/core/metadata/auto/__pycache__/__init__.cpython-312.pyc +0 -0
  86. plexflow-0.0.64/plexflow/core/metadata/auto/__pycache__/auto_meta.cpython-311.pyc +0 -0
  87. plexflow-0.0.64/plexflow/core/metadata/auto/__pycache__/auto_meta.cpython-312.pyc +0 -0
  88. plexflow-0.0.64/plexflow/core/metadata/auto/auto_meta.py +40 -0
  89. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/__init__.py +0 -0
  90. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/__pycache__/__init__.cpython-311.pyc +0 -0
  91. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/__pycache__/__init__.cpython-312.pyc +0 -0
  92. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/__pycache__/tmdb.cpython-311.pyc +0 -0
  93. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__init__.py +0 -0
  94. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/__init__.cpython-311.pyc +0 -0
  95. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/__init__.cpython-312.pyc +0 -0
  96. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/episode.cpython-311.pyc +0 -0
  97. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/episode.cpython-312.pyc +0 -0
  98. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/item.cpython-311.pyc +0 -0
  99. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/item.cpython-312.pyc +0 -0
  100. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/movie.cpython-311.pyc +0 -0
  101. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/movie.cpython-312.pyc +0 -0
  102. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/season.cpython-311.pyc +0 -0
  103. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/season.cpython-312.pyc +0 -0
  104. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/show.cpython-311.pyc +0 -0
  105. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/__pycache__/show.cpython-312.pyc +0 -0
  106. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/episode.py +49 -0
  107. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/item.py +55 -0
  108. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/movie.py +13 -0
  109. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/season.py +43 -0
  110. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/auto/show.py +26 -0
  111. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__init__.py +0 -0
  112. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/__init__.cpython-311.pyc +0 -0
  113. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/__init__.cpython-312.pyc +0 -0
  114. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/episode.cpython-311.pyc +0 -0
  115. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/movie.cpython-311.pyc +0 -0
  116. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/movie.cpython-312.pyc +0 -0
  117. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/season.cpython-311.pyc +0 -0
  118. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/show.cpython-311.pyc +0 -0
  119. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/__pycache__/show.cpython-312.pyc +0 -0
  120. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/movie.py +36 -0
  121. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/imdb/show.py +45 -0
  122. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__init__.py +0 -0
  123. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/__init__.cpython-311.pyc +0 -0
  124. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/__init__.cpython-312.pyc +0 -0
  125. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/episode.cpython-311.pyc +0 -0
  126. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/movie.cpython-311.pyc +0 -0
  127. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/movie.cpython-312.pyc +0 -0
  128. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/season.cpython-311.pyc +0 -0
  129. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/__pycache__/show.cpython-311.pyc +0 -0
  130. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/moviemeter/movie.py +40 -0
  131. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__init__.py +0 -0
  132. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/__init__.cpython-311.pyc +0 -0
  133. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/__init__.cpython-312.pyc +0 -0
  134. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/episode.cpython-311.pyc +0 -0
  135. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/movie.cpython-311.pyc +0 -0
  136. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/movie.cpython-312.pyc +0 -0
  137. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/season.cpython-311.pyc +0 -0
  138. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/__pycache__/show.cpython-311.pyc +0 -0
  139. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/plex/movie.py +39 -0
  140. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__init__.py +0 -0
  141. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/__init__.cpython-311.pyc +0 -0
  142. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/__init__.cpython-312.pyc +0 -0
  143. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/episode.cpython-311.pyc +0 -0
  144. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/episode.cpython-312.pyc +0 -0
  145. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/movie.cpython-311.pyc +0 -0
  146. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/movie.cpython-312.pyc +0 -0
  147. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/season.cpython-311.pyc +0 -0
  148. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/season.cpython-312.pyc +0 -0
  149. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/show.cpython-311.pyc +0 -0
  150. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/__pycache__/show.cpython-312.pyc +0 -0
  151. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/episode.py +30 -0
  152. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/movie.py +36 -0
  153. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/season.py +23 -0
  154. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb/show.py +41 -0
  155. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tmdb.py +92 -0
  156. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__init__.py +0 -0
  157. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/__init__.cpython-311.pyc +0 -0
  158. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/__init__.cpython-312.pyc +0 -0
  159. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/episode.cpython-311.pyc +0 -0
  160. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/episode.cpython-312.pyc +0 -0
  161. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/movie.cpython-311.pyc +0 -0
  162. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/movie.cpython-312.pyc +0 -0
  163. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/season.cpython-311.pyc +0 -0
  164. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/season.cpython-312.pyc +0 -0
  165. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/show.cpython-311.pyc +0 -0
  166. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/__pycache__/show.cpython-312.pyc +0 -0
  167. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/episode.py +28 -0
  168. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/movie.py +36 -0
  169. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/season.py +25 -0
  170. plexflow-0.0.64/plexflow/core/metadata/auto/auto_providers/tvdb/show.py +41 -0
  171. plexflow-0.0.64/plexflow/core/metadata/providers/__init__.py +0 -0
  172. plexflow-0.0.64/plexflow/core/metadata/providers/__pycache__/__init__.cpython-311.pyc +0 -0
  173. plexflow-0.0.64/plexflow/core/metadata/providers/__pycache__/__init__.cpython-312.pyc +0 -0
  174. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__init__.py +0 -0
  175. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/__init__.cpython-311.pyc +0 -0
  176. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/__init__.cpython-312.pyc +0 -0
  177. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/datatypes.cpython-311.pyc +0 -0
  178. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/datatypes.cpython-312.pyc +0 -0
  179. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/imdb.cpython-311.pyc +0 -0
  180. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/imdb.cpython-312.pyc +0 -0
  181. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/__pycache__/tmdb.cpython-311.pyc +0 -0
  182. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/datatypes.py +53 -0
  183. plexflow-0.0.64/plexflow/core/metadata/providers/imdb/imdb.py +112 -0
  184. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__init__.py +0 -0
  185. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/__init__.cpython-311.pyc +0 -0
  186. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/__init__.cpython-312.pyc +0 -0
  187. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/datatypes.cpython-311.pyc +0 -0
  188. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/datatypes.cpython-312.pyc +0 -0
  189. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/imdb.cpython-311.pyc +0 -0
  190. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/moviemeter.cpython-311.pyc +0 -0
  191. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/moviemeter.cpython-312.pyc +0 -0
  192. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/__pycache__/tmdb.cpython-311.pyc +0 -0
  193. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/datatypes.py +111 -0
  194. plexflow-0.0.64/plexflow/core/metadata/providers/moviemeter/moviemeter.py +42 -0
  195. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__init__.py +0 -0
  196. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/__init__.cpython-311.pyc +0 -0
  197. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/__init__.cpython-312.pyc +0 -0
  198. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/datatypes.cpython-311.pyc +0 -0
  199. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/datatypes.cpython-312.pyc +0 -0
  200. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/imdb.cpython-311.pyc +0 -0
  201. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/moviemeter.cpython-311.pyc +0 -0
  202. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/plex.cpython-311.pyc +0 -0
  203. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/plex.cpython-312.pyc +0 -0
  204. plexflow-0.0.64/plexflow/core/metadata/providers/plex/__pycache__/tmdb.cpython-311.pyc +0 -0
  205. plexflow-0.0.64/plexflow/core/metadata/providers/plex/datatypes.py +693 -0
  206. plexflow-0.0.64/plexflow/core/metadata/providers/plex/plex.py +167 -0
  207. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__init__.py +0 -0
  208. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/__init__.cpython-311.pyc +0 -0
  209. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/__init__.cpython-312.pyc +0 -0
  210. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/datatypes.cpython-311.pyc +0 -0
  211. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/datatypes.cpython-312.pyc +0 -0
  212. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/tmdb.cpython-311.pyc +0 -0
  213. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/__pycache__/tmdb.cpython-312.pyc +0 -0
  214. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/datatypes.py +460 -0
  215. plexflow-0.0.64/plexflow/core/metadata/providers/tmdb/tmdb.py +85 -0
  216. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__init__.py +0 -0
  217. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/__init__.cpython-311.pyc +0 -0
  218. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/__init__.cpython-312.pyc +0 -0
  219. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/datatypes.cpython-311.pyc +0 -0
  220. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/datatypes.cpython-312.pyc +0 -0
  221. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/tmdb.cpython-311.pyc +0 -0
  222. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/tv_datatypes.cpython-311.pyc +0 -0
  223. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/tv_datatypes.cpython-312.pyc +0 -0
  224. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/tvdb.cpython-311.pyc +0 -0
  225. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/__pycache__/tvdb.cpython-312.pyc +0 -0
  226. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/datatypes.py +257 -0
  227. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/tv_datatypes.py +554 -0
  228. plexflow-0.0.64/plexflow/core/metadata/providers/tvdb/tvdb.py +65 -0
  229. plexflow-0.0.64/plexflow/core/metadata/providers/universal/__init__.py +0 -0
  230. plexflow-0.0.64/plexflow/core/metadata/providers/universal/__pycache__/__init__.cpython-311.pyc +0 -0
  231. plexflow-0.0.64/plexflow/core/metadata/providers/universal/__pycache__/movie.cpython-311.pyc +0 -0
  232. plexflow-0.0.64/plexflow/core/metadata/providers/universal/movie.py +130 -0
  233. plexflow-0.0.64/plexflow/core/metadata/providers/universal/old.py +192 -0
  234. plexflow-0.0.64/plexflow/core/metadata/providers/universal/show.py +107 -0
  235. plexflow-0.0.64/plexflow/core/plex/__init__.py +0 -0
  236. plexflow-0.0.64/plexflow/core/plex/__pycache__/__init__.cpython-311.pyc +0 -0
  237. plexflow-0.0.64/plexflow/core/plex/__pycache__/__init__.cpython-312.pyc +0 -0
  238. plexflow-0.0.64/plexflow/core/plex/__pycache__/library.cpython-311.pyc +0 -0
  239. plexflow-0.0.64/plexflow/core/plex/api/context/__pycache__/authorized.cpython-312.pyc +0 -0
  240. plexflow-0.0.64/plexflow/core/plex/api/context/__pycache__/discover.cpython-312.pyc +0 -0
  241. plexflow-0.0.64/plexflow/core/plex/api/context/authorized.py +15 -0
  242. plexflow-0.0.64/plexflow/core/plex/api/context/discover.py +14 -0
  243. plexflow-0.0.64/plexflow/core/plex/api/context/library.py +14 -0
  244. plexflow-0.0.64/plexflow/core/plex/discover/__init__.py +0 -0
  245. plexflow-0.0.64/plexflow/core/plex/discover/__pycache__/activity.cpython-311.pyc +0 -0
  246. plexflow-0.0.64/plexflow/core/plex/discover/__pycache__/comment.cpython-311.pyc +0 -0
  247. plexflow-0.0.64/plexflow/core/plex/discover/__pycache__/feed.cpython-311.pyc +0 -0
  248. plexflow-0.0.64/plexflow/core/plex/discover/activity.py +448 -0
  249. plexflow-0.0.64/plexflow/core/plex/discover/comment.py +89 -0
  250. plexflow-0.0.64/plexflow/core/plex/discover/feed.py +11 -0
  251. plexflow-0.0.64/plexflow/core/plex/hooks/__init__.py +0 -0
  252. plexflow-0.0.64/plexflow/core/plex/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  253. plexflow-0.0.64/plexflow/core/plex/hooks/__pycache__/__init__.cpython-312.pyc +0 -0
  254. plexflow-0.0.64/plexflow/core/plex/hooks/__pycache__/plex_authorized.cpython-311.pyc +0 -0
  255. plexflow-0.0.64/plexflow/core/plex/hooks/__pycache__/plex_authorized.cpython-312.pyc +0 -0
  256. plexflow-0.0.64/plexflow/core/plex/hooks/__pycache__/plexflow_database.cpython-311.pyc +0 -0
  257. plexflow-0.0.64/plexflow/core/plex/hooks/plex_authorized.py +60 -0
  258. plexflow-0.0.64/plexflow/core/plex/hooks/plexflow_database.py +6 -0
  259. plexflow-0.0.64/plexflow/core/plex/library/__init__.py +0 -0
  260. plexflow-0.0.64/plexflow/core/plex/library/__pycache__/__init__.cpython-311.pyc +0 -0
  261. plexflow-0.0.64/plexflow/core/plex/library/__pycache__/library.cpython-311.pyc +0 -0
  262. plexflow-0.0.64/plexflow/core/plex/library/library.py +103 -0
  263. plexflow-0.0.64/plexflow/core/plex/token/__init__.py +0 -0
  264. plexflow-0.0.64/plexflow/core/plex/token/__pycache__/__init__.cpython-311.pyc +0 -0
  265. plexflow-0.0.64/plexflow/core/plex/token/__pycache__/__init__.cpython-312.pyc +0 -0
  266. plexflow-0.0.64/plexflow/core/plex/token/__pycache__/auto_token.cpython-311.pyc +0 -0
  267. plexflow-0.0.64/plexflow/core/plex/token/__pycache__/auto_token.cpython-312.pyc +0 -0
  268. plexflow-0.0.64/plexflow/core/plex/token/auto_token.py +91 -0
  269. plexflow-0.0.64/plexflow/core/plex/utils/__init__.py +0 -0
  270. plexflow-0.0.64/plexflow/core/plex/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  271. plexflow-0.0.64/plexflow/core/plex/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  272. plexflow-0.0.64/plexflow/core/plex/utils/__pycache__/paginated.cpython-311.pyc +0 -0
  273. plexflow-0.0.64/plexflow/core/plex/utils/__pycache__/paginated.cpython-312.pyc +0 -0
  274. plexflow-0.0.64/plexflow/core/plex/utils/paginated.py +39 -0
  275. plexflow-0.0.64/plexflow/core/plex/watchlist/__init__.py +0 -0
  276. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/__init__.cpython-311.pyc +0 -0
  277. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/__init__.cpython-312.pyc +0 -0
  278. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/datatypes.cpython-311.pyc +0 -0
  279. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/datatypes.cpython-312.pyc +0 -0
  280. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/watchlist.cpython-311.pyc +0 -0
  281. plexflow-0.0.64/plexflow/core/plex/watchlist/__pycache__/watchlist.cpython-312.pyc +0 -0
  282. plexflow-0.0.64/plexflow/core/plex/watchlist/datatypes.py +124 -0
  283. plexflow-0.0.64/plexflow/core/plex/watchlist/watchlist.py +23 -0
  284. plexflow-0.0.64/plexflow/core/storage/__init__.py +0 -0
  285. plexflow-0.0.64/plexflow/core/storage/__pycache__/__init__.cpython-311.pyc +0 -0
  286. plexflow-0.0.64/plexflow/core/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  287. plexflow-0.0.64/plexflow/core/storage/object/__init__.py +0 -0
  288. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/__init__.cpython-311.pyc +0 -0
  289. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/__init__.cpython-312.pyc +0 -0
  290. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/plexflow_storage.cpython-311.pyc +0 -0
  291. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/plexflow_storage.cpython-312.pyc +0 -0
  292. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/redis_storage.cpython-311.pyc +0 -0
  293. plexflow-0.0.64/plexflow/core/storage/object/__pycache__/redis_storage.cpython-312.pyc +0 -0
  294. plexflow-0.0.64/plexflow/core/storage/object/plexflow_storage.py +143 -0
  295. plexflow-0.0.64/plexflow/core/storage/object/redis_storage.py +169 -0
  296. plexflow-0.0.64/plexflow/core/subtitles/__init__.py +0 -0
  297. plexflow-0.0.64/plexflow/core/subtitles/__pycache__/__init__.cpython-311.pyc +0 -0
  298. plexflow-0.0.64/plexflow/core/subtitles/__pycache__/__init__.cpython-312.pyc +0 -0
  299. plexflow-0.0.64/plexflow/core/subtitles/providers/__init__.py +0 -0
  300. plexflow-0.0.64/plexflow/core/subtitles/providers/__pycache__/__init__.cpython-311.pyc +0 -0
  301. plexflow-0.0.64/plexflow/core/subtitles/providers/__pycache__/__init__.cpython-312.pyc +0 -0
  302. plexflow-0.0.64/plexflow/core/subtitles/providers/__pycache__/auto_subtiltes.cpython-311.pyc +0 -0
  303. plexflow-0.0.64/plexflow/core/subtitles/providers/__pycache__/auto_subtitles.cpython-311.pyc +0 -0
  304. plexflow-0.0.64/plexflow/core/subtitles/providers/__pycache__/auto_subtitles.cpython-312.pyc +0 -0
  305. plexflow-0.0.64/plexflow/core/subtitles/providers/auto_subtitles.py +48 -0
  306. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__init__.py +0 -0
  307. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/__init__.cpython-311.pyc +0 -0
  308. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/__init__.cpython-312.pyc +0 -0
  309. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/datatypes.cpython-311.pyc +0 -0
  310. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/download.cpython-311.pyc +0 -0
  311. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/download.cpython-312.pyc +0 -0
  312. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/oss.cpython-311.pyc +0 -0
  313. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/oss.cpython-312.pyc +0 -0
  314. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/oss_subtitle.cpython-311.pyc +0 -0
  315. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/oss_subtitle.cpython-312.pyc +0 -0
  316. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/search.cpython-311.pyc +0 -0
  317. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/search.cpython-312.pyc +0 -0
  318. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/unlimited_oss.cpython-311.pyc +0 -0
  319. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/__pycache__/unlimited_oss.cpython-312.pyc +0 -0
  320. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/datatypes.py +104 -0
  321. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/download.py +48 -0
  322. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/old.py +144 -0
  323. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/oss.py +400 -0
  324. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/oss_subtitle.py +32 -0
  325. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/search.py +52 -0
  326. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/unlimited_oss.py +231 -0
  327. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__init__.py +0 -0
  328. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  329. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  330. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/config.cpython-311.pyc +0 -0
  331. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/config.cpython-312.pyc +0 -0
  332. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/download_client.cpython-311.pyc +0 -0
  333. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/download_client.cpython-312.pyc +0 -0
  334. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/exceptions.cpython-311.pyc +0 -0
  335. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/exceptions.cpython-312.pyc +0 -0
  336. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/file_utils.cpython-311.pyc +0 -0
  337. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/file_utils.cpython-312.pyc +0 -0
  338. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/languages.cpython-311.pyc +0 -0
  339. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/languages.cpython-312.pyc +0 -0
  340. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/response_base.cpython-311.pyc +0 -0
  341. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/response_base.cpython-312.pyc +0 -0
  342. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/responses.cpython-311.pyc +0 -0
  343. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/responses.cpython-312.pyc +0 -0
  344. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/srt.cpython-311.pyc +0 -0
  345. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/__pycache__/srt.cpython-312.pyc +0 -0
  346. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/config.py +63 -0
  347. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/download_client.py +22 -0
  348. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/exceptions.py +35 -0
  349. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/file_utils.py +83 -0
  350. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/languages.py +78 -0
  351. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/response_base.py +221 -0
  352. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/responses.py +176 -0
  353. plexflow-0.0.64/plexflow/core/subtitles/providers/oss/utils/srt.py +561 -0
  354. plexflow-0.0.64/plexflow/core/subtitles/results/__init__.py +0 -0
  355. plexflow-0.0.64/plexflow/core/subtitles/results/__pycache__/subtitle.cpython-311.pyc +0 -0
  356. plexflow-0.0.64/plexflow/core/subtitles/results/subtitle.py +170 -0
  357. plexflow-0.0.64/plexflow/core/torrents/__init__.py +0 -0
  358. plexflow-0.0.64/plexflow/core/torrents/__pycache__/__init__.cpython-311.pyc +0 -0
  359. plexflow-0.0.64/plexflow/core/torrents/__pycache__/__init__.cpython-312.pyc +0 -0
  360. plexflow-0.0.64/plexflow/core/torrents/analyzers/__pycache__/analyzed_torrent.cpython-312.pyc +0 -0
  361. plexflow-0.0.64/plexflow/core/torrents/analyzers/__pycache__/analyzer.cpython-312.pyc +0 -0
  362. plexflow-0.0.64/plexflow/core/torrents/analyzers/analyzed_torrent.py +143 -0
  363. plexflow-0.0.64/plexflow/core/torrents/analyzers/analyzer.py +45 -0
  364. plexflow-0.0.64/plexflow/core/torrents/analyzers/torrentquest/__pycache__/analyzer.cpython-312.pyc +0 -0
  365. plexflow-0.0.64/plexflow/core/torrents/analyzers/torrentquest/analyzer.py +47 -0
  366. plexflow-0.0.64/plexflow/core/torrents/auto/__pycache__/auto_torrents.cpython-312.pyc +0 -0
  367. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__init__.py +0 -0
  368. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/__init__.cpython-311.pyc +0 -0
  369. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/__init__.cpython-312.pyc +0 -0
  370. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/episode.cpython-311.pyc +0 -0
  371. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/episode.cpython-312.pyc +0 -0
  372. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/item.cpython-311.pyc +0 -0
  373. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/item.cpython-312.pyc +0 -0
  374. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/movie.cpython-311.pyc +0 -0
  375. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/movie.cpython-312.pyc +0 -0
  376. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/season.cpython-311.pyc +0 -0
  377. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/season.cpython-312.pyc +0 -0
  378. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/show.cpython-311.pyc +0 -0
  379. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/__pycache__/show.cpython-312.pyc +0 -0
  380. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/auto/torrent.py +64 -0
  381. plexflow-0.0.64/plexflow/core/torrents/auto/auto_providers/tpb/torrent.py +62 -0
  382. plexflow-0.0.64/plexflow/core/torrents/auto/auto_torrents.py +29 -0
  383. plexflow-0.0.64/plexflow/core/torrents/providers/__init__.py +0 -0
  384. plexflow-0.0.64/plexflow/core/torrents/providers/__pycache__/__init__.cpython-311.pyc +0 -0
  385. plexflow-0.0.64/plexflow/core/torrents/providers/__pycache__/__init__.cpython-312.pyc +0 -0
  386. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__init__.py +0 -0
  387. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-311.pyc +0 -0
  388. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-312.pyc +0 -0
  389. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/ext.cpython-312.pyc +0 -0
  390. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/extratorrent.cpython-312.pyc +0 -0
  391. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/torrentquest.cpython-312.pyc +0 -0
  392. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/tpb.cpython-311.pyc +0 -0
  393. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/tpb.cpython-312.pyc +0 -0
  394. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-311.pyc +0 -0
  395. plexflow-0.0.64/plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-312.pyc +0 -0
  396. plexflow-0.0.64/plexflow/core/torrents/providers/ext/ext.py +18 -0
  397. plexflow-0.0.64/plexflow/core/torrents/providers/ext/utils.py +64 -0
  398. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__init__.py +0 -0
  399. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-311.pyc +0 -0
  400. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-312.pyc +0 -0
  401. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/extratorrent.cpython-312.pyc +0 -0
  402. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/torrentquest.cpython-312.pyc +0 -0
  403. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/tpb.cpython-311.pyc +0 -0
  404. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/tpb.cpython-312.pyc +0 -0
  405. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-311.pyc +0 -0
  406. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-312.pyc +0 -0
  407. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/extratorrent.py +21 -0
  408. plexflow-0.0.64/plexflow/core/torrents/providers/extratorrent/utils.py +66 -0
  409. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/__init__.py +0 -0
  410. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/__pycache__/__init__.cpython-311.pyc +0 -0
  411. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/__pycache__/eztv.cpython-311.pyc +0 -0
  412. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/__pycache__/tpb.cpython-311.pyc +0 -0
  413. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/__pycache__/utils.cpython-311.pyc +0 -0
  414. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/eztv.py +47 -0
  415. plexflow-0.0.64/plexflow/core/torrents/providers/eztv/utils.py +83 -0
  416. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__init__.py +0 -0
  417. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/__init__.cpython-311.pyc +0 -0
  418. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/__init__.cpython-312.pyc +0 -0
  419. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/rarbg2.cpython-311.pyc +0 -0
  420. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/rarbg2.cpython-312.pyc +0 -0
  421. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/utils.cpython-311.pyc +0 -0
  422. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/__pycache__/utils.cpython-312.pyc +0 -0
  423. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/rarbg2.py +19 -0
  424. plexflow-0.0.64/plexflow/core/torrents/providers/rarbg2/utils.py +76 -0
  425. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__init__.py +0 -0
  426. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-311.pyc +0 -0
  427. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-312.pyc +0 -0
  428. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/snowfl.cpython-312.pyc +0 -0
  429. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/tpb.cpython-311.pyc +0 -0
  430. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-311.pyc +0 -0
  431. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-312.pyc +0 -0
  432. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/yts.cpython-311.pyc +0 -0
  433. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/__pycache__/yts.cpython-312.pyc +0 -0
  434. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/snowfl.py +36 -0
  435. plexflow-0.0.64/plexflow/core/torrents/providers/snowfl/utils.py +59 -0
  436. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__init__.py +0 -0
  437. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/__init__.cpython-311.pyc +0 -0
  438. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/__init__.cpython-312.pyc +0 -0
  439. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/context.cpython-312.pyc +0 -0
  440. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/dump.cpython-311.pyc +0 -0
  441. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/tgx.cpython-311.pyc +0 -0
  442. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/__pycache__/utils.cpython-311.pyc +0 -0
  443. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/context.py +50 -0
  444. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/dump.py +40 -0
  445. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/tgx.py +22 -0
  446. plexflow-0.0.64/plexflow/core/torrents/providers/tgx/utils.py +61 -0
  447. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__init__.py +0 -0
  448. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-311.pyc +0 -0
  449. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-312.pyc +0 -0
  450. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/extratorrent.cpython-312.pyc +0 -0
  451. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/therarbg.cpython-312.pyc +0 -0
  452. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/torrentquest.cpython-312.pyc +0 -0
  453. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/tpb.cpython-311.pyc +0 -0
  454. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/tpb.cpython-312.pyc +0 -0
  455. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-311.pyc +0 -0
  456. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-312.pyc +0 -0
  457. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/therarbg.py +17 -0
  458. plexflow-0.0.64/plexflow/core/torrents/providers/therarbg/utils.py +61 -0
  459. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__init__.py +0 -0
  460. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-311.pyc +0 -0
  461. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-312.pyc +0 -0
  462. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/torrentquest.cpython-312.pyc +0 -0
  463. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/tpb.cpython-311.pyc +0 -0
  464. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/tpb.cpython-312.pyc +0 -0
  465. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-311.pyc +0 -0
  466. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-312.pyc +0 -0
  467. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/torrentquest.py +20 -0
  468. plexflow-0.0.64/plexflow/core/torrents/providers/torrentquest/utils.py +70 -0
  469. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__init__.py +0 -0
  470. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-311.pyc +0 -0
  471. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-312.pyc +0 -0
  472. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-311.pyc +0 -0
  473. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-312.pyc +0 -0
  474. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-311.pyc +0 -0
  475. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-312.pyc +0 -0
  476. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/tpb.py +17 -0
  477. plexflow-0.0.64/plexflow/core/torrents/providers/tpb/utils.py +139 -0
  478. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__init__.py +0 -0
  479. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-311.pyc +0 -0
  480. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-312.pyc +0 -0
  481. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/tpb.cpython-311.pyc +0 -0
  482. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-311.pyc +0 -0
  483. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-312.pyc +0 -0
  484. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-311.pyc +0 -0
  485. plexflow-0.0.64/plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-312.pyc +0 -0
  486. plexflow-0.0.64/plexflow/core/torrents/providers/yts/utils.py +57 -0
  487. plexflow-0.0.64/plexflow/core/torrents/providers/yts/yts.py +31 -0
  488. plexflow-0.0.64/plexflow/core/torrents/results/__init__.py +0 -0
  489. plexflow-0.0.64/plexflow/core/torrents/results/__pycache__/__init__.cpython-311.pyc +0 -0
  490. plexflow-0.0.64/plexflow/core/torrents/results/__pycache__/__init__.cpython-312.pyc +0 -0
  491. plexflow-0.0.64/plexflow/core/torrents/results/__pycache__/torrent.cpython-311.pyc +0 -0
  492. plexflow-0.0.64/plexflow/core/torrents/results/__pycache__/torrent.cpython-312.pyc +0 -0
  493. plexflow-0.0.64/plexflow/core/torrents/results/torrent.py +165 -0
  494. plexflow-0.0.64/plexflow/core/torrents/results/universal.py +220 -0
  495. plexflow-0.0.64/plexflow/core/torrents/results/utils.py +15 -0
  496. plexflow-0.0.64/plexflow/events/__init__.py +0 -0
  497. plexflow-0.0.64/plexflow/events/download/__init__.py +0 -0
  498. plexflow-0.0.64/plexflow/events/download/__pycache__/torrent_events.cpython-311.pyc +0 -0
  499. plexflow-0.0.64/plexflow/events/download/torrent_events.py +96 -0
  500. plexflow-0.0.64/plexflow/events/publish/__init__.py +0 -0
  501. plexflow-0.0.64/plexflow/events/publish/__pycache__/publish.cpython-311.pyc +0 -0
  502. plexflow-0.0.64/plexflow/events/publish/publish.py +34 -0
  503. plexflow-0.0.64/plexflow/logging/__init__.py +0 -0
  504. plexflow-0.0.64/plexflow/logging/__pycache__/__init__.cpython-311.pyc +0 -0
  505. plexflow-0.0.64/plexflow/logging/__pycache__/__init__.cpython-312.pyc +0 -0
  506. plexflow-0.0.64/plexflow/logging/__pycache__/log_setup.cpython-311.pyc +0 -0
  507. plexflow-0.0.64/plexflow/logging/__pycache__/log_setup.cpython-312.pyc +0 -0
  508. plexflow-0.0.64/plexflow/logging/log_setup.py +8 -0
  509. plexflow-0.0.64/plexflow/spiders/__pycache__/quiet_logger.cpython-312.pyc +0 -0
  510. plexflow-0.0.64/plexflow/spiders/quiet_logger.py +9 -0
  511. plexflow-0.0.64/plexflow/spiders/tgx/__pycache__/settings.cpython-312.pyc +0 -0
  512. plexflow-0.0.64/plexflow/spiders/tgx/__pycache__/spider.cpython-312.pyc +0 -0
  513. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/__pycache__/dump_json_pipeline.cpython-312.pyc +0 -0
  514. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/__pycache__/meta_pipeline.cpython-312.pyc +0 -0
  515. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/__pycache__/publish_pipeline.cpython-312.pyc +0 -0
  516. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/__pycache__/torrent_info_pipeline.cpython-312.pyc +0 -0
  517. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/__pycache__/validation_pipeline.cpython-312.pyc +0 -0
  518. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/dump_json_pipeline.py +30 -0
  519. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/meta_pipeline.py +13 -0
  520. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/publish_pipeline.py +14 -0
  521. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/torrent_info_pipeline.py +12 -0
  522. plexflow-0.0.64/plexflow/spiders/tgx/pipelines/validation_pipeline.py +17 -0
  523. plexflow-0.0.64/plexflow/spiders/tgx/settings.py +36 -0
  524. plexflow-0.0.64/plexflow/spiders/tgx/spider.py +72 -0
  525. plexflow-0.0.64/plexflow/utils/__init__.py +0 -0
  526. plexflow-0.0.64/plexflow/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  527. plexflow-0.0.64/plexflow/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  528. plexflow-0.0.64/plexflow/utils/antibot/__pycache__/human_like_requests.cpython-312.pyc +0 -0
  529. plexflow-0.0.64/plexflow/utils/antibot/human_like_requests.py +122 -0
  530. plexflow-0.0.64/plexflow/utils/api/__init__.py +0 -0
  531. plexflow-0.0.64/plexflow/utils/api/__pycache__/__init__.cpython-311.pyc +0 -0
  532. plexflow-0.0.64/plexflow/utils/api/__pycache__/__init__.cpython-312.pyc +0 -0
  533. plexflow-0.0.64/plexflow/utils/api/context/__pycache__/http.cpython-312.pyc +0 -0
  534. plexflow-0.0.64/plexflow/utils/api/context/http.py +62 -0
  535. plexflow-0.0.64/plexflow/utils/api/rest/__init__.py +0 -0
  536. plexflow-0.0.64/plexflow/utils/api/rest/__pycache__/__init__.cpython-311.pyc +0 -0
  537. plexflow-0.0.64/plexflow/utils/api/rest/__pycache__/__init__.cpython-312.pyc +0 -0
  538. plexflow-0.0.64/plexflow/utils/api/rest/__pycache__/antibot_restful.cpython-312.pyc +0 -0
  539. plexflow-0.0.64/plexflow/utils/api/rest/__pycache__/restful.cpython-311.pyc +0 -0
  540. plexflow-0.0.64/plexflow/utils/api/rest/__pycache__/restful.cpython-312.pyc +0 -0
  541. plexflow-0.0.64/plexflow/utils/api/rest/antibot_restful.py +68 -0
  542. plexflow-0.0.64/plexflow/utils/api/rest/restful.py +49 -0
  543. plexflow-0.0.64/plexflow/utils/captcha/__init__.py +0 -0
  544. plexflow-0.0.64/plexflow/utils/captcha/bypass/__init__.py +0 -0
  545. plexflow-0.0.64/plexflow/utils/captcha/bypass/__pycache__/decode_audio.cpython-311.pyc +0 -0
  546. plexflow-0.0.64/plexflow/utils/captcha/bypass/decode_audio.py +34 -0
  547. plexflow-0.0.64/plexflow/utils/download/__init__.py +0 -0
  548. plexflow-0.0.64/plexflow/utils/download/__pycache__/gz.cpython-311.pyc +0 -0
  549. plexflow-0.0.64/plexflow/utils/download/gz.py +26 -0
  550. plexflow-0.0.64/plexflow/utils/filesystem/__init__.py +0 -0
  551. plexflow-0.0.64/plexflow/utils/filesystem/__pycache__/__init__.cpython-311.pyc +0 -0
  552. plexflow-0.0.64/plexflow/utils/filesystem/__pycache__/__init__.cpython-312.pyc +0 -0
  553. plexflow-0.0.64/plexflow/utils/filesystem/__pycache__/search.cpython-311.pyc +0 -0
  554. plexflow-0.0.64/plexflow/utils/filesystem/__pycache__/search.cpython-312.pyc +0 -0
  555. plexflow-0.0.64/plexflow/utils/filesystem/search.py +129 -0
  556. plexflow-0.0.64/plexflow/utils/gmail/__init__.py +0 -0
  557. plexflow-0.0.64/plexflow/utils/gmail/__pycache__/mails.cpython-311.pyc +0 -0
  558. plexflow-0.0.64/plexflow/utils/gmail/mails.py +116 -0
  559. plexflow-0.0.64/plexflow/utils/hooks/__init__.py +0 -0
  560. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  561. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/__init__.cpython-312.pyc +0 -0
  562. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/http.cpython-311.pyc +0 -0
  563. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/http.cpython-312.pyc +0 -0
  564. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/postgresql.cpython-311.pyc +0 -0
  565. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/redis.cpython-311.pyc +0 -0
  566. plexflow-0.0.64/plexflow/utils/hooks/__pycache__/redis.cpython-312.pyc +0 -0
  567. plexflow-0.0.64/plexflow/utils/hooks/http.py +84 -0
  568. plexflow-0.0.64/plexflow/utils/hooks/postgresql.py +93 -0
  569. plexflow-0.0.64/plexflow/utils/hooks/redis.py +112 -0
  570. plexflow-0.0.64/plexflow/utils/image/__pycache__/storage.cpython-312.pyc +0 -0
  571. plexflow-0.0.64/plexflow/utils/image/storage.py +36 -0
  572. plexflow-0.0.64/plexflow/utils/imdb/__init__.py +0 -0
  573. plexflow-0.0.64/plexflow/utils/imdb/__pycache__/__init__.cpython-311.pyc +0 -0
  574. plexflow-0.0.64/plexflow/utils/imdb/__pycache__/__init__.cpython-312.pyc +0 -0
  575. plexflow-0.0.64/plexflow/utils/imdb/__pycache__/imdb_codes.cpython-311.pyc +0 -0
  576. plexflow-0.0.64/plexflow/utils/imdb/__pycache__/imdb_codes.cpython-312.pyc +0 -0
  577. plexflow-0.0.64/plexflow/utils/imdb/imdb_codes.py +107 -0
  578. plexflow-0.0.64/plexflow/utils/pubsub/__pycache__/consume.cpython-312.pyc +0 -0
  579. plexflow-0.0.64/plexflow/utils/pubsub/__pycache__/produce.cpython-312.pyc +0 -0
  580. plexflow-0.0.64/plexflow/utils/pubsub/consume.py +82 -0
  581. plexflow-0.0.64/plexflow/utils/pubsub/produce.py +25 -0
  582. plexflow-0.0.64/plexflow/utils/retry/__init__.py +0 -0
  583. plexflow-0.0.64/plexflow/utils/retry/__pycache__/__init__.cpython-311.pyc +0 -0
  584. plexflow-0.0.64/plexflow/utils/retry/__pycache__/__init__.cpython-312.pyc +0 -0
  585. plexflow-0.0.64/plexflow/utils/retry/__pycache__/utils.cpython-311.pyc +0 -0
  586. plexflow-0.0.64/plexflow/utils/retry/__pycache__/utils.cpython-312.pyc +0 -0
  587. plexflow-0.0.64/plexflow/utils/retry/utils.py +38 -0
  588. plexflow-0.0.64/plexflow/utils/strings/__init__.py +0 -0
  589. plexflow-0.0.64/plexflow/utils/strings/__pycache__/__init__.cpython-312.pyc +0 -0
  590. plexflow-0.0.64/plexflow/utils/strings/__pycache__/filesize.cpython-311.pyc +0 -0
  591. plexflow-0.0.64/plexflow/utils/strings/__pycache__/filesize.cpython-312.pyc +0 -0
  592. plexflow-0.0.64/plexflow/utils/strings/__pycache__/language.cpython-312.pyc +0 -0
  593. plexflow-0.0.64/plexflow/utils/strings/filesize.py +55 -0
  594. plexflow-0.0.64/plexflow/utils/strings/language.py +14 -0
  595. plexflow-0.0.64/plexflow/utils/subtitle/__pycache__/search.cpython-312.pyc +0 -0
  596. plexflow-0.0.64/plexflow/utils/subtitle/search.py +76 -0
  597. plexflow-0.0.64/plexflow/utils/tasks/__pycache__/decorators.cpython-311.pyc +0 -0
  598. plexflow-0.0.64/plexflow/utils/tasks/__pycache__/tasks.cpython-311.pyc +0 -0
  599. plexflow-0.0.64/plexflow/utils/tasks/decorators.py +78 -0
  600. plexflow-0.0.64/plexflow/utils/tasks/k8s/task.py +70 -0
  601. plexflow-0.0.64/plexflow/utils/thread_safe/__pycache__/safe_list.cpython-312.pyc +0 -0
  602. plexflow-0.0.64/plexflow/utils/thread_safe/__pycache__/safe_set.cpython-312.pyc +0 -0
  603. plexflow-0.0.64/plexflow/utils/thread_safe/safe_list.py +54 -0
  604. plexflow-0.0.64/plexflow/utils/thread_safe/safe_set.py +69 -0
  605. plexflow-0.0.64/plexflow/utils/torrent/__init__.py +0 -0
  606. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/__init__.cpython-311.pyc +0 -0
  607. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/__init__.cpython-312.pyc +0 -0
  608. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/analyze.cpython-312.pyc +0 -0
  609. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/files.cpython-312.pyc +0 -0
  610. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/hash.cpython-311.pyc +0 -0
  611. plexflow-0.0.64/plexflow/utils/torrent/__pycache__/hash.cpython-312.pyc +0 -0
  612. plexflow-0.0.64/plexflow/utils/torrent/analyze.py +118 -0
  613. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/common.cpython-312.pyc +0 -0
  614. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/ext.cpython-312.pyc +0 -0
  615. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/extratorrent.cpython-312.pyc +0 -0
  616. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/tgx.cpython-312.pyc +0 -0
  617. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/therarbg.cpython-312.pyc +0 -0
  618. plexflow-0.0.64/plexflow/utils/torrent/extract/__pycache__/torrentquest.cpython-312.pyc +0 -0
  619. plexflow-0.0.64/plexflow/utils/torrent/extract/common.py +37 -0
  620. plexflow-0.0.64/plexflow/utils/torrent/extract/ext.py +2391 -0
  621. plexflow-0.0.64/plexflow/utils/torrent/extract/extratorrent.py +56 -0
  622. plexflow-0.0.64/plexflow/utils/torrent/extract/kat.py +1581 -0
  623. plexflow-0.0.64/plexflow/utils/torrent/extract/tgx.py +96 -0
  624. plexflow-0.0.64/plexflow/utils/torrent/extract/therarbg.py +170 -0
  625. plexflow-0.0.64/plexflow/utils/torrent/extract/torrentquest.py +171 -0
  626. plexflow-0.0.64/plexflow/utils/torrent/files.py +36 -0
  627. plexflow-0.0.64/plexflow/utils/torrent/hash.py +90 -0
  628. plexflow-0.0.64/plexflow/utils/transcribe/__init__.py +0 -0
  629. plexflow-0.0.64/plexflow/utils/transcribe/__pycache__/speech2text.cpython-311.pyc +0 -0
  630. plexflow-0.0.64/plexflow/utils/transcribe/speech2text.py +40 -0
  631. plexflow-0.0.64/plexflow/utils/video/__init__.py +0 -0
  632. plexflow-0.0.64/plexflow/utils/video/__pycache__/subtitle.cpython-312.pyc +0 -0
  633. plexflow-0.0.64/plexflow/utils/video/subtitle.py +73 -0
  634. plexflow-0.0.64/pyproject.toml +105 -0
@@ -0,0 +1,71 @@
1
+ Metadata-Version: 2.1
2
+ Name: plexflow
3
+ Version: 0.0.64
4
+ Summary: A short description of the package.
5
+ Home-page: https://www.example.com
6
+ License: MIT
7
+ Keywords: keyword1,keyword2,keyword3
8
+ Author: Your Name
9
+ Author-email: you@example.com
10
+ Requires-Python: ==3.12.4
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Requires-Dist: apache-airflow (>=2.9.3,<3.0.0)
17
+ Requires-Dist: apache-airflow-providers-cncf-kubernetes (>=8.3.3,<9.0.0)
18
+ Requires-Dist: apache-airflow-providers-postgres (>=5.10.2,<6.0.0)
19
+ Requires-Dist: apache-airflow-providers-redis (>=3.7.0,<4.0.0)
20
+ Requires-Dist: arrow (>=1.3.0,<2.0.0)
21
+ Requires-Dist: avro (>=1.11.3,<2.0.0)
22
+ Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
23
+ Requires-Dist: bitmath (>=1.3.3.1,<2.0.0.0)
24
+ Requires-Dist: brotli (>=1.1.0,<2.0.0)
25
+ Requires-Dist: cloudinary (>=1.41.0,<2.0.0)
26
+ Requires-Dist: cloudscraper (>=1.2.71,<2.0.0)
27
+ Requires-Dist: cohere (>=5.5.0,<6.0.0)
28
+ Requires-Dist: confluent-kafka[avro] (>=2.4.0,<3.0.0)
29
+ Requires-Dist: dataclasses-json (>=0.6.4,<0.7.0)
30
+ Requires-Dist: dateparser (>=1.2.0,<2.0.0)
31
+ Requires-Dist: fake-useragent (>=1.4.0,<2.0.0)
32
+ Requires-Dist: google-api-python-client (>=2.129.0,<3.0.0)
33
+ Requires-Dist: google-auth-oauthlib (>=1.2.0,<2.0.0)
34
+ Requires-Dist: google-cloud-pubsub (>=2.21.1,<3.0.0)
35
+ Requires-Dist: groq (>=0.9.0,<0.10.0)
36
+ Requires-Dist: html5lib (>=1.1,<2.0)
37
+ Requires-Dist: humanfriendly (>=10.0,<11.0)
38
+ Requires-Dist: iso639-lang (>=2.2.3,<3.0.0)
39
+ Requires-Dist: json-repair (>=0.19.1,<0.20.0)
40
+ Requires-Dist: kafka (>=1.3.5,<2.0.0)
41
+ Requires-Dist: langchain-google-genai (>=1.0.8,<2.0.0)
42
+ Requires-Dist: langchain-groq (>=0.1.9,<0.2.0)
43
+ Requires-Dist: langcodes (>=3.4.0,<4.0.0)
44
+ Requires-Dist: lxml (>=5.1.0,<6.0.0)
45
+ Requires-Dist: numpy (>=2.0.1,<3.0.0)
46
+ Requires-Dist: parse-torrent-title (>=2.8.1,<3.0.0)
47
+ Requires-Dist: playwright (>=1.41.2,<2.0.0)
48
+ Requires-Dist: playwright-stealth (>=1.0.6,<2.0.0)
49
+ Requires-Dist: plexapi (==4.15.9)
50
+ Requires-Dist: psycopg2-binary (>=2.9.9,<3.0.0)
51
+ Requires-Dist: pyautogui (>=0.9.54,<0.10.0)
52
+ Requires-Dist: pydantic (>=2.6.1,<3.0.0)
53
+ Requires-Dist: pyngrok (>=7.1.6,<8.0.0)
54
+ Requires-Dist: pysrt (>=1.1.2,<2.0.0)
55
+ Requires-Dist: python-ffmpeg (>=2.0.10,<3.0.0)
56
+ Requires-Dist: python-ulid (>=2.7.0,<3.0.0)
57
+ Requires-Dist: ratelimit (>=2.2.1,<3.0.0)
58
+ Requires-Dist: redis (>=4.1.3,<5.0.0)
59
+ Requires-Dist: requests (>=2.25.1,<3.0.0)
60
+ Requires-Dist: retrying (>=1.3.4,<2.0.0)
61
+ Requires-Dist: scrapy (>=2.11.2,<3.0.0)
62
+ Requires-Dist: seleniumbase (>=4.28.4,<5.0.0)
63
+ Requires-Dist: tmdbsimple (>=2.9.1,<3.0.0)
64
+ Requires-Dist: tpblite (>=0.8.0,<0.9.0)
65
+ Requires-Dist: tvdb-v4-official (>=1.1.0,<2.0.0)
66
+ Requires-Dist: tvdbsimple (>=1.0.6,<2.0.0)
67
+ Requires-Dist: uvicorn (>=0.29.0,<0.30.0)
68
+ Requires-Dist: webdriver-manager (>=4.0.2,<5.0.0)
69
+ Requires-Dist: wget (>=3.2,<4.0)
70
+ Project-URL: Documentation, https://www.example.com/docs
71
+ Project-URL: Repository, https://github.com/username/my-package
File without changes
@@ -0,0 +1,15 @@
1
+ from plexflow.core.subtitles.providers.oss.search import get_subtitles
2
+ from plexflow.core.subtitles.providers.oss.download import download_subtitles
3
+ from plexflow.core.subtitles.providers.auto_subtitles import AutoSubtitles
4
+ from pathlib import Path
5
+ from typing import List
6
+
7
+ auto_subtitles = AutoSubtitles(
8
+ imdb_id="tt8367814",
9
+ languages=["nl", "en"],
10
+ credentials_path="config/credentials.yaml",
11
+ redis_host="localhost",
12
+ redis_port=6379,
13
+ )
14
+
15
+ download_subtitles(auto_subtitles)
Binary file
File without changes
File without changes
@@ -0,0 +1,32 @@
1
+ from plexflow.core.storage.object.plexflow_storage import PlexflowObjectStore
2
+ from plexflow.core.context.plexflow_context import PlexflowContext
3
+ from plexflow.core.context.metadata.tmdb.context import TMDbMetadataContext
4
+
5
+ class MetadataContext(PlexflowContext):
6
+ """A class used to represent a Select Context in Plexflow.
7
+
8
+ This class extends PlexflowContext and adds a selected item property.
9
+
10
+ Attributes:
11
+ selected_item (PlexflowObjectProperty): The selected item in the context.
12
+ """
13
+
14
+ def __init__(self, store: PlexflowObjectStore, **kwargs):
15
+ """Initializes the SelectContext with the given object store and keyword arguments.
16
+
17
+ Args:
18
+ store (PlexflowObjectStore): The object store to be used.
19
+ **kwargs: Arbitrary keyword arguments.
20
+ """
21
+
22
+ super().__init__(store=store, **kwargs)
23
+
24
+ @property
25
+ def tmdb(self) -> TMDbMetadataContext:
26
+ """Gets the value of the selected item.
27
+
28
+ Returns:
29
+ Any: The value of the selected item.
30
+ """
31
+
32
+ return TMDbMetadataContext(store=self.object_store)
@@ -0,0 +1,45 @@
1
+ from plexflow.core.storage.object.plexflow_storage import PlexflowObjectStore
2
+ from plexflow.core.context.plexflow_context import PlexflowContext
3
+ from plexflow.core.context.plexflow_property import PlexflowObjectProperty
4
+ from plexflow.core.metadata.providers.tmdb.datatypes import TmdbMovie
5
+ from typing import Union
6
+
7
+ class TMDbMetadataContext(PlexflowContext):
8
+ """A class used to represent a Select Context in Plexflow.
9
+
10
+ This class extends PlexflowContext and adds a selected item property.
11
+
12
+ Attributes:
13
+ selected_item (PlexflowObjectProperty): The selected item in the context.
14
+ """
15
+
16
+ def __init__(self, store: PlexflowObjectStore, **kwargs):
17
+ """Initializes the SelectContext with the given object store and keyword arguments.
18
+
19
+ Args:
20
+ store (PlexflowObjectStore): The object store to be used.
21
+ **kwargs: Arbitrary keyword arguments.
22
+ """
23
+
24
+ super().__init__(store=store, **kwargs)
25
+ self.movie_details = PlexflowObjectProperty(self.object_store, "movie_details", local=True)
26
+
27
+ @property
28
+ def movie_data(self) -> Union[TmdbMovie, None]:
29
+ """Gets the value of the selected item.
30
+
31
+ Returns:
32
+ Any: The value of the selected item.
33
+ """
34
+
35
+ return self.movie_details.value
36
+
37
+ @movie_data.setter
38
+ def movie_data(self, val: TmdbMovie):
39
+ """Sets the value of the selected item.
40
+
41
+ Args:
42
+ val (Any): The value to be set.
43
+ """
44
+
45
+ self.movie_details.value = val
@@ -0,0 +1,46 @@
1
+ from plexflow.core.storage.object.plexflow_storage import PlexflowObjectStore
2
+ from typing import Any
3
+ from ulid import ULID
4
+
5
+ class PartialContext:
6
+ @staticmethod
7
+ def create_universal_id(dag_run_id: str):
8
+ store = PlexflowObjectStore(dag_run_id)
9
+ try:
10
+ print("try retrieving universal id")
11
+ universal_id = store.retrieve(store.make_key(dag_run_id))
12
+ if isinstance(universal_id, str) and len(universal_id) > 0:
13
+ return universal_id
14
+ except Exception:
15
+ print("creating universal id")
16
+
17
+ universal_id = str(ULID())
18
+ store.store_temporarily(key=store.make_key(dag_run_id), obj=universal_id)
19
+ return universal_id
20
+
21
+ def __init__(self, context_id: str, dag_run_id: str, default_ttl: int, **kwargs) -> None:
22
+ self.context_id = context_id
23
+ self.dag_run_id = dag_run_id
24
+ self.default_ttl = default_ttl
25
+ self.store = PlexflowObjectStore(context_id, **kwargs)
26
+
27
+ def update_universal_id(self, value: str):
28
+ self.store.store_temporarily(key=self.store.make_key(self.dag_run_id), obj=value)
29
+
30
+ def set(self, key: str, value: Any, ttl: int = None) -> None:
31
+ self.store.store_temporarily(key=self.store.make_run_key(key), obj=value, ttl=ttl or self.default_ttl)
32
+
33
+ def set_global(self, key: str, value: Any, ttl: int = None) -> None:
34
+ self.store.store_temporarily(key=self.store.make_key(key), obj=value, ttl=ttl or self.default_ttl)
35
+
36
+ def get(self, key: str) -> Any:
37
+ return self.store.retrieve(key=self.store.make_run_key(key))
38
+
39
+ def get_global(self, key: str) -> Any:
40
+ return self.store.retrieve(key=self.store.make_key(key))
41
+
42
+ def get_keys(self, pattern: str):
43
+ return list(map(lambda key_bytes: key_bytes.decode('utf-8'), self.store.retrieve_keys(self.store.make_run_key(pattern))))
44
+
45
+ def get_by_pattern(self, pattern: str):
46
+ return self.store.retrieve_values(self.store.make_run_key(pattern))
@@ -0,0 +1,8 @@
1
+ from plexflow.core.context.partials.ids import Ids
2
+ from plexflow.core.context.partials.watchlist import Watchlist
3
+ from plexflow.core.context.partials.cache import LRUCache
4
+ from plexflow.core.context.partials.movie import Movie
5
+ from plexflow.core.context.partials.context import Context
6
+ from plexflow.core.context.partials.torrents import Torrents
7
+ from plexflow.core.context.partials.tgx_context import TgxRequestContext
8
+ from plexflow.core.context.partials.tgx_batch import TgxBatch
@@ -0,0 +1,16 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from datetime import datetime as dt
3
+
4
+ class LRUCache(PartialContext):
5
+ def __init__(self, **kwargs) -> None:
6
+ super().__init__(**kwargs)
7
+
8
+ def touch(self, media_id: str) -> None:
9
+ self.set_global(f"cache/processing/{media_id}", dt.now())
10
+
11
+ def last_used(self, media_id: str) -> dt:
12
+ try:
13
+ return self.get_global(f"cache/processing/{media_id}")
14
+ except Exception:
15
+ return None
16
+
@@ -0,0 +1,12 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+
3
+ class Context(PartialContext):
4
+ def __init__(self, **kwargs) -> None:
5
+ super().__init__(**kwargs)
6
+
7
+ def update(self, id: str):
8
+ self.update_universal_id(id)
9
+
10
+ @property
11
+ def id(self) -> str:
12
+ return self.context_id
@@ -0,0 +1,37 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+
3
+ class Ids(PartialContext):
4
+ def __init__(self, **kwargs) -> None:
5
+ super().__init__(**kwargs)
6
+
7
+ @property
8
+ def imdb_id(self) -> str:
9
+ return self.get("imdb_id")
10
+
11
+ @imdb_id.setter
12
+ def imdb_id(self, value: str) -> None:
13
+ self.set("imdb_id", value)
14
+
15
+ @property
16
+ def tmdb_id(self) -> int:
17
+ return self.get("tmdb_id")
18
+
19
+ @tmdb_id.setter
20
+ def tmdb_id(self, value: int) -> None:
21
+ self.set("tmdb_id", value)
22
+
23
+ @property
24
+ def tvdb_id(self) -> int:
25
+ return self.get("tvdb_id")
26
+
27
+ @tvdb_id.setter
28
+ def tvdb_id(self, value: int) -> None:
29
+ self.set("tvdb_id", value)
30
+
31
+ @property
32
+ def plex_id(self) -> str:
33
+ return self.get("plex_id")
34
+
35
+ @plex_id.setter
36
+ def plex_id(self, value: str) -> None:
37
+ self.set("plex_id", value)
@@ -0,0 +1,115 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from datetime import datetime as dt
3
+ from plexflow.core.metadata.auto.auto_providers.auto.movie import AutoMovie
4
+ from plexflow.core.metadata.auto.auto_providers.tmdb.movie import AutoTmdbMovie
5
+ from plexflow.core.metadata.auto.auto_providers.tvdb.movie import AutoTvdbMovie
6
+ from plexflow.core.metadata.auto.auto_providers.moviemeter.movie import AutoMovieMeterMovie
7
+ from plexflow.core.metadata.auto.auto_providers.imdb.movie import AutoImdbMovie
8
+ from plexflow.core.metadata.auto.auto_providers.tmdb.show import AutoTmdbShow
9
+ from plexflow.core.metadata.auto.auto_providers.tvdb.show import AutoTvdbShow
10
+ from plexflow.core.metadata.auto.auto_providers.imdb.show import AutoImdbShow
11
+ from plexflow.core.metadata.auto.auto_providers.plex.movie import AutoPlexMovie
12
+
13
+ class Movie(PartialContext):
14
+ def __init__(self, **kwargs) -> None:
15
+ super().__init__(**kwargs)
16
+
17
+ @property
18
+ def sources(self) -> list:
19
+ keys = self.get_keys("movie/*")
20
+ # extract the source from the key
21
+ return [key.split("/")[-1] for key in keys]
22
+
23
+ def from_source(self, source: str) -> AutoMovie:
24
+ return self.get(f"movie/{source}")
25
+
26
+ @property
27
+ def title(self) -> str:
28
+ for source in self.sources:
29
+ details = self.from_source(source)
30
+ if details and details.title:
31
+ return details.title
32
+
33
+ @property
34
+ def year(self) -> int:
35
+ for source in self.sources:
36
+ details = self.from_source(source)
37
+ if details and details.year:
38
+ return details.year
39
+
40
+ @property
41
+ def release_date(self) -> dt:
42
+ for source in self.sources:
43
+ details = self.from_source(source)
44
+ if details and details.release_date:
45
+ return details.release_date
46
+
47
+ @property
48
+ def rank(self) -> int:
49
+ return self.plex.rank
50
+
51
+ @property
52
+ def released(self) -> bool:
53
+ dates = []
54
+ for source in self.sources:
55
+ details = self.from_source(source)
56
+ if details and details.release_date:
57
+ dates.append(details.release_date)
58
+
59
+ sorted_dates = sorted(dates)
60
+ now = dt.now()
61
+ return all([date < now for date in sorted_dates])
62
+
63
+ @property
64
+ def runtime(self) -> int:
65
+ for source in self.sources:
66
+ details = self.from_source(source)
67
+ if details and details.runtime:
68
+ return details.runtime
69
+
70
+ @property
71
+ def titles(self) -> set:
72
+ titles = set()
73
+ for source in self.sources:
74
+ details = self.from_source(source)
75
+ if details and details.title:
76
+ titles.add(details.title)
77
+ titles.update(details.titles)
78
+ return titles
79
+
80
+ @property
81
+ def summary(self) -> str:
82
+ for source in self.sources:
83
+ details = self.from_source(source)
84
+ if details and details.summary:
85
+ return details.summary
86
+
87
+ @property
88
+ def language(self) -> str:
89
+ for source in self.sources:
90
+ details = self.from_source(source)
91
+ if details and details.language:
92
+ return details.language
93
+
94
+ @property
95
+ def plex(self) -> AutoPlexMovie:
96
+ return self.from_source("plex")
97
+
98
+ @property
99
+ def tmdb(self) -> AutoTmdbMovie:
100
+ return self.from_source("tmdb")
101
+
102
+ @property
103
+ def imdb(self) -> AutoImdbMovie:
104
+ return self.from_source("imdb")
105
+
106
+ @property
107
+ def tvdb(self) -> AutoTvdbMovie:
108
+ return self.from_source("tvdb")
109
+
110
+ @property
111
+ def moviemeter(self) -> AutoMovieMeterMovie:
112
+ return self.from_source("moviemeter")
113
+
114
+ def update(self, movie: AutoMovie):
115
+ self.set(f"movie/{movie.source}", movie)
@@ -0,0 +1,33 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+
3
+ class TgxBatch(PartialContext):
4
+ def __init__(self, **kwargs) -> None:
5
+ super().__init__(**kwargs)
6
+
7
+ def update(self, ids):
8
+ self.set("tgx/ids", ids)
9
+
10
+ def update_finished(self, ids):
11
+ self.set("tgx/finished", ids)
12
+
13
+ def update_unfinished(self, ids):
14
+ self.set("tgx/unfinished", ids)
15
+
16
+ def update_finished_items(self, items):
17
+ self.set("tgx/finished_items", items)
18
+
19
+ @property
20
+ def ids(self) -> set:
21
+ return self.get("tgx/ids")
22
+
23
+ @property
24
+ def finished(self) -> set:
25
+ return self.get("tgx/finished")
26
+
27
+ @property
28
+ def unfinished(self) -> set:
29
+ return self.get("tgx/unfinished")
30
+
31
+ @property
32
+ def finished_items(self) -> list:
33
+ return self.get("tgx/finished_items")
@@ -0,0 +1,34 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+
3
+ class TgxRequestContext(PartialContext):
4
+ def __init__(self, **kwargs) -> None:
5
+ super().__init__(**kwargs)
6
+
7
+ def update(self, cookies: dict):
8
+ self.set_global("tgx/cookies", cookies)
9
+
10
+ @property
11
+ def session_id(self) -> str:
12
+ """
13
+ Cookies is a dictionary like below:
14
+
15
+ [{'name': 'PHPSESSID', 'value': 'a95el556bo30414fslulnbdi03', 'domain': 'torrentgalaxy.to', 'path': '/', 'expires': -1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}, {'name': 'AdskeeperStorage', 'value': '%7B%220%22%3A%7B%22svspr%22%3A%22https%3A%2F%2Ftorrentgalaxy.to%2Ftorrent%2F16100045%22%2C%22svsds%22%3A2%7D%2C%22C385455%22%3A%7B%22page%22%3A1%2C%22time%22%3A%221722597496754%22%7D%2C%22C1543068%22%3A%7B%22page%22%3A1%2C%22time%22%3A%221722597496757%22%7D%2C%22C1343686%22%3A%7B%22page%22%3A1%2C%22time%22%3A%221722597497305%22%7D%7D', 'domain': 'torrentgalaxy.to', 'path': '/', 'expires': -1, 'httpOnly': False, 'secure': False, 'sameSite': 'Lax'}]
16
+ """
17
+ try:
18
+ cookies = self.get_global("tgx/cookies")
19
+ for cookie in cookies:
20
+ if cookie["name"] == "PHPSESSID":
21
+ return cookie["value"]
22
+ except Exception:
23
+ return None
24
+
25
+ @property
26
+ def cookies(self) -> dict:
27
+ try:
28
+ cookies = self.get_global("tgx/cookies")
29
+ simple_cookies = {}
30
+ for cookie in cookies:
31
+ simple_cookies[cookie["name"]] = cookie["value"]
32
+ return simple_cookies
33
+ except Exception:
34
+ return None
@@ -0,0 +1,23 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from datetime import datetime as dt
3
+ from plexflow.core.torrents.results.torrent import Torrent
4
+ from typing import List
5
+
6
+ class Torrents(PartialContext):
7
+ def __init__(self, **kwargs) -> None:
8
+ super().__init__(**kwargs)
9
+
10
+ @property
11
+ def sources(self) -> list[str]:
12
+ keys = self.get_keys("torrents/*")
13
+ # extract the source from the key
14
+ return [key.split("/")[-1] for key in keys]
15
+
16
+ def from_source(self, source: str) -> List[Torrent]:
17
+ return self.get(f"torrents/{source}")
18
+
19
+ def update(self, torrents: Torrent):
20
+ if len(torrents) == 0:
21
+ return
22
+ source = next(iter(torrents)).source
23
+ self.set(f"torrents/{source}", torrents)
@@ -0,0 +1,35 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from plexflow.core.plex.watchlist.datatypes import MediaContainer, PlexMetadata
3
+ from ulid import ULID
4
+ from typing import Generator, Any
5
+
6
+ class Watchlist(PartialContext):
7
+ def __init__(self, **kwargs) -> None:
8
+ super().__init__(**kwargs)
9
+
10
+ @property
11
+ def selected(self) -> PlexMetadata:
12
+ try:
13
+ return self.get("watchlist/selected")
14
+ except Exception:
15
+ return None
16
+
17
+ def select(self, value: PlexMetadata) -> None:
18
+ self.set("watchlist/selected", value)
19
+
20
+ def update(self, container: MediaContainer) -> None:
21
+ tag = ULID()
22
+ self.set(f"watchlist/items/{tag}", container)
23
+
24
+ def __iter__(self):
25
+ return self.generator()
26
+
27
+ def raw(self):
28
+ return self.get_by_pattern("watchlist/items/*")
29
+
30
+ def generator(self) -> Generator[Any, Any, Any]:
31
+ items = self.get_by_pattern("watchlist/items/*")
32
+ for part in items:
33
+ part: MediaContainer = part
34
+ for item in part.Metadata:
35
+ yield item
@@ -0,0 +1,29 @@
1
+ from plexflow.core.storage.object.plexflow_storage import PlexflowObjectStore
2
+
3
+ class PlexflowContext:
4
+ """A class used to represent the Plexflow Context.
5
+
6
+ This class provides a context for Plexflow computations, allowing access to an object store.
7
+
8
+ Attributes:
9
+ store (PlexflowObjectStore): The object store used in the Plexflow context.
10
+ """
11
+
12
+ def __init__(self, store: PlexflowObjectStore):
13
+ """Initializes the PlexflowContext with the given object store.
14
+
15
+ Args:
16
+ store (PlexflowObjectStore): The object store to be used in the Plexflow context.
17
+ """
18
+
19
+ self.store = store
20
+
21
+ @property
22
+ def object_store(self) -> PlexflowObjectStore:
23
+ """Gets the object store used in the Plexflow context.
24
+
25
+ Returns:
26
+ PlexflowObjectStore: The object store used in the Plexflow context.
27
+ """
28
+
29
+ return self.store
@@ -0,0 +1,36 @@
1
+ from plexflow.core.storage.object.plexflow_storage import PlexflowObjectStore
2
+
3
+ class PlexflowObjectProperty:
4
+ """A class used to represent a property of a Plexflow object."""
5
+
6
+ def __init__(self, store: PlexflowObjectStore, key: str, local: bool = True):
7
+ """Initializes the PlexflowObjectProperty with the given object store, key, and locality.
8
+
9
+ Args:
10
+ store (PlexflowObjectStore): The object store to be used.
11
+ key (str): The key of the object.
12
+ local (bool, optional): Whether the key is local. Defaults to True.
13
+ """
14
+
15
+ self.store = store
16
+ self.object_key = self.store.make_run_key(key) if local else self.store.make_key(key)
17
+
18
+ @property
19
+ def value(self):
20
+ """Gets the value of the object from the object store.
21
+
22
+ Returns:
23
+ Any: The value of the object.
24
+ """
25
+
26
+ return self.store.retrieve(self.object_key)
27
+
28
+ @value.setter
29
+ def value(self, val):
30
+ """Sets the value of the object in the object store.
31
+
32
+ Args:
33
+ val (Any): The value to be set.
34
+ """
35
+
36
+ self.store.store_temporarily(self.object_key, val)
File without changes