flexget 3.20.2__tar.gz → 3.20.4__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 (753) hide show
  1. {flexget-3.20.2 → flexget-3.20.4}/.gitignore +1 -0
  2. {flexget-3.20.2 → flexget-3.20.4}/PKG-INFO +35 -29
  3. {flexget-3.20.2 → flexget-3.20.4}/flexget/_version.py +1 -1
  4. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_watchlist.py +16 -109
  5. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/utils.py +43 -19
  6. flexget-3.20.4/flexget/components/imdb/waf.py +70 -0
  7. flexget-3.20.4/flexget/utils/waf/README.md +7 -0
  8. flexget-3.20.4/flexget/utils/waf/__init__.py +63 -0
  9. flexget-3.20.4/flexget/utils/waf/aws.py +99 -0
  10. flexget-3.20.4/flexget/utils/waf/crypto.py +29 -0
  11. flexget-3.20.4/flexget/utils/waf/fingerprint.py +128 -0
  12. flexget-3.20.4/flexget/utils/waf/verify.py +56 -0
  13. flexget-3.20.4/flexget/utils/waf/webgl.json +106 -0
  14. {flexget-3.20.2 → flexget-3.20.4}/pyproject.toml +8 -1
  15. {flexget-3.20.2 → flexget-3.20.4}/LICENSE +0 -0
  16. {flexget-3.20.2 → flexget-3.20.4}/README.rst +0 -0
  17. {flexget-3.20.2 → flexget-3.20.4}/flexget/__init__.py +0 -0
  18. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/__init__.py +0 -0
  19. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/app.py +0 -0
  20. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/__init__.py +0 -0
  21. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/authentication.py +0 -0
  22. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/cached.py +0 -0
  23. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/database.py +0 -0
  24. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/format_checker.py +0 -0
  25. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/plugins.py +0 -0
  26. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/schema.py +0 -0
  27. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/server.py +0 -0
  28. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/tasks.py +0 -0
  29. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/user.py +0 -0
  30. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/templates/api_response.html +0 -0
  31. {flexget-3.20.2 → flexget-3.20.4}/flexget/api/templates/swagger-ui.html +0 -0
  32. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/README.md +0 -0
  33. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/__init__.py +0 -0
  34. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/__init__.py +0 -0
  35. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/archive.py +0 -0
  36. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/cli.py +0 -0
  37. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/db.py +0 -0
  38. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/__init__.py +0 -0
  39. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/archives.py +0 -0
  40. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/decompress.py +0 -0
  41. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/utils.py +0 -0
  42. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/__init__.py +0 -0
  43. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/backlog.py +0 -0
  44. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/cli.py +0 -0
  45. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/db.py +0 -0
  46. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/__init__.py +0 -0
  47. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/convert_magnet.py +0 -0
  48. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/magnet_info_hash.py +0 -0
  49. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/private_torrents.py +0 -0
  50. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent.py +0 -0
  51. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_alive.py +0 -0
  52. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_files.py +0 -0
  53. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_match.py +0 -0
  54. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_scrub.py +0 -0
  55. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_size.py +0 -0
  56. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/trackers.py +0 -0
  57. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/__init__.py +0 -0
  58. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/api_emby.py +0 -0
  59. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_list.py +0 -0
  60. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_lookup.py +0 -0
  61. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_refresh.py +0 -0
  62. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_util.py +0 -0
  63. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/from_emby.py +0 -0
  64. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/__init__.py +0 -0
  65. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimate_release.py +0 -0
  66. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/__init__.py +0 -0
  67. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_movies_bluray.py +0 -0
  68. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_released_movies.py +0 -0
  69. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_series_tvmaze.py +0 -0
  70. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/__init__.py +0 -0
  71. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/api.py +0 -0
  72. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/cli.py +0 -0
  73. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/db.py +0 -0
  74. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/retry_failed.py +0 -0
  75. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/__init__.py +0 -0
  76. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/ftp_download.py +0 -0
  77. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/ftp_list.py +0 -0
  78. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/sftp.py +0 -0
  79. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/sftp_client.py +0 -0
  80. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/__init__.py +0 -0
  81. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/api.py +0 -0
  82. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/cli.py +0 -0
  83. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/db.py +0 -0
  84. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/history.py +0 -0
  85. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/__init__.py +0 -0
  86. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/api.py +0 -0
  87. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/db.py +0 -0
  88. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/from_imdb.py +0 -0
  89. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb.py +0 -0
  90. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_lookup.py +0 -0
  91. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_url.py +0 -0
  92. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/__init__.py +0 -0
  93. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/api.py +0 -0
  94. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/cli.py +0 -0
  95. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/irc.py +0 -0
  96. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/__init__.py +0 -0
  97. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_add.py +0 -0
  98. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_clear.py +0 -0
  99. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_match.py +0 -0
  100. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_remove.py +0 -0
  101. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/__init__.py +0 -0
  102. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/couchpotato_list.py +0 -0
  103. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/__init__.py +0 -0
  104. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/api.py +0 -0
  105. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/cli.py +0 -0
  106. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/db.py +0 -0
  107. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/entry_list.py +0 -0
  108. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/imdb_list.py +0 -0
  109. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/__init__.py +0 -0
  110. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/api.py +0 -0
  111. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/cli.py +0 -0
  112. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/db.py +0 -0
  113. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/movie_list.py +0 -0
  114. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/ombi_list.py +0 -0
  115. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/__init__.py +0 -0
  116. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/api.py +0 -0
  117. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/cli.py +0 -0
  118. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/db.py +0 -0
  119. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/pending_list.py +0 -0
  120. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/plex_watchlist.py +0 -0
  121. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/radarr_list.py +0 -0
  122. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/__init__.py +0 -0
  123. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/cli.py +0 -0
  124. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/db.py +0 -0
  125. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/regexp_list.py +0 -0
  126. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/sonarr_list.py +0 -0
  127. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/subtitle_list.py +0 -0
  128. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/thetvdb_list.py +0 -0
  129. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/yaml_list.py +0 -0
  130. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/__init__.py +0 -0
  131. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notification_framework.py +0 -0
  132. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/__init__.py +0 -0
  133. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/bark.py +0 -0
  134. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/cronitor.py +0 -0
  135. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/discord.py +0 -0
  136. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/email.py +0 -0
  137. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/gotify.py +0 -0
  138. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/ifttt.py +0 -0
  139. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/join.py +0 -0
  140. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/matrix.py +0 -0
  141. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/microsoftteams.py +0 -0
  142. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/mqtt.py +0 -0
  143. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/notifymyandroid.py +0 -0
  144. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/ntfysh.py +0 -0
  145. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/prowl.py +0 -0
  146. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushalot.py +0 -0
  147. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushbullet.py +0 -0
  148. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushover.py +0 -0
  149. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushsafer.py +0 -0
  150. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/rapidpush.py +0 -0
  151. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/slack.py +0 -0
  152. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/sms_ru.py +0 -0
  153. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/telegram.py +0 -0
  154. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/toast.py +0 -0
  155. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/xmpp.py +0 -0
  156. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notify.py +0 -0
  157. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/__init__.py +0 -0
  158. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/__init__.py +0 -0
  159. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_common.py +0 -0
  160. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_guessit.py +0 -0
  161. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_internal.py +0 -0
  162. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/plugin_parsing.py +0 -0
  163. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/__init__.py +0 -0
  164. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/api.py +0 -0
  165. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/cli.py +0 -0
  166. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/db.py +0 -0
  167. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/pending_approval.py +0 -0
  168. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/__init__.py +0 -0
  169. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/api.py +0 -0
  170. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/cli.py +0 -0
  171. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/db.py +0 -0
  172. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/remember_rejected.py +0 -0
  173. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/__init__.py +0 -0
  174. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/api.py +0 -0
  175. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/scheduler.py +0 -0
  176. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/__init__.py +0 -0
  177. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/api.py +0 -0
  178. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/cli.py +0 -0
  179. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/db.py +0 -0
  180. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen.py +0 -0
  181. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen_info_hash.py +0 -0
  182. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen_movies.py +0 -0
  183. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/__init__.py +0 -0
  184. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/all_series.py +0 -0
  185. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/api.py +0 -0
  186. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/cli.py +0 -0
  187. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/configure_series.py +0 -0
  188. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/db.py +0 -0
  189. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/gen_series.py +0 -0
  190. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/internal_estimator.py +0 -0
  191. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/metainfo_series.py +0 -0
  192. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/next_series_episodes.py +0 -0
  193. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/next_series_seasons.py +0 -0
  194. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series.py +0 -0
  195. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_begin.py +0 -0
  196. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_premiere.py +0 -0
  197. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_remove.py +0 -0
  198. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/utils.py +0 -0
  199. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/__init__.py +0 -0
  200. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/__init__.py +0 -0
  201. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/allyoulike.py +0 -0
  202. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/alpharatio.py +0 -0
  203. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/anirena.py +0 -0
  204. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/argenteam.py +0 -0
  205. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/awesomehd.py +0 -0
  206. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/bakabt.py +0 -0
  207. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/btn.py +0 -0
  208. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/cinemageddon.py +0 -0
  209. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/cpasbien.py +0 -0
  210. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/ettv.py +0 -0
  211. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/eztv.py +0 -0
  212. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/filelist_api.py +0 -0
  213. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/google_cse.py +0 -0
  214. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/hebits.py +0 -0
  215. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/horriblesubs.py +0 -0
  216. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/iptorrents.py +0 -0
  217. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/koreus.py +0 -0
  218. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/limetorrents.py +0 -0
  219. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/lostfilm.py +0 -0
  220. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/morethantv.py +0 -0
  221. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/ncore.py +0 -0
  222. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/newznab.py +0 -0
  223. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/nyaa.py +0 -0
  224. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/passthepopcorn.py +0 -0
  225. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/piratebay.py +0 -0
  226. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/redirect.py +0 -0
  227. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rlsbb.py +0 -0
  228. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rss.py +0 -0
  229. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rutracker.py +0 -0
  230. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/serienjunkies.py +0 -0
  231. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/shortened.py +0 -0
  232. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/site_1337x.py +0 -0
  233. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/site_rutracker.py +0 -0
  234. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/solidtorrents.py +0 -0
  235. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrent_cache.py +0 -0
  236. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentday.py +0 -0
  237. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentleech.py +0 -0
  238. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentz.py +0 -0
  239. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/uindex.py +0 -0
  240. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/wordpress.py +0 -0
  241. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/yts.py +0 -0
  242. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewrite.py +0 -0
  243. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewrite_search.py +0 -0
  244. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewriting.py +0 -0
  245. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/utils.py +0 -0
  246. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/__init__.py +0 -0
  247. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/api.py +0 -0
  248. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/cli.py +0 -0
  249. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/db.py +0 -0
  250. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/status.py +0 -0
  251. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/__init__.py +0 -0
  252. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/api.py +0 -0
  253. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/api_tvdb.py +0 -0
  254. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/thetvdb_lookup.py +0 -0
  255. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/__init__.py +0 -0
  256. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/api.py +0 -0
  257. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/api_tmdb.py +0 -0
  258. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/tmdb_lookup.py +0 -0
  259. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/__init__.py +0 -0
  260. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/api.py +0 -0
  261. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/api_trakt.py +0 -0
  262. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/cli.py +0 -0
  263. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/db.py +0 -0
  264. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/next_trakt_episodes.py +0 -0
  265. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_calendar.py +0 -0
  266. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_list.py +0 -0
  267. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_lookup.py +0 -0
  268. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/__init__.py +0 -0
  269. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/api.py +0 -0
  270. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/api_tvmaze.py +0 -0
  271. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/tvmaze_lookup.py +0 -0
  272. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/__init__.py +0 -0
  273. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/api.py +0 -0
  274. {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/variables.py +0 -0
  275. {flexget-3.20.2 → flexget-3.20.4}/flexget/config_schema.py +0 -0
  276. {flexget-3.20.2 → flexget-3.20.4}/flexget/db_schema.py +0 -0
  277. {flexget-3.20.2 → flexget-3.20.4}/flexget/entry.py +0 -0
  278. {flexget-3.20.2 → flexget-3.20.4}/flexget/event.py +0 -0
  279. {flexget-3.20.2 → flexget-3.20.4}/flexget/ipc.py +0 -0
  280. {flexget-3.20.2 → flexget-3.20.4}/flexget/log.py +0 -0
  281. {flexget-3.20.2 → flexget-3.20.4}/flexget/manager.py +0 -0
  282. {flexget-3.20.2 → flexget-3.20.4}/flexget/options.py +0 -0
  283. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugin.py +0 -0
  284. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/README.md +0 -0
  285. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/__init__.py +0 -0
  286. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/__init__.py +0 -0
  287. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/check.py +0 -0
  288. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/cli_config.py +0 -0
  289. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/database.py +0 -0
  290. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/debug_info.py +0 -0
  291. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/doc.py +0 -0
  292. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/explain_sql.py +0 -0
  293. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/filters.py +0 -0
  294. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/inject.py +0 -0
  295. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/perf_tests.py +0 -0
  296. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/performance.py +0 -0
  297. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/plugins.py +0 -0
  298. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/templates.py +0 -0
  299. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/try_regexp.py +0 -0
  300. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/web.py +0 -0
  301. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/wiki_qualities.py +0 -0
  302. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/win32_service.py +0 -0
  303. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/__init__.py +0 -0
  304. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/aria2.py +0 -0
  305. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/deluge.py +0 -0
  306. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/nzbget.py +0 -0
  307. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/pyload.py +0 -0
  308. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/qbittorrent.py +0 -0
  309. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/rtorrent.py +0 -0
  310. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/transmission.py +0 -0
  311. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/daemon/__init__.py +0 -0
  312. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/daemon/web_server.py +0 -0
  313. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/__init__.py +0 -0
  314. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/abort_if_exists.py +0 -0
  315. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/accept_all.py +0 -0
  316. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/age.py +0 -0
  317. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/best_quality.py +0 -0
  318. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/content_filter.py +0 -0
  319. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/content_size.py +0 -0
  320. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/crossmatch.py +0 -0
  321. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/delay.py +0 -0
  322. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/duplicates.py +0 -0
  323. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists.py +0 -0
  324. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists_movie.py +0 -0
  325. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists_series.py +0 -0
  326. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/if_condition.py +0 -0
  327. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/limit_new.py +0 -0
  328. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/magnets.py +0 -0
  329. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/only_new.py +0 -0
  330. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/proper_movies.py +0 -0
  331. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/quality.py +0 -0
  332. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/regexp.py +0 -0
  333. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/require_field.py +0 -0
  334. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/rottentomatoes.py +0 -0
  335. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/thetvdb.py +0 -0
  336. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/timeframe.py +0 -0
  337. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/unique.py +0 -0
  338. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/upgrade.py +0 -0
  339. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/__init__.py +0 -0
  340. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/cron_env.py +0 -0
  341. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/db_analyze.py +0 -0
  342. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/db_vacuum.py +0 -0
  343. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/log_start.py +0 -0
  344. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/urlfix.py +0 -0
  345. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/welcome.py +0 -0
  346. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/__init__.py +0 -0
  347. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/anidb_list.py +0 -0
  348. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/anilist.py +0 -0
  349. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/apple_trailers.py +0 -0
  350. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/betaseries_list.py +0 -0
  351. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/discover.py +0 -0
  352. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/filesystem.py +0 -0
  353. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/filmweb_watchlist.py +0 -0
  354. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_piratebay.py +0 -0
  355. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_task.py +0 -0
  356. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_telegram.py +0 -0
  357. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/gazelle.py +0 -0
  358. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/generate.py +0 -0
  359. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/html.py +0 -0
  360. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/input_csv.py +0 -0
  361. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/inputs.py +0 -0
  362. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/json.py +0 -0
  363. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/kitsu.py +0 -0
  364. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/letterboxd.py +0 -0
  365. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/limit.py +0 -0
  366. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/medusa.py +0 -0
  367. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/mock.py +0 -0
  368. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/my_anime_list.py +0 -0
  369. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/myepisodes_list.py +0 -0
  370. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/next_sonarr_episodes.py +0 -0
  371. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/npo_watchlist.py +0 -0
  372. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/parameterize.py +0 -0
  373. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/plex.py +0 -0
  374. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/pogcal.py +0 -0
  375. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/regexp_parse.py +0 -0
  376. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rlslog.py +0 -0
  377. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rottentomatoes_list.py +0 -0
  378. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rss.py +0 -0
  379. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/sceper.py +0 -0
  380. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/sickbeard.py +0 -0
  381. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/tail.py +0 -0
  382. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/text.py +0 -0
  383. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/torznab.py +0 -0
  384. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/twitterfeed.py +0 -0
  385. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/__init__.py +0 -0
  386. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/api_bluray.py +0 -0
  387. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/api_rottentomatoes.py +0 -0
  388. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/change_warn.py +0 -0
  389. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/__init__.py +0 -0
  390. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/assume_quality.py +0 -0
  391. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/bluray_lookup.py +0 -0
  392. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/check_subtitles.py +0 -0
  393. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/content_size.py +0 -0
  394. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/media_id.py +0 -0
  395. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/metainfo_movie.py +0 -0
  396. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/nfo_lookup.py +0 -0
  397. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/nzb_size.py +0 -0
  398. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/quality.py +0 -0
  399. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/rottentomatoes_lookup.py +0 -0
  400. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/task.py +0 -0
  401. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/__init__.py +0 -0
  402. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/extension.py +0 -0
  403. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/headers.py +0 -0
  404. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/manipulate.py +0 -0
  405. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/path_by_ext.py +0 -0
  406. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/path_by_space.py +0 -0
  407. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/plugin_priority.py +0 -0
  408. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/regex_extract.py +0 -0
  409. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/reorder_quality.py +0 -0
  410. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/set_field.py +0 -0
  411. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/sort_by.py +0 -0
  412. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/sort_by_weight.py +0 -0
  413. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/__init__.py +0 -0
  414. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/abort.py +0 -0
  415. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/cookies.py +0 -0
  416. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/debug_db_sessions.py +0 -0
  417. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/debug_warnings.py +0 -0
  418. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/digest.py +0 -0
  419. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/disable.py +0 -0
  420. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/disable_phases.py +0 -0
  421. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/domain_delay.py +0 -0
  422. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/entry_trace.py +0 -0
  423. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/formlogin.py +0 -0
  424. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/free_space.py +0 -0
  425. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/include.py +0 -0
  426. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/interval.py +0 -0
  427. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/log_filter.py +0 -0
  428. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/manual.py +0 -0
  429. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/max_reruns.py +0 -0
  430. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/pathscrub.py +0 -0
  431. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/priority.py +0 -0
  432. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/proxy.py +0 -0
  433. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/rerun.py +0 -0
  434. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/run_task.py +0 -0
  435. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/sequence.py +0 -0
  436. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/sleep.py +0 -0
  437. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/spy_headers.py +0 -0
  438. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/template.py +0 -0
  439. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verbose.py +0 -0
  440. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verbose_details.py +0 -0
  441. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verify_ssl_certificates.py +0 -0
  442. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/version_checker.py +0 -0
  443. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/__init__.py +0 -0
  444. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/download.py +0 -0
  445. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/download_auth.py +0 -0
  446. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/dump.py +0 -0
  447. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/dump_config.py +0 -0
  448. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/exec.py +0 -0
  449. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/file_operations.py +0 -0
  450. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/html.py +0 -0
  451. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/memusage.py +0 -0
  452. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/mock_output.py +0 -0
  453. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/rss.py +0 -0
  454. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/rtorrent_magnet.py +0 -0
  455. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/sabnzbd.py +0 -0
  456. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/sns.py +0 -0
  457. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles.py +0 -0
  458. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles_periscope.py +0 -0
  459. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles_subliminal.py +0 -0
  460. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/symlink.py +0 -0
  461. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/utorrent.py +0 -0
  462. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/__init__.py +0 -0
  463. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/kodi_library.py +0 -0
  464. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/myepisodes.py +0 -0
  465. {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/pogcal_acquired.py +0 -0
  466. {flexget-3.20.2 → flexget-3.20.4}/flexget/resources/flexget.png +0 -0
  467. {flexget-3.20.2 → flexget-3.20.4}/flexget/task.py +0 -0
  468. {flexget-3.20.2 → flexget-3.20.4}/flexget/task_queue.py +0 -0
  469. {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/entry/default.template +0 -0
  470. {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/default.template +0 -0
  471. {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/html.template +0 -0
  472. {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/rss.template +0 -0
  473. {flexget-3.20.2 → flexget-3.20.4}/flexget/terminal.py +0 -0
  474. {flexget-3.20.2 → flexget-3.20.4}/flexget/tray_icon.py +0 -0
  475. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/__init__.py +0 -0
  476. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/.eslintignore +0 -0
  477. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/.eslintrc +0 -0
  478. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/README.rst +0 -0
  479. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/__init__.py +0 -0
  480. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/bower.json +0 -0
  481. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/build.js +0 -0
  482. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/inject.js +0 -0
  483. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/lint.js +0 -0
  484. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/proxy.js +0 -0
  485. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/scripts.js +0 -0
  486. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/server.js +0 -0
  487. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/styles.js +0 -0
  488. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/test.js +0 -0
  489. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/watch.js +0 -0
  490. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulpfile.js +0 -0
  491. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/karma.conf.js +0 -0
  492. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/load.failure.html +0 -0
  493. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/package.json +0 -0
  494. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/specs.html +0 -0
  495. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.html +0 -0
  496. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.loading.js +0 -0
  497. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.module.js +0 -0
  498. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.scss +0 -0
  499. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.utils.js +0 -0
  500. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/assets/icons/ic_movie_black_24px.svg +0 -0
  501. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/assets/images/header.png +0 -0
  502. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/_error-dialog.scss +0 -0
  503. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.component.js +0 -0
  504. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.component.spec.js +0 -0
  505. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.tmpl.html +0 -0
  506. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.module.js +0 -0
  507. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.service.js +0 -0
  508. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.service.spec.js +0 -0
  509. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.module.js +0 -0
  510. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.service.js +0 -0
  511. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.service.spec.js +0 -0
  512. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/_pagination.scss +0 -0
  513. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.component.js +0 -0
  514. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.filter.js +0 -0
  515. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.module.js +0 -0
  516. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.tmpl.html +0 -0
  517. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.module.js +0 -0
  518. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.provider.js +0 -0
  519. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.provider.spec.js +0 -0
  520. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.config.js +0 -0
  521. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.module.js +0 -0
  522. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.service.js +0 -0
  523. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.service.spec.js +0 -0
  524. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.component.js +0 -0
  525. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.component.spec.js +0 -0
  526. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.module.js +0 -0
  527. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.route.js +0 -0
  528. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.route.spec.js +0 -0
  529. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.tmpl.html +0 -0
  530. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/_login.scss +0 -0
  531. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.config.js +0 -0
  532. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.config.spec.js +0 -0
  533. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.module.js +0 -0
  534. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.service.js +0 -0
  535. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.service.spec.js +0 -0
  536. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.component.js +0 -0
  537. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.component.spec.js +0 -0
  538. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.route.js +0 -0
  539. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.route.spec.js +0 -0
  540. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.tmpl.html +0 -0
  541. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/components.module.js +0 -0
  542. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.config.js +0 -0
  543. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.module.js +0 -0
  544. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.provider.js +0 -0
  545. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.route.js +0 -0
  546. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.route.spec.js +0 -0
  547. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/_database.scss +0 -0
  548. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.component.js +0 -0
  549. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.config.js +0 -0
  550. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.module.js +0 -0
  551. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.service.js +0 -0
  552. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.tmpl.html +0 -0
  553. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.component.js +0 -0
  554. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.component.spec.js +0 -0
  555. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.module.js +0 -0
  556. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.route.js +0 -0
  557. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.route.spec.js +0 -0
  558. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.tmpl.html +0 -0
  559. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/_sidenav.scss +0 -0
  560. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.component.js +0 -0
  561. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.component.spec.js +0 -0
  562. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.module.js +0 -0
  563. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.semver.js +0 -0
  564. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.service.js +0 -0
  565. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.service.spec.js +0 -0
  566. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.tmpl.html +0 -0
  567. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.component.js +0 -0
  568. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.component.spec.js +0 -0
  569. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.config.js +0 -0
  570. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.module.js +0 -0
  571. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.provider.js +0 -0
  572. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.tmpl.html +0 -0
  573. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/user/user.module.js +0 -0
  574. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/construction.tmpl.html +0 -0
  575. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/directives/directives.module.js +0 -0
  576. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/directives/palette-background/palette-background.directive.js +0 -0
  577. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/favicon.ico +0 -0
  578. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/layout.tmpl.html +0 -0
  579. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.component.js +0 -0
  580. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.component.spec.js +0 -0
  581. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.module.js +0 -0
  582. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.route.js +0 -0
  583. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.route.spec.js +0 -0
  584. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.service.js +0 -0
  585. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.tmpl.html +0 -0
  586. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.component.js +0 -0
  587. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.component.spec.js +0 -0
  588. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.tmpl.html +0 -0
  589. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.component.js +0 -0
  590. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.component.spec.js +0 -0
  591. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.tmpl.html +0 -0
  592. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.component.js +0 -0
  593. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.component.spec.js +0 -0
  594. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.filter.js +0 -0
  595. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.filter.spec.js +0 -0
  596. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.module.js +0 -0
  597. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.route.js +0 -0
  598. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.route.spec.js +0 -0
  599. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.service.js +0 -0
  600. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.service.spec.js +0 -0
  601. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.tmpl.html +0 -0
  602. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.tmpl.scss +0 -0
  603. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.component.js +0 -0
  604. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.component.spec.js +0 -0
  605. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.module.js +0 -0
  606. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.route.js +0 -0
  607. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.route.spec.js +0 -0
  608. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.service.js +0 -0
  609. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.service.spec.js +0 -0
  610. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.tmpl.html +0 -0
  611. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.component.js +0 -0
  612. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.component.spec.js +0 -0
  613. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.module.js +0 -0
  614. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.route.js +0 -0
  615. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.route.spec.js +0 -0
  616. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.service.js +0 -0
  617. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.tmpl.html +0 -0
  618. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.tmpl.scss +0 -0
  619. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-input.directive.js +0 -0
  620. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-item.component.js +0 -0
  621. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-item.tmpl.html +0 -0
  622. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.controller.js +0 -0
  623. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.service.js +0 -0
  624. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.tmpl.html +0 -0
  625. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.component.js +0 -0
  626. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.component.spec.js +0 -0
  627. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.scss +0 -0
  628. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.tmpl.html +0 -0
  629. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.component.js +0 -0
  630. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.component.spec.js +0 -0
  631. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.tmpl.html +0 -0
  632. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.component.js +0 -0
  633. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.component.spec.js +0 -0
  634. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.tmpl.html +0 -0
  635. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.component.js +0 -0
  636. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.component.spec.js +0 -0
  637. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.module.js +0 -0
  638. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.route.js +0 -0
  639. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.route.spec.js +0 -0
  640. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.service.js +0 -0
  641. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.service.spec.js +0 -0
  642. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.tmpl.html +0 -0
  643. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.tmpl.scss +0 -0
  644. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.component.js +0 -0
  645. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.module.js +0 -0
  646. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.route.js +0 -0
  647. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.scss +0 -0
  648. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.service.js +0 -0
  649. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.tmpl.html +0 -0
  650. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/plugins.module.js +0 -0
  651. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.component.js +0 -0
  652. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.component.spec.js +0 -0
  653. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.module.js +0 -0
  654. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.route.js +0 -0
  655. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.route.spec.js +0 -0
  656. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.service.js +0 -0
  657. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.service.spec.js +0 -0
  658. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.tmpl.html +0 -0
  659. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.component.js +0 -0
  660. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.component.spec.js +0 -0
  661. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.tmpl.html +0 -0
  662. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-field/seen-field.component.js +0 -0
  663. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-field/seen-field.tmpl.html +0 -0
  664. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.component.js +0 -0
  665. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.component.spec.js +0 -0
  666. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.module.js +0 -0
  667. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.route.js +0 -0
  668. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.route.spec.js +0 -0
  669. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.service.js +0 -0
  670. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.service.spec.js +0 -0
  671. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.tmpl.html +0 -0
  672. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.component.js +0 -0
  673. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.component.spec.js +0 -0
  674. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.scss +0 -0
  675. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.tmpl.html +0 -0
  676. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.component.js +0 -0
  677. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.component.spec.js +0 -0
  678. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.tmpl.html +0 -0
  679. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-begin-dialog/series-begin-dialog.component.js +0 -0
  680. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-begin-dialog/series-begin-dialog.tmpl.html +0 -0
  681. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.component.js +0 -0
  682. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.component.spec.js +0 -0
  683. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.scss +0 -0
  684. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.tmpl.html +0 -0
  685. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.component.js +0 -0
  686. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.component.spec.js +0 -0
  687. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.scss +0 -0
  688. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.tmpl.html +0 -0
  689. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.component.js +0 -0
  690. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.component.spec.js +0 -0
  691. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.scss +0 -0
  692. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.tmpl.html +0 -0
  693. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.component.js +0 -0
  694. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.component.spec.js +0 -0
  695. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.module.js +0 -0
  696. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.route.js +0 -0
  697. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.route.spec.js +0 -0
  698. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.service.js +0 -0
  699. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.service.spec.js +0 -0
  700. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.tmpl.html +0 -0
  701. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/loading-dialog.component.js +0 -0
  702. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/loading-dialog.tmpl.html +0 -0
  703. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.config.js +0 -0
  704. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.module.js +0 -0
  705. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.service.js +0 -0
  706. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.component.js +0 -0
  707. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.module.js +0 -0
  708. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.route.js +0 -0
  709. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.service.js +0 -0
  710. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.tmpl.html +0 -0
  711. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.tmpl.scss +0 -0
  712. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_header.scss +0 -0
  713. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_loading-bar.scss +0 -0
  714. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_variables.scss +0 -0
  715. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/flexget.scss +0 -0
  716. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/services/schema.service.js +0 -0
  717. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/config.js +0 -0
  718. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/execute.js +0 -0
  719. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/history.js +0 -0
  720. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/movie_list.js +0 -0
  721. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/registerPlugin.js +0 -0
  722. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/schedules.js +0 -0
  723. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/seen.js +0 -0
  724. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/series.js +0 -0
  725. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/states.js +0 -0
  726. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/README.rst +0 -0
  727. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/__init__.py +0 -0
  728. {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/index.html +0 -0
  729. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/__init__.py +0 -0
  730. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/bittorrent.py +0 -0
  731. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/cache.py +0 -0
  732. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/cached_input.py +0 -0
  733. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/database.py +0 -0
  734. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/json.py +0 -0
  735. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/lazy_dict.py +0 -0
  736. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/log.py +0 -0
  737. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/__init__.py +0 -0
  738. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/generic.py +0 -0
  739. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/movie.py +0 -0
  740. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/parser.py +0 -0
  741. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/series.py +0 -0
  742. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/pathscrub.py +0 -0
  743. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/qualities.py +0 -0
  744. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/requests.py +0 -0
  745. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/serialization.py +0 -0
  746. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/simple_persistence.py +0 -0
  747. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/soup.py +0 -0
  748. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/sqlalchemy_utils.py +0 -0
  749. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/template.py +0 -0
  750. {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/tools.py +0 -0
  751. {flexget-3.20.2 → flexget-3.20.4}/flexget/webserver.py +0 -0
  752. {flexget-3.20.2 → flexget-3.20.4}/scripts/build_locked_extras.py +0 -0
  753. {flexget-3.20.2 → flexget-3.20.4}/scripts/bundle_webui.py +0 -0
@@ -25,6 +25,7 @@
25
25
  /.Python
26
26
  /lib64
27
27
  FlexGet.egg-info/
28
+ __pycache__/
28
29
  bin/
29
30
  build/
30
31
  cached_resources/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flexget
3
- Version: 3.20.2
3
+ Version: 3.20.4
4
4
  Summary: FlexGet is a program aimed to automate downloading or processing content (torrents, podcasts, etc.) from different sources like RSS-feeds, html-pages, various sites and more.
5
5
  Project-URL: Issue Tracker, https://github.com/Flexget/Flexget/issues
6
6
  Project-URL: Forum, https://github.com/Flexget/Flexget/discussions
@@ -28,6 +28,8 @@ Requires-Python: >=3.10
28
28
  Requires-Dist: apscheduler~=3.11
29
29
  Requires-Dist: beautifulsoup4~=4.12
30
30
  Requires-Dist: cherrypy~=18.10
31
+ Requires-Dist: cryptography~=50.0
32
+ Requires-Dist: curl-cffi~=0.16
31
33
  Requires-Dist: feedparser~=6.0
32
34
  Requires-Dist: flask-compress~=1.17
33
35
  Requires-Dist: flask-cors~=6.0
@@ -45,6 +47,7 @@ Requires-Dist: psutil~=7.0
45
47
  Requires-Dist: pynzb~=0.1.0
46
48
  Requires-Dist: pyparsing~=3.2
47
49
  Requires-Dist: pyrss2gen~=1.1
50
+ Requires-Dist: pyscrypt~=1.6
48
51
  Requires-Dist: python-dateutil~=2.9
49
52
  Requires-Dist: pyyaml~=6.0
50
53
  Requires-Dist: rebulk~=3.2
@@ -56,7 +59,7 @@ Requires-Dist: typing-extensions>=4.16; python_version <= '3.12'
56
59
  Requires-Dist: werkzeug~=3.1
57
60
  Requires-Dist: zxcvbn~=4.4
58
61
  Provides-Extra: all
59
- Requires-Dist: aiofiles==24.1.0; extra == 'all'
62
+ Requires-Dist: aiofiles==25.1.0; extra == 'all'
60
63
  Requires-Dist: aiohappyeyeballs==2.7.1; extra == 'all'
61
64
  Requires-Dist: aiohttp-socks==0.11.0; extra == 'all'
62
65
  Requires-Dist: aiohttp==3.14.3; extra == 'all'
@@ -67,11 +70,11 @@ Requires-Dist: attrs==26.1.0; extra == 'all'
67
70
  Requires-Dist: babelfish==0.6.1; extra == 'all'
68
71
  Requires-Dist: bcrypt==5.0.0; extra == 'all'
69
72
  Requires-Dist: beautifulsoup4==4.15.0; extra == 'all'
70
- Requires-Dist: boto3==1.43.63; extra == 'all'
71
- Requires-Dist: botocore==1.43.63; extra == 'all'
73
+ Requires-Dist: boto3==1.43.67; extra == 'all'
74
+ Requires-Dist: botocore==1.43.67; extra == 'all'
72
75
  Requires-Dist: certifi==2026.7.22; extra == 'all'
73
76
  Requires-Dist: cffi==2.1.1; (platform_python_implementation != 'PyPy') and extra == 'all'
74
- Requires-Dist: chardet==7.4.3; extra == 'all'
77
+ Requires-Dist: chardet==7.5.1; extra == 'all'
75
78
  Requires-Dist: charset-normalizer==3.4.9; extra == 'all'
76
79
  Requires-Dist: click-option-group==0.5.9; extra == 'all'
77
80
  Requires-Dist: click==8.4.2; extra == 'all'
@@ -96,12 +99,12 @@ Requires-Dist: idna==3.18; extra == 'all'
96
99
  Requires-Dist: jmespath==1.1.0; extra == 'all'
97
100
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == 'all'
98
101
  Requires-Dist: jsonschema==4.26.0; extra == 'all'
99
- Requires-Dist: knowit==0.5.11; extra == 'all'
102
+ Requires-Dist: knowit==0.6.1; extra == 'all'
100
103
  Requires-Dist: matrix-nio==0.26.0; extra == 'all'
101
104
  Requires-Dist: multidict==6.7.1; extra == 'all'
102
- Requires-Dist: packaging==26.2; extra == 'all'
105
+ Requires-Dist: packaging==26.3; extra == 'all'
103
106
  Requires-Dist: paramiko==3.5.1; extra == 'all'
104
- Requires-Dist: platformdirs==4.11.0; extra == 'all'
107
+ Requires-Dist: platformdirs==4.11.1; extra == 'all'
105
108
  Requires-Dist: plexapi==4.18.2; extra == 'all'
106
109
  Requires-Dist: propcache==0.5.2; extra == 'all'
107
110
  Requires-Dist: pycparser==3.0; (implementation_name != 'PyPy' and platform_python_implementation != 'PyPy') and extra == 'all'
@@ -124,21 +127,21 @@ Requires-Dist: rpds-py==2026.6.3; (python_full_version >= '3.11') and extra == '
124
127
  Requires-Dist: s3transfer==0.19.2; extra == 'all'
125
128
  Requires-Dist: six==1.17.0; extra == 'all'
126
129
  Requires-Dist: socksio==1.0.0; extra == 'all'
127
- Requires-Dist: soupsieve==2.9.1; extra == 'all'
130
+ Requires-Dist: soupsieve==2.9.2; extra == 'all'
128
131
  Requires-Dist: srt==3.5.3; extra == 'all'
129
132
  Requires-Dist: stevedore==5.8.0; (python_full_version < '3.11') and extra == 'all'
130
133
  Requires-Dist: stevedore==5.9.0; (python_full_version >= '3.11') and extra == 'all'
131
134
  Requires-Dist: subliminal==2.7.1; extra == 'all'
132
135
  Requires-Dist: tomlkit==0.15.1; extra == 'all'
133
- Requires-Dist: trakit==0.2.5; extra == 'all'
134
- Requires-Dist: transmission-rpc==7.0.11; extra == 'all'
136
+ Requires-Dist: trakit==0.3.0; extra == 'all'
137
+ Requires-Dist: transmission-rpc==7.0.12; extra == 'all'
135
138
  Requires-Dist: typing-extensions==4.16.0; extra == 'all'
136
139
  Requires-Dist: unpaddedbase64==2.1.0; extra == 'all'
137
140
  Requires-Dist: urllib3==2.7.0; extra == 'all'
138
141
  Requires-Dist: yarl==1.24.5; extra == 'all'
139
142
  Provides-Extra: boto3
140
- Requires-Dist: boto3==1.43.63; extra == 'boto3'
141
- Requires-Dist: botocore==1.43.63; extra == 'boto3'
143
+ Requires-Dist: boto3==1.43.67; extra == 'boto3'
144
+ Requires-Dist: botocore==1.43.67; extra == 'boto3'
142
145
  Requires-Dist: jmespath==1.1.0; extra == 'boto3'
143
146
  Requires-Dist: python-dateutil==2.9.0.post0; extra == 'boto3'
144
147
  Requires-Dist: s3transfer==0.19.2; extra == 'boto3'
@@ -161,13 +164,15 @@ Requires-Dist: blinker==1.9.0; extra == 'locked'
161
164
  Requires-Dist: brotli==1.2.0; (platform_python_implementation != 'PyPy') and extra == 'locked'
162
165
  Requires-Dist: brotlicffi==1.2.0.1; (platform_python_implementation == 'PyPy') and extra == 'locked'
163
166
  Requires-Dist: certifi==2026.7.22; extra == 'locked'
164
- Requires-Dist: cffi==2.1.1; (platform_python_implementation == 'PyPy') and extra == 'locked'
167
+ Requires-Dist: cffi==2.1.1; extra == 'locked'
165
168
  Requires-Dist: charset-normalizer==3.4.9; extra == 'locked'
166
169
  Requires-Dist: cheroot==11.1.2; extra == 'locked'
167
170
  Requires-Dist: cherrypy==18.10.0; extra == 'locked'
168
171
  Requires-Dist: click==8.4.2; extra == 'locked'
169
172
  Requires-Dist: colorama==0.4.6; (sys_platform == 'win32') and extra == 'locked'
170
- Requires-Dist: coverage==7.15.3; extra == 'locked'
173
+ Requires-Dist: coverage==7.15.4; extra == 'locked'
174
+ Requires-Dist: cryptography==50.0.0; extra == 'locked'
175
+ Requires-Dist: curl-cffi==0.16.0; extra == 'locked'
171
176
  Requires-Dist: exceptiongroup==1.3.1; (python_full_version < '3.11') and extra == 'locked'
172
177
  Requires-Dist: execnet==2.1.2; extra == 'locked'
173
178
  Requires-Dist: feedparser-sgmllib==2.1.0; extra == 'locked'
@@ -196,18 +201,19 @@ Requires-Dist: markdown-it-py==4.2.0; extra == 'locked'
196
201
  Requires-Dist: markupsafe==3.0.3; extra == 'locked'
197
202
  Requires-Dist: mdurl==0.1.2; extra == 'locked'
198
203
  Requires-Dist: more-itertools==11.1.0; extra == 'locked'
199
- Requires-Dist: packaging==26.2; extra == 'locked'
204
+ Requires-Dist: packaging==26.3; extra == 'locked'
200
205
  Requires-Dist: pendulum==3.2.0; extra == 'locked'
201
206
  Requires-Dist: pluggy==1.6.0; extra == 'locked'
202
207
  Requires-Dist: plumbum==2.0.2; extra == 'locked'
203
208
  Requires-Dist: portend==3.2.1; extra == 'locked'
204
- Requires-Dist: prek==0.4.12; extra == 'locked'
209
+ Requires-Dist: prek==0.4.13; extra == 'locked'
205
210
  Requires-Dist: psutil==7.2.2; extra == 'locked'
206
- Requires-Dist: pycparser==3.0; (implementation_name != 'PyPy' and platform_python_implementation == 'PyPy') and extra == 'locked'
211
+ Requires-Dist: pycparser==3.0; (implementation_name != 'PyPy') and extra == 'locked'
207
212
  Requires-Dist: pygments==2.20.0; extra == 'locked'
208
213
  Requires-Dist: pynzb==0.1.0; extra == 'locked'
209
214
  Requires-Dist: pyparsing==3.3.2; extra == 'locked'
210
215
  Requires-Dist: pyrss2gen==1.1; extra == 'locked'
216
+ Requires-Dist: pyscrypt==1.6.2; extra == 'locked'
211
217
  Requires-Dist: pytest-cov==7.1.0; extra == 'locked'
212
218
  Requires-Dist: pytest-socket==0.8.0; extra == 'locked'
213
219
  Requires-Dist: pytest-xdist==3.8.0; extra == 'locked'
@@ -221,11 +227,11 @@ Requires-Dist: rich==15.0.0; extra == 'locked'
221
227
  Requires-Dist: rpds-py==0.30.0; (python_full_version < '3.11') and extra == 'locked'
222
228
  Requires-Dist: rpds-py==2026.6.3; (python_full_version >= '3.11') and extra == 'locked'
223
229
  Requires-Dist: rpyc==6.0.2; extra == 'locked'
224
- Requires-Dist: ruff==0.16.0; extra == 'locked'
225
- Requires-Dist: setuptools==83.0.0; extra == 'locked'
230
+ Requires-Dist: ruff==0.16.2; extra == 'locked'
231
+ Requires-Dist: setuptools==84.0.0; extra == 'locked'
226
232
  Requires-Dist: shellingham==1.5.4; extra == 'locked'
227
233
  Requires-Dist: six==1.17.0; extra == 'locked'
228
- Requires-Dist: soupsieve==2.9.1; extra == 'locked'
234
+ Requires-Dist: soupsieve==2.9.2; extra == 'locked'
229
235
  Requires-Dist: sqlalchemy==2.0.51; extra == 'locked'
230
236
  Requires-Dist: tempora==5.12.0; extra == 'locked'
231
237
  Requires-Dist: tomli==2.4.1; (python_full_version <= '3.11') and extra == 'locked'
@@ -243,7 +249,7 @@ Requires-Dist: wrapt==2.3.0; extra == 'locked'
243
249
  Requires-Dist: zc-lockfile==4.0; extra == 'locked'
244
250
  Requires-Dist: zxcvbn==4.5.0; extra == 'locked'
245
251
  Provides-Extra: matrix
246
- Requires-Dist: aiofiles==24.1.0; extra == 'matrix'
252
+ Requires-Dist: aiofiles==25.1.0; extra == 'matrix'
247
253
  Requires-Dist: aiohappyeyeballs==2.7.1; extra == 'matrix'
248
254
  Requires-Dist: aiohttp-socks==0.11.0; extra == 'matrix'
249
255
  Requires-Dist: aiohttp==3.14.3; extra == 'matrix'
@@ -280,7 +286,7 @@ Provides-Extra: qbittorrent
280
286
  Requires-Dist: certifi==2026.7.22; extra == 'qbittorrent'
281
287
  Requires-Dist: charset-normalizer==3.4.9; extra == 'qbittorrent'
282
288
  Requires-Dist: idna==3.18; extra == 'qbittorrent'
283
- Requires-Dist: packaging==26.2; extra == 'qbittorrent'
289
+ Requires-Dist: packaging==26.3; extra == 'qbittorrent'
284
290
  Requires-Dist: qbittorrent-api==2026.8.0; extra == 'qbittorrent'
285
291
  Requires-Dist: requests==2.34.2; extra == 'qbittorrent'
286
292
  Requires-Dist: urllib3==2.7.0; extra == 'qbittorrent'
@@ -299,7 +305,7 @@ Provides-Extra: subliminal
299
305
  Requires-Dist: babelfish==0.6.1; extra == 'subliminal'
300
306
  Requires-Dist: beautifulsoup4==4.15.0; extra == 'subliminal'
301
307
  Requires-Dist: certifi==2026.7.22; extra == 'subliminal'
302
- Requires-Dist: chardet==7.4.3; extra == 'subliminal'
308
+ Requires-Dist: chardet==7.5.1; extra == 'subliminal'
303
309
  Requires-Dist: charset-normalizer==3.4.9; extra == 'subliminal'
304
310
  Requires-Dist: click-option-group==0.5.9; extra == 'subliminal'
305
311
  Requires-Dist: click==8.4.2; extra == 'subliminal'
@@ -310,8 +316,8 @@ Requires-Dist: dogpile-cache==1.5.0; extra == 'subliminal'
310
316
  Requires-Dist: enzyme==0.5.2; extra == 'subliminal'
311
317
  Requires-Dist: guessit==3.8.0; extra == 'subliminal'
312
318
  Requires-Dist: idna==3.18; extra == 'subliminal'
313
- Requires-Dist: knowit==0.5.11; extra == 'subliminal'
314
- Requires-Dist: platformdirs==4.11.0; extra == 'subliminal'
319
+ Requires-Dist: knowit==0.6.1; extra == 'subliminal'
320
+ Requires-Dist: platformdirs==4.11.1; extra == 'subliminal'
315
321
  Requires-Dist: pymediainfo==7.0.1; extra == 'subliminal'
316
322
  Requires-Dist: pysubs2==1.8.1; extra == 'subliminal'
317
323
  Requires-Dist: python-dateutil==2.9.0.post0; extra == 'subliminal'
@@ -319,13 +325,13 @@ Requires-Dist: pyyaml==6.0.3; extra == 'subliminal'
319
325
  Requires-Dist: rebulk==3.2.0; extra == 'subliminal'
320
326
  Requires-Dist: requests==2.34.2; extra == 'subliminal'
321
327
  Requires-Dist: six==1.17.0; extra == 'subliminal'
322
- Requires-Dist: soupsieve==2.9.1; extra == 'subliminal'
328
+ Requires-Dist: soupsieve==2.9.2; extra == 'subliminal'
323
329
  Requires-Dist: srt==3.5.3; extra == 'subliminal'
324
330
  Requires-Dist: stevedore==5.8.0; (python_full_version < '3.11') and extra == 'subliminal'
325
331
  Requires-Dist: stevedore==5.9.0; (python_full_version >= '3.11') and extra == 'subliminal'
326
332
  Requires-Dist: subliminal==2.7.1; extra == 'subliminal'
327
333
  Requires-Dist: tomlkit==0.15.1; extra == 'subliminal'
328
- Requires-Dist: trakit==0.2.5; extra == 'subliminal'
334
+ Requires-Dist: trakit==0.3.0; extra == 'subliminal'
329
335
  Requires-Dist: typing-extensions==4.16.0; extra == 'subliminal'
330
336
  Requires-Dist: urllib3==2.7.0; extra == 'subliminal'
331
337
  Provides-Extra: telegram
@@ -347,7 +353,7 @@ Requires-Dist: certifi==2026.7.22; extra == 'transmission'
347
353
  Requires-Dist: charset-normalizer==3.4.9; extra == 'transmission'
348
354
  Requires-Dist: idna==3.18; extra == 'transmission'
349
355
  Requires-Dist: requests==2.34.2; extra == 'transmission'
350
- Requires-Dist: transmission-rpc==7.0.11; extra == 'transmission'
356
+ Requires-Dist: transmission-rpc==7.0.12; extra == 'transmission'
351
357
  Requires-Dist: typing-extensions==4.16.0; extra == 'transmission'
352
358
  Requires-Dist: urllib3==2.7.0; extra == 'transmission'
353
359
  Description-Content-Type: text/x-rst
@@ -10,4 +10,4 @@ and update the version again for continued development.
10
10
  NOTE: Should always have all three parts of the version, even on major and minor bumps. i.e. 4.0.0.dev, not 4.0.dev
11
11
  """
12
12
 
13
- __version__ = '3.20.2'
13
+ __version__ = '3.20.4'
@@ -1,19 +1,14 @@
1
1
  from loguru import logger
2
2
 
3
3
  from flexget import plugin
4
+ from flexget.components.imdb.waf import imdb_get
4
5
  from flexget.config_schema import one_or_more
5
6
  from flexget.entry import Entry
6
7
  from flexget.event import event
7
8
  from flexget.utils import json
8
9
  from flexget.utils.cached_input import cached
9
- from flexget.utils.requests import RequestException
10
10
  from flexget.utils.soup import get_soup
11
11
 
12
- try:
13
- from playwright.sync_api import sync_playwright
14
- except ImportError:
15
- sync_playwright = None
16
-
17
12
  logger = logger.bind(name='imdb_watchlist')
18
13
  USER_ID_RE = r'^ur\d{7,9}$'
19
14
  CUSTOM_LIST_RE = r'^ls\d{7,10}$'
@@ -34,9 +29,6 @@ TITLE_TYPE_MAP = {
34
29
  class ImdbWatchlist:
35
30
  """Creates an entry for each movie in your imdb list."""
36
31
 
37
- def __init__(self):
38
- self._waf_cookies = None
39
-
40
32
  schema = {
41
33
  'type': 'object',
42
34
  'properties': {
@@ -109,80 +101,14 @@ class ImdbWatchlist:
109
101
  params['title_type'] = ','.join(title_types)
110
102
  params['sort'] = 'list_order%2Casc'
111
103
 
112
- if config['list'] == 'watchlist':
113
- entries = self.parse_html_list(
114
- task, config, url, params, headers, kind='predefinedList'
115
- )
116
- else:
117
- entries = self.parse_html_list(task, config, url, params, headers)
118
- return entries
119
-
120
- def _solve_waf(self, url, params, headers):
121
- """Bypass AWS WAF JS challenge using Playwright (optional dep).
122
-
123
- Returns cookies dict with aws-waf-token, or None on failure.
124
- """
125
- if sync_playwright is None:
126
- logger.warning(
127
- 'AWS WAF challenge detected. Install playwright to bypass: '
128
- 'pip install playwright && playwright install chromium'
129
- )
130
- return None
131
-
132
- logger.info('Solving AWS WAF challenge via Playwright headless browser...')
133
- try:
134
- with sync_playwright() as pw:
135
- browser = pw.chromium.launch(headless=True)
136
- context = browser.new_context(
137
- user_agent=headers.get('User-Agent', self.default_user_agent),
138
- locale=headers.get('Accept-Language', 'en-us').replace('-', '_'),
139
- )
140
- page = context.new_page()
141
- page.set_extra_http_headers({
142
- 'Accept-Language': headers.get('Accept-Language', 'en-us')
143
- })
144
- page.goto(
145
- url + '?' + '&'.join(f'{k}={v}' for k, v in params.items()),
146
- wait_until='networkidle',
147
- timeout=30000,
148
- )
149
- cookies = page.context.cookies()
150
- browser.close()
151
-
152
- cookie_dict = {c['name']: c['value'] for c in cookies}
153
- if 'aws-waf-token' in cookie_dict:
154
- logger.debug('Successfully obtained aws-waf-token from Playwright')
155
- return cookie_dict
156
- logger.warning('Playwright did not receive aws-waf-token cookie')
157
- return None # noqa: TRY300
158
- except Exception as e:
159
- logger.warning('Failed to solve AWS WAF challenge with Playwright: {}', e)
160
- return None
104
+ return self.parse_html_list(task, config, url, params, headers)
161
105
 
162
106
  def fetch_page(self, task, url, params, headers):
163
107
  logger.debug('Requesting: {} {}', url, headers)
164
-
165
- # If we have cached WAF cookies from a previous solve, attach them
166
- if self._waf_cookies:
167
- task.requests.cookies.update(self._waf_cookies)
168
-
169
108
  try:
170
- page = task.requests.get(url, params=params, headers=headers)
171
- except RequestException as e:
172
- raise plugin.PluginError(str(e))
173
-
174
- # AWS WAF JS challenge detected — solve it via Playwright
175
- if page.status_code == 202 and page.headers.get('x-amzn-waf-action') == 'challenge':
176
- logger.info('IMDB WAF challenge triggered, attempting to bypass...')
177
- waf_cookies = self._solve_waf(url, params, headers)
178
- if waf_cookies:
179
- self._waf_cookies = waf_cookies
180
- task.requests.cookies.update(waf_cookies)
181
- try:
182
- page = task.requests.get(url, params=params, headers=headers)
183
- except RequestException as e:
184
- raise plugin.PluginError(str(e))
185
-
109
+ page = imdb_get(url, params=params, headers=headers, raise_status=False)
110
+ except Exception as e:
111
+ raise plugin.PluginError(str(e)) from e
186
112
  if page.status_code != 200:
187
113
  raise plugin.PluginError(
188
114
  f'Unable to get imdb list. Either list is private or does not exist. '
@@ -190,7 +116,7 @@ class ImdbWatchlist:
190
116
  )
191
117
  return page
192
118
 
193
- def parse_html_list(self, task, config, url, params, headers, kind='list') -> list[Entry]:
119
+ def parse_html_list(self, task, config, url, params, headers) -> list[Entry]:
194
120
  logger.debug('Parsing imdb list: {}', url)
195
121
  page = self.fetch_page(task, url, params, headers)
196
122
  soup = get_soup(page.text)
@@ -198,22 +124,14 @@ class ImdbWatchlist:
198
124
  query_result = json.loads(
199
125
  soup.find('script', id='__NEXT_DATA__', type='application/json').string
200
126
  )
201
-
202
- # Handle different JSON structures for different list types
127
+ advanced_search = query_result['props']['pageProps']['mainColumnData'][
128
+ 'advancedTitleSearch'
129
+ ]
203
130
  if config['list'] == 'ratings':
204
- # Ratings use advancedTitleSearch structure
205
- advanced_search = query_result['props']['pageProps']['mainColumnData'][
206
- 'advancedTitleSearch'
207
- ]
208
131
  total_item_count = advanced_search['total']
209
- items = advanced_search['edges']
210
132
  else:
211
- # Watchlists and other lists use the existing structure
212
133
  total_item_count = query_result['props']['pageProps']['totalItems']
213
- items = query_result['props']['pageProps']['mainColumnData'][kind][
214
- 'titleListItemSearch'
215
- ]['edges']
216
-
134
+ items = advanced_search['edges']
217
135
  logger.verbose('imdb list contains {} items', total_item_count)
218
136
  except Exception:
219
137
  total_item_count = 0
@@ -234,26 +152,15 @@ class ImdbWatchlist:
234
152
  query_result = json.loads(
235
153
  soup.find('script', id='__NEXT_DATA__', type='application/json').string
236
154
  )
237
-
238
- # Handle pagination for different structures
239
- if config['list'] == 'ratings':
240
- new_items = query_result['props']['pageProps']['mainColumnData'][
241
- 'advancedTitleSearch'
242
- ]['edges']
243
- else:
244
- new_items = query_result['props']['pageProps']['mainColumnData'][kind][
245
- 'titleListItemSearch'
246
- ]['edges']
247
- items.extend(new_items)
155
+ items.extend(
156
+ query_result['props']['pageProps']['mainColumnData']['advancedTitleSearch'][
157
+ 'edges'
158
+ ]
159
+ )
248
160
  except Exception:
249
161
  raise plugin.PluginError('Received invalid list data')
250
162
 
251
- # Extract the actual list items from the different structures
252
- if config['list'] == 'ratings':
253
- # For ratings, items are directly in edges with 'node' containing the title
254
- return [self.parse_entry(item['node']['title'], config) for item in items]
255
- # For other lists, items are in edges with 'listItem' structure
256
- return [self.parse_entry(item['listItem'], config) for item in items]
163
+ return [self.parse_entry(item['node']['title'], config) for item in items]
257
164
 
258
165
  def parse_entry(self, item, config) -> Entry:
259
166
  entry = Entry()
@@ -8,6 +8,7 @@ from loguru import logger
8
8
  from requests import RequestException
9
9
 
10
10
  from flexget import plugin
11
+ from flexget.components.imdb.waf import imdb_get, set_domain_limiter
11
12
  from flexget.utils.requests import Session, TimedLimiter
12
13
  from flexget.utils.soup import get_soup
13
14
  from flexget.utils.tools import str_to_int
@@ -28,7 +29,9 @@ requests.headers.update({
28
29
  })
29
30
 
30
31
  # give imdb a little break between requests
31
- requests.add_domain_limiter(TimedLimiter('imdb.com', '3 seconds'))
32
+ imdb_limiter = TimedLimiter('imdb.com', '3 seconds')
33
+ requests.add_domain_limiter(imdb_limiter)
34
+ set_domain_limiter(imdb_limiter)
32
35
 
33
36
  # Title pages are often served as an AWS WAF challenge to non-browser clients; use the same
34
37
  # GraphQL endpoint the site uses.
@@ -312,7 +315,7 @@ class ImdbParser:
312
315
  self.votes,
313
316
  )
314
317
  return
315
- page = requests.get(url)
318
+ page = imdb_get(url)
316
319
  soup = get_soup(page.text)
317
320
  else:
318
321
  logger.debug('IMDb parsing {} from provided HTML', self.imdb_id)
@@ -588,27 +591,48 @@ class ImdbParser:
588
591
  if not self.plot_outline:
589
592
  logger.debug('No storyline found for {}', self.imdb_id)
590
593
 
591
- storyline_keywords = data.get('keywords') or ''
592
- if storyline_keywords:
593
- self.plot_keywords = storyline_keywords.split(',')
594
-
595
594
  genres = (above_the_fold_data.get('genres', {}) or {}).get('genres', [])
596
595
  self.genres = [g['text'].lower() for g in genres]
597
596
 
598
- # Cast section
599
- cast_data = main_column_data.get('cast', {}) or {}
600
- for cast_node in cast_data.get('edges') or []:
601
- actor_node = (cast_node.get('node') or {}).get('name') or {}
602
- actor_id = actor_node.get('id')
603
- actor_name = (actor_node.get('nameText') or {}).get('text')
604
- if actor_id and actor_name:
605
- self.actors[actor_id] = actor_name
606
-
607
- principal_cast_data = main_column_data.get('principalCast', []) or []
608
- if principal_cast_data:
609
- for cast_node in principal_cast_data[0].get('credits') or []:
610
- actor_node = cast_node.get('name') or {}
597
+ keywords_data = above_the_fold_data.get('keywords')
598
+ if keywords_data and keywords_data.get('edges'):
599
+ self.plot_keywords = [
600
+ edge['node']['text']
601
+ for edge in keywords_data['edges']
602
+ if edge.get('node', {}).get('text')
603
+ ]
604
+ elif storyline_keywords := data.get('keywords') or '':
605
+ self.plot_keywords = storyline_keywords.split(',')
606
+
607
+ # Cast section (castV2 is the current format)
608
+ for cast_group in main_column_data.get('castV2') or []:
609
+ self._parse_person_credits(cast_group.get('credits'), self.actors)
610
+
611
+ # Legacy cast formats
612
+ if not self.actors:
613
+ cast_data = main_column_data.get('cast', {}) or {}
614
+ for cast_node in cast_data.get('edges') or []:
615
+ actor_node = (cast_node.get('node') or {}).get('name') or {}
611
616
  actor_id = actor_node.get('id')
612
617
  actor_name = (actor_node.get('nameText') or {}).get('text')
613
618
  if actor_id and actor_name:
614
619
  self.actors[actor_id] = actor_name
620
+
621
+ if not self.actors:
622
+ principal_cast_data = main_column_data.get('principalCast', []) or []
623
+ if principal_cast_data:
624
+ for cast_node in principal_cast_data[0].get('credits') or []:
625
+ actor_node = cast_node.get('name') or {}
626
+ actor_id = actor_node.get('id')
627
+ actor_name = (actor_node.get('nameText') or {}).get('text')
628
+ if actor_id and actor_name:
629
+ self.actors[actor_id] = actor_name
630
+
631
+ @staticmethod
632
+ def _parse_person_credits(credits, persons):
633
+ for credit in credits or []:
634
+ name_node = credit.get('name') or {}
635
+ person_id = name_node.get('id')
636
+ person_name = (name_node.get('nameText') or {}).get('text')
637
+ if person_id and person_name:
638
+ persons[person_id] = person_name
@@ -0,0 +1,70 @@
1
+ """AWS WAF challenge handling for IMDB requests."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import threading
6
+ from typing import TYPE_CHECKING
7
+
8
+ from loguru import logger
9
+
10
+ from flexget.utils.waf import waf_get
11
+
12
+ if TYPE_CHECKING:
13
+ from curl_cffi.requests import Response
14
+
15
+ logger = logger.bind(name='imdb.waf')
16
+
17
+ IMDB_USER_AGENT = (
18
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
19
+ '(KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'
20
+ )
21
+
22
+ IMDB_BROWSER_HEADERS = {
23
+ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
24
+ 'accept-language': 'en-US,en;q=0.9',
25
+ 'sec-ch-ua': '"Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"',
26
+ 'sec-ch-ua-mobile': '?0',
27
+ 'sec-ch-ua-platform': '"Windows"',
28
+ 'sec-fetch-dest': 'document',
29
+ 'sec-fetch-mode': 'navigate',
30
+ 'sec-fetch-site': 'none',
31
+ 'sec-fetch-user': '?1',
32
+ 'upgrade-insecure-requests': '1',
33
+ 'user-agent': IMDB_USER_AGENT,
34
+ }
35
+
36
+ _session = None
37
+ _session_lock = threading.Lock()
38
+ _domain_limiter = None
39
+
40
+
41
+ def _get_session():
42
+ from curl_cffi import requests as curl_requests
43
+
44
+ global _session
45
+ if _session is None:
46
+ with _session_lock:
47
+ if _session is None:
48
+ _session = curl_requests.Session(impersonate='chrome')
49
+ _session.headers.update(IMDB_BROWSER_HEADERS)
50
+ return _session
51
+
52
+
53
+ def set_domain_limiter(limiter) -> None:
54
+ """Register a rate limiter to run before each IMDB page request."""
55
+ global _domain_limiter
56
+ _domain_limiter = limiter
57
+
58
+
59
+ def imdb_get(url: str, *, raise_status: bool = True, **kwargs) -> Response:
60
+ """GET an IMDB page, solving AWS WAF challenges when needed."""
61
+ return waf_get(
62
+ _get_session(),
63
+ url,
64
+ domain='imdb.com',
65
+ cookie_domain='.imdb.com',
66
+ user_agent=IMDB_USER_AGENT,
67
+ limiter=_domain_limiter,
68
+ raise_status=raise_status,
69
+ **kwargs,
70
+ )
@@ -0,0 +1,7 @@
1
+ # AWS waf
2
+
3
+ Source:
4
+
5
+ https://github.com/xKiian/awswaf
6
+
7
+ License: MIT
@@ -0,0 +1,63 @@
1
+ """Generic AWS WAF challenge handling."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from loguru import logger
8
+
9
+ from flexget.utils.waf.aws import AwsWaf
10
+
11
+ if TYPE_CHECKING:
12
+ from curl_cffi.requests import Response, Session
13
+
14
+ logger = logger.bind(name='utils.waf')
15
+
16
+ __all__ = ['AwsWaf', 'is_waf_challenge', 'solve_waf', 'waf_get']
17
+
18
+
19
+ def is_waf_challenge(response: Any) -> bool:
20
+ if response.status_code == 202:
21
+ return True
22
+ if response.headers.get('x-amzn-waf-action') == 'challenge':
23
+ return True
24
+ return bool(response.text and 'window.gokuProps' in response.text)
25
+
26
+
27
+ def solve_waf(response: Any, domain: str, user_agent: str | None = None) -> str:
28
+ goku, host = AwsWaf.extract(response.text)
29
+ logger.debug('Solving AWS WAF challenge for {}', domain)
30
+ kwargs = {'user_agent': user_agent} if user_agent else {}
31
+ token = AwsWaf(goku, host, domain, **kwargs)()
32
+ logger.debug('AWS WAF challenge solved for {}', domain)
33
+ return token
34
+
35
+
36
+ def waf_get(
37
+ session: Session,
38
+ url: str,
39
+ *,
40
+ domain: str,
41
+ cookie_domain: str | None = None,
42
+ user_agent: str | None = None,
43
+ limiter=None,
44
+ raise_status: bool = True,
45
+ **kwargs,
46
+ ) -> Response:
47
+ """GET a URL, solving an AWS WAF challenge and retrying once if one is served."""
48
+ if limiter is not None:
49
+ limiter()
50
+
51
+ headers = kwargs.pop('headers', None)
52
+ req_headers = {**session.headers, **headers} if headers else None
53
+
54
+ response = session.get(url, headers=req_headers, **kwargs)
55
+ if is_waf_challenge(response):
56
+ token = solve_waf(response, domain, user_agent)
57
+ session.cookies.set('aws-waf-token', token, domain=cookie_domain or f'.{domain}')
58
+ response = session.get(url, headers=req_headers, **kwargs)
59
+
60
+ if raise_status and response.status_code >= 400:
61
+ response.raise_for_status()
62
+
63
+ return response