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.
- {flexget-3.20.2 → flexget-3.20.4}/.gitignore +1 -0
- {flexget-3.20.2 → flexget-3.20.4}/PKG-INFO +35 -29
- {flexget-3.20.2 → flexget-3.20.4}/flexget/_version.py +1 -1
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_watchlist.py +16 -109
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/utils.py +43 -19
- flexget-3.20.4/flexget/components/imdb/waf.py +70 -0
- flexget-3.20.4/flexget/utils/waf/README.md +7 -0
- flexget-3.20.4/flexget/utils/waf/__init__.py +63 -0
- flexget-3.20.4/flexget/utils/waf/aws.py +99 -0
- flexget-3.20.4/flexget/utils/waf/crypto.py +29 -0
- flexget-3.20.4/flexget/utils/waf/fingerprint.py +128 -0
- flexget-3.20.4/flexget/utils/waf/verify.py +56 -0
- flexget-3.20.4/flexget/utils/waf/webgl.json +106 -0
- {flexget-3.20.2 → flexget-3.20.4}/pyproject.toml +8 -1
- {flexget-3.20.2 → flexget-3.20.4}/LICENSE +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/README.rst +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/app.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/authentication.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/cached.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/database.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/format_checker.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/plugins.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/schema.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/server.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/tasks.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/core/user.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/templates/api_response.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/api/templates/swagger-ui.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/README.md +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/archive.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archive/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/archives.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/decompress.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/archives/utils.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/backlog.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/backlog/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/convert_magnet.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/magnet_info_hash.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/private_torrents.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_alive.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_files.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_match.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_scrub.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/torrent_size.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/bittorrent/trackers.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/api_emby.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_refresh.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/emby_util.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/emby/from_emby.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimate_release.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_movies_bluray.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_released_movies.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/estimate_release/estimators/est_series_tvmaze.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/failed/retry_failed.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/ftp_download.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/ftp_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/sftp.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/ftp/sftp_client.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/history/history.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/from_imdb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/imdb/imdb_url.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/irc/irc.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_add.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_clear.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_match.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/list_remove.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/couchpotato_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/entry_list/entry_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/imdb_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/movie_list/movie_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/ombi_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/pending_list/pending_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/plex_watchlist.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/radarr_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/regexp_list/regexp_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/sonarr_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/subtitle_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/thetvdb_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/managed_lists/lists/yaml_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notification_framework.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/bark.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/cronitor.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/discord.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/email.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/gotify.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/ifttt.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/join.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/matrix.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/microsoftteams.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/mqtt.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/notifymyandroid.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/ntfysh.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/prowl.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushalot.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushbullet.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushover.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/pushsafer.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/rapidpush.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/slack.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/sms_ru.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/telegram.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/toast.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notifiers/xmpp.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/notify/notify.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_common.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_guessit.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/parsers/parser_internal.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/parsing/plugin_parsing.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/pending_approval/pending_approval.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/rejected/remember_rejected.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/scheduler/scheduler.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen_info_hash.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/seen/seen_movies.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/all_series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/configure_series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/gen_series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/internal_estimator.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/metainfo_series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/next_series_episodes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/next_series_seasons.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_begin.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_premiere.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/series_remove.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/series/utils.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/allyoulike.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/alpharatio.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/anirena.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/argenteam.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/awesomehd.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/bakabt.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/btn.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/cinemageddon.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/cpasbien.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/ettv.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/eztv.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/filelist_api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/google_cse.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/hebits.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/horriblesubs.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/iptorrents.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/koreus.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/limetorrents.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/lostfilm.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/morethantv.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/ncore.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/newznab.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/nyaa.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/passthepopcorn.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/piratebay.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/redirect.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rlsbb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rss.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/rutracker.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/serienjunkies.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/shortened.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/site_1337x.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/site_rutracker.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/solidtorrents.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrent_cache.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentday.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentleech.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/torrentz.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/uindex.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/wordpress.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/sites/yts.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewrite.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewrite_search.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/urlrewriting.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/sites/utils.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/status/status.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/api_tvdb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/thetvdb/thetvdb_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/api_tmdb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tmdb/tmdb_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/api_trakt.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/cli.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/db.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/next_trakt_episodes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_calendar.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/trakt/trakt_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/api_tvmaze.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/tvmaze/tvmaze_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/api.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/components/variables/variables.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/config_schema.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/db_schema.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/entry.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/event.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ipc.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/log.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/manager.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/options.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugin.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/README.md +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/check.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/cli_config.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/database.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/debug_info.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/doc.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/explain_sql.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/filters.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/inject.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/perf_tests.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/performance.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/plugins.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/templates.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/try_regexp.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/web.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/wiki_qualities.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/cli/win32_service.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/aria2.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/deluge.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/nzbget.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/pyload.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/qbittorrent.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/rtorrent.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/clients/transmission.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/daemon/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/daemon/web_server.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/abort_if_exists.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/accept_all.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/age.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/best_quality.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/content_filter.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/content_size.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/crossmatch.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/delay.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/duplicates.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists_movie.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/exists_series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/if_condition.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/limit_new.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/magnets.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/only_new.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/proper_movies.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/quality.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/regexp.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/require_field.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/rottentomatoes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/thetvdb.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/timeframe.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/unique.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/filter/upgrade.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/cron_env.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/db_analyze.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/db_vacuum.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/log_start.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/urlfix.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/generic/welcome.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/anidb_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/anilist.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/apple_trailers.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/betaseries_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/discover.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/filesystem.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/filmweb_watchlist.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_piratebay.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_task.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/from_telegram.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/gazelle.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/generate.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/html.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/input_csv.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/inputs.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/json.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/kitsu.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/letterboxd.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/limit.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/medusa.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/mock.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/my_anime_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/myepisodes_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/next_sonarr_episodes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/npo_watchlist.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/parameterize.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/plex.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/pogcal.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/regexp_parse.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rlslog.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rottentomatoes_list.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/rss.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/sceper.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/sickbeard.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/tail.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/text.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/torznab.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/input/twitterfeed.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/api_bluray.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/api_rottentomatoes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/internal/change_warn.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/assume_quality.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/bluray_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/check_subtitles.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/content_size.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/media_id.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/metainfo_movie.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/nfo_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/nzb_size.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/quality.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/rottentomatoes_lookup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/metainfo/task.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/extension.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/headers.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/manipulate.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/path_by_ext.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/path_by_space.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/plugin_priority.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/regex_extract.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/reorder_quality.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/set_field.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/sort_by.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/modify/sort_by_weight.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/abort.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/cookies.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/debug_db_sessions.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/debug_warnings.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/digest.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/disable.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/disable_phases.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/domain_delay.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/entry_trace.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/formlogin.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/free_space.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/include.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/interval.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/log_filter.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/manual.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/max_reruns.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/pathscrub.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/priority.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/proxy.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/rerun.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/run_task.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/sequence.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/sleep.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/spy_headers.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/template.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verbose.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verbose_details.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/verify_ssl_certificates.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/operate/version_checker.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/download.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/download_auth.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/dump.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/dump_config.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/exec.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/file_operations.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/html.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/memusage.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/mock_output.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/rss.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/rtorrent_magnet.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/sabnzbd.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/sns.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles_periscope.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/subtitles_subliminal.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/symlink.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/output/utorrent.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/kodi_library.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/myepisodes.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/plugins/services/pogcal_acquired.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/resources/flexget.png +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/task.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/task_queue.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/entry/default.template +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/default.template +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/html.template +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/templates/task/rss.template +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/terminal.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/tray_icon.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/.eslintignore +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/.eslintrc +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/README.rst +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/bower.json +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/build.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/inject.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/lint.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/proxy.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/scripts.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/server.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/styles.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/test.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulp/watch.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/gulpfile.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/karma.conf.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/load.failure.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/package.json +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/specs.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.loading.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/app.utils.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/assets/icons/ic_movie_black_24px.svg +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/assets/images/header.png +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/_error-dialog.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error-dialog.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/error/error.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/exception/exception.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/_pagination.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.filter.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/pagination/pagination.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.provider.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/router/router-helper.provider.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/blocks/url-interceptor/url-interceptor.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/404/404.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/_login.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.config.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/auth.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/auth/login.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/components.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.provider.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/core/core.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/_database.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/database/database.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/home/home.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/_sidenav.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.semver.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/sidenav/sidenav.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.provider.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/toolbar/toolbar.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/components/user/user.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/construction.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/directives/directives.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/directives/palette-background/palette-background.directive.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/favicon.ico +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/layout.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/config/config.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-input/execute-input.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/components/execute-stream/execute-stream.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.filter.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.filter.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/execute/execute.tmpl.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/history/history.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/log/log.tmpl.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-input.directive.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-item.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie-item.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.controller.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/add-movie/add-movie.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-entry/movie-entry.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/movie-list/movie-list.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/components/new-list/new-list.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/movies/movies.tmpl.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/pending/pending.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/plugins.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/schedule/schedule.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-entry/seen-entry.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-field/seen-field.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/components/seen-field/seen-field.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/seen/seen.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-release/episode-release.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/episode-releases/episode-releases.tmpl.html +0 -0
- {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
- {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
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-entry/series-entry.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episode/series-episode.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/components/series-episodes/series-episodes.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.component.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.route.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.service.spec.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/series/series.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/loading-dialog.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/loading-dialog.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/server/server.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.component.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.module.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.route.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.tmpl.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/plugins/status/status.tmpl.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_header.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_loading-bar.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/_variables.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/scss/flexget.scss +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/src/services/schema.service.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/config.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/execute.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/history.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/movie_list.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/registerPlugin.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/schedules.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/seen.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/series.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v1/tests-mock-data/states.js +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/README.rst +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/ui/v2/index.html +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/bittorrent.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/cache.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/cached_input.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/database.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/json.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/lazy_dict.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/log.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/__init__.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/generic.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/movie.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/parser.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/parsers/series.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/pathscrub.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/qualities.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/requests.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/serialization.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/simple_persistence.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/soup.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/sqlalchemy_utils.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/template.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/utils/tools.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/flexget/webserver.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/scripts/build_locked_extras.py +0 -0
- {flexget-3.20.2 → flexget-3.20.4}/scripts/bundle_webui.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flexget
|
|
3
|
-
Version: 3.20.
|
|
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==
|
|
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.
|
|
71
|
-
Requires-Dist: botocore==1.43.
|
|
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.
|
|
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.
|
|
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.
|
|
105
|
+
Requires-Dist: packaging==26.3; extra == 'all'
|
|
103
106
|
Requires-Dist: paramiko==3.5.1; extra == 'all'
|
|
104
|
-
Requires-Dist: platformdirs==4.11.
|
|
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.
|
|
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.
|
|
134
|
-
Requires-Dist: transmission-rpc==7.0.
|
|
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.
|
|
141
|
-
Requires-Dist: botocore==1.43.
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
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'
|
|
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.
|
|
225
|
-
Requires-Dist: setuptools==
|
|
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.
|
|
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==
|
|
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.
|
|
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.
|
|
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.
|
|
314
|
-
Requires-Dist: platformdirs==4.11.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
-
|
|
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 =
|
|
171
|
-
except
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
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,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
|