Metadata-Version: 2.4
Name: flexget
Version: 3.15.41
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.
Project-URL: Homepage, https://flexget.com
Project-URL: Issue Tracker, https://github.com/Flexget/Flexget/issues
Project-URL: Repository, https://github.com/Flexget/Flexget
Project-URL: Forum, https://github.com/Flexget/Flexget/discussions
Author-email: Marko Koivusalo <marko.koivusalo@gmail.com>, Chase Sterling <chase.sterling@gmail.com>
License: 
        The MIT License
        
        Copyright (C) 2006, Riku 'Shrike' Lindblad
        Copyright (C) 2007, Marko Koivusalo
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in
        all copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
        THE SOFTWARE.
License-File: LICENSE
Requires-Python: >=3.9
Requires-Dist: apscheduler~=3.11
Requires-Dist: beautifulsoup4~=4.12
Requires-Dist: cherrypy~=18.10
Requires-Dist: feedparser~=6.0
Requires-Dist: flask-compress~=1.17
Requires-Dist: flask-cors~=5.0
Requires-Dist: flask-login~=0.6.3
Requires-Dist: flask-restx~=1.3
Requires-Dist: flask~=3.1
Requires-Dist: guessit~=3.8
Requires-Dist: html5lib~=1.1
Requires-Dist: importlib-metadata~=8.5; python_version < '3.10'
Requires-Dist: jinja2~=3.1
Requires-Dist: jsonschema~=4.23
Requires-Dist: loguru~=0.7.3
Requires-Dist: packaging~=25.0
Requires-Dist: pendulum~=3.0
Requires-Dist: psutil~=7.0
Requires-Dist: pynzb~=0.1.0
Requires-Dist: pyparsing~=3.2
Requires-Dist: pyrss2gen~=1.1
Requires-Dist: python-dateutil~=2.9
Requires-Dist: pyyaml~=6.0
Requires-Dist: rebulk~=3.2
Requires-Dist: requests~=2.32
Requires-Dist: rich~=14.0
Requires-Dist: rpyc~=6.0
Requires-Dist: sqlalchemy~=2.0
Requires-Dist: urllib3~=1.26
Requires-Dist: werkzeug~=3.1
Requires-Dist: zxcvbn~=4.4
Provides-Extra: all
Requires-Dist: anyio==4.9.0; extra == 'all'
Requires-Dist: certifi==2025.4.26; extra == 'all'
Requires-Dist: charset-normalizer==3.4.2; extra == 'all'
Requires-Dist: deluge-client==1.10.2; extra == 'all'
Requires-Dist: exceptiongroup==1.2.2; (python_full_version < '3.11') and extra == 'all'
Requires-Dist: h11==0.16.0; extra == 'all'
Requires-Dist: h2==4.2.0; extra == 'all'
Requires-Dist: hpack==4.1.0; extra == 'all'
Requires-Dist: httpcore==1.0.9; extra == 'all'
Requires-Dist: httpx==0.28.1; extra == 'all'
Requires-Dist: hyperframe==6.1.0; extra == 'all'
Requires-Dist: idna==3.10; extra == 'all'
Requires-Dist: packaging==25.0; extra == 'all'
Requires-Dist: python-telegram-bot==22.0; extra == 'all'
Requires-Dist: qbittorrent-api==2025.5.0; extra == 'all'
Requires-Dist: requests==2.32.3; extra == 'all'
Requires-Dist: sniffio==1.3.1; extra == 'all'
Requires-Dist: socksio==1.0.0; extra == 'all'
Requires-Dist: transmission-rpc==7.0.11; extra == 'all'
Requires-Dist: typing-extensions==4.13.2; extra == 'all'
Requires-Dist: urllib3==1.26.20; extra == 'all'
Provides-Extra: deluge
Requires-Dist: deluge-client==1.10.2; extra == 'deluge'
Provides-Extra: locked
Requires-Dist: aniso8601==10.0.1; extra == 'locked'
Requires-Dist: apscheduler==3.11.0; extra == 'locked'
Requires-Dist: attrs==25.3.0; extra == 'locked'
Requires-Dist: autocommand==2.2.2; extra == 'locked'
Requires-Dist: babelfish==0.6.0; (python_full_version < '3.10') and extra == 'locked'
Requires-Dist: babelfish==0.6.1; (python_full_version >= '3.10') and extra == 'locked'
Requires-Dist: backports-tarfile==1.2.0; (python_full_version < '3.12') and extra == 'locked'
Requires-Dist: beautifulsoup4==4.13.4; extra == 'locked'
Requires-Dist: blinker==1.9.0; extra == 'locked'
Requires-Dist: brotli==1.1.0; (platform_python_implementation != 'PyPy') and extra == 'locked'
Requires-Dist: brotlicffi==1.1.0.0; (platform_python_implementation == 'PyPy') and extra == 'locked'
Requires-Dist: certifi==2025.4.26; extra == 'locked'
Requires-Dist: cffi==1.17.1; (platform_python_implementation == 'PyPy') and extra == 'locked'
Requires-Dist: cfgv==3.4.0; extra == 'locked'
Requires-Dist: charset-normalizer==3.4.2; extra == 'locked'
Requires-Dist: cheroot==10.0.1; extra == 'locked'
Requires-Dist: cherrypy==18.10.0; extra == 'locked'
Requires-Dist: click==8.1.8; extra == 'locked'
Requires-Dist: colorama==0.4.6; (sys_platform == 'win32') and extra == 'locked'
Requires-Dist: distlib==0.3.9; extra == 'locked'
Requires-Dist: exceptiongroup==1.2.2; (python_full_version < '3.11') and extra == 'locked'
Requires-Dist: execnet==2.1.1; extra == 'locked'
Requires-Dist: feedparser==6.0.11; extra == 'locked'
Requires-Dist: filelock==3.18.0; extra == 'locked'
Requires-Dist: flask-compress==1.17; extra == 'locked'
Requires-Dist: flask-cors==5.0.1; extra == 'locked'
Requires-Dist: flask-login==0.6.3; extra == 'locked'
Requires-Dist: flask-restx==1.3.0; extra == 'locked'
Requires-Dist: flask==3.1.0; extra == 'locked'
Requires-Dist: greenlet==3.2.1; ((python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')) and extra == 'locked'
Requires-Dist: guessit==3.8.0; extra == 'locked'
Requires-Dist: html5lib==1.1; extra == 'locked'
Requires-Dist: identify==2.6.10; extra == 'locked'
Requires-Dist: idna==3.10; extra == 'locked'
Requires-Dist: importlib-metadata==8.7.0; (python_full_version < '3.10') and extra == 'locked'
Requires-Dist: importlib-resources==6.5.2; extra == 'locked'
Requires-Dist: iniconfig==2.1.0; extra == 'locked'
Requires-Dist: itsdangerous==2.2.0; extra == 'locked'
Requires-Dist: jaraco-collections==5.1.0; extra == 'locked'
Requires-Dist: jaraco-context==6.0.1; extra == 'locked'
Requires-Dist: jaraco-functools==4.1.0; extra == 'locked'
Requires-Dist: jaraco-text==4.0.0; extra == 'locked'
Requires-Dist: jinja2==3.1.6; extra == 'locked'
Requires-Dist: jsonschema-specifications==2025.4.1; extra == 'locked'
Requires-Dist: jsonschema==4.23.0; extra == 'locked'
Requires-Dist: loguru==0.7.3; extra == 'locked'
Requires-Dist: markdown-it-py==3.0.0; extra == 'locked'
Requires-Dist: markupsafe==3.0.2; extra == 'locked'
Requires-Dist: mdurl==0.1.2; extra == 'locked'
Requires-Dist: more-itertools==10.7.0; extra == 'locked'
Requires-Dist: multidict==6.4.3; extra == 'locked'
Requires-Dist: nodeenv==1.9.1; extra == 'locked'
Requires-Dist: packaging==25.0; extra == 'locked'
Requires-Dist: pendulum==3.1.0; extra == 'locked'
Requires-Dist: platformdirs==4.3.7; extra == 'locked'
Requires-Dist: pluggy==1.5.0; extra == 'locked'
Requires-Dist: plumbum==1.9.0; extra == 'locked'
Requires-Dist: portend==3.2.0; extra == 'locked'
Requires-Dist: pre-commit==4.2.0; extra == 'locked'
Requires-Dist: propcache==0.3.1; extra == 'locked'
Requires-Dist: psutil==7.0.0; extra == 'locked'
Requires-Dist: pycparser==2.22; (platform_python_implementation == 'PyPy') and extra == 'locked'
Requires-Dist: pygments==2.19.1; extra == 'locked'
Requires-Dist: pynzb==0.1.0; extra == 'locked'
Requires-Dist: pyparsing==3.2.3; extra == 'locked'
Requires-Dist: pyrss2gen==1.1; extra == 'locked'
Requires-Dist: pytest-xdist==3.6.1; extra == 'locked'
Requires-Dist: pytest==8.3.5; extra == 'locked'
Requires-Dist: python-dateutil==2.9.0.post0; extra == 'locked'
Requires-Dist: pytz==2025.2; extra == 'locked'
Requires-Dist: pywin32==310; ((python_full_version < '3.10' and implementation_name == 'cpython' and sys_platform == 'win32') or (platform_python_implementation != 'PyPy' and sys_platform == 'win32')) and extra == 'locked'
Requires-Dist: pyyaml==6.0.2; extra == 'locked'
Requires-Dist: rebulk==3.2.0; extra == 'locked'
Requires-Dist: referencing==0.36.2; extra == 'locked'
Requires-Dist: requests==2.32.3; extra == 'locked'
Requires-Dist: rich==14.0.0; extra == 'locked'
Requires-Dist: rpds-py==0.24.0; extra == 'locked'
Requires-Dist: rpyc==6.0.2; extra == 'locked'
Requires-Dist: ruff==0.11.8; extra == 'locked'
Requires-Dist: setuptools==80.3.1; extra == 'locked'
Requires-Dist: sgmllib3k==1.0.0; extra == 'locked'
Requires-Dist: six==1.17.0; extra == 'locked'
Requires-Dist: soupsieve==2.7; extra == 'locked'
Requires-Dist: sqlalchemy==2.0.40; extra == 'locked'
Requires-Dist: tempora==5.8.0; extra == 'locked'
Requires-Dist: tomli==2.2.1; (python_full_version < '3.11') and extra == 'locked'
Requires-Dist: typing-extensions==4.13.2; extra == 'locked'
Requires-Dist: tzdata==2025.2; extra == 'locked'
Requires-Dist: tzlocal==5.3.1; extra == 'locked'
Requires-Dist: urllib3==1.26.20; extra == 'locked'
Requires-Dist: vcrpy==7.0.0; extra == 'locked'
Requires-Dist: virtualenv==20.30.0; extra == 'locked'
Requires-Dist: webencodings==0.5.1; extra == 'locked'
Requires-Dist: werkzeug==3.1.3; extra == 'locked'
Requires-Dist: win32-setctime==1.2.0; (sys_platform == 'win32') and extra == 'locked'
Requires-Dist: wrapt==1.17.2; extra == 'locked'
Requires-Dist: yarl==1.20.0; extra == 'locked'
Requires-Dist: zc-lockfile==3.0.post1; extra == 'locked'
Requires-Dist: zipp==3.21.0; (python_full_version < '3.10') and extra == 'locked'
Requires-Dist: zstandard==0.23.0; extra == 'locked'
Requires-Dist: zxcvbn==4.5.0; extra == 'locked'
Provides-Extra: qbittorrent
Requires-Dist: certifi==2025.4.26; extra == 'qbittorrent'
Requires-Dist: charset-normalizer==3.4.2; extra == 'qbittorrent'
Requires-Dist: idna==3.10; extra == 'qbittorrent'
Requires-Dist: packaging==25.0; extra == 'qbittorrent'
Requires-Dist: qbittorrent-api==2025.5.0; extra == 'qbittorrent'
Requires-Dist: requests==2.32.3; extra == 'qbittorrent'
Requires-Dist: urllib3==1.26.20; extra == 'qbittorrent'
Provides-Extra: telegram
Requires-Dist: anyio==4.9.0; extra == 'telegram'
Requires-Dist: certifi==2025.4.26; extra == 'telegram'
Requires-Dist: exceptiongroup==1.2.2; (python_full_version < '3.11') and extra == 'telegram'
Requires-Dist: h11==0.16.0; extra == 'telegram'
Requires-Dist: h2==4.2.0; extra == 'telegram'
Requires-Dist: hpack==4.1.0; extra == 'telegram'
Requires-Dist: httpcore==1.0.9; extra == 'telegram'
Requires-Dist: httpx==0.28.1; extra == 'telegram'
Requires-Dist: hyperframe==6.1.0; extra == 'telegram'
Requires-Dist: idna==3.10; extra == 'telegram'
Requires-Dist: python-telegram-bot==22.0; extra == 'telegram'
Requires-Dist: sniffio==1.3.1; extra == 'telegram'
Requires-Dist: socksio==1.0.0; extra == 'telegram'
Requires-Dist: typing-extensions==4.13.2; (python_full_version < '3.13') and extra == 'telegram'
Provides-Extra: transmission
Requires-Dist: certifi==2025.4.26; extra == 'transmission'
Requires-Dist: charset-normalizer==3.4.2; extra == 'transmission'
Requires-Dist: idna==3.10; extra == 'transmission'
Requires-Dist: requests==2.32.3; extra == 'transmission'
Requires-Dist: transmission-rpc==7.0.11; extra == 'transmission'
Requires-Dist: typing-extensions==4.13.2; extra == 'transmission'
Requires-Dist: urllib3==1.26.20; extra == 'transmission'
Description-Content-Type: text/x-rst

FlexGet
=======
.. image:: https://github.com/Flexget/Flexget/actions/workflows/test.yml/badge.svg?branch=develop
    :target: https://github.com/Flexget/Flexget/actions/workflows/test.yml?query=branch%3Adevelop

.. image:: https://img.shields.io/pypi/v/Flexget.svg
    :target: https://pypi.python.org/pypi/Flexget

..
    Commenting these out for now, as they seem to be broken.
    .. image:: https://api.codacy.com/project/badge/Grade/86bb847efe984c12948bdeccabcbccad
        :target: https://www.codacy.com/app/Flexget/Flexget?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Flexget/Flexget&amp;utm_campaign=Badge_Grade

    .. image:: https://api.codacy.com/project/badge/Coverage/86bb847efe984c12948bdeccabcbccad
        :target: https://www.codacy.com/app/Flexget/Flexget?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Flexget/Flexget&amp;utm_campaign=Badge_Coverage


.. image:: https://img.shields.io/discord/536690097056120833?label=discord
    :target: https://discord.gg/W6CQrJx

.. image:: http://isitmaintained.com/badge/resolution/Flexget/Flexget.svg
    :target: http://isitmaintained.com/project/Flexget/Flexget

`FlexGet`_ is a multipurpose automation tool for content like torrents, nzbs,
podcasts, comics, series, movies, etc. It can use different kinds of sources
like RSS-feeds, html pages, csv files, search engines and there are even
plugins for sites that do not provide any kind of useful feeds.

Example
=======
Flexget uses a `YAML`_ based configuration file.
The following example will look in the RSS feed in the link, will match any
item that match the series names and download it::

    tasks:
      tv:
        rss: http://example.com/torrents.xml
        series:
        - some series
        - another series
        download: /tvshows

There are numerous plugins that allow utilizing FlexGet in interesting ways
and more are being added continuously.

FlexGet is extremely useful in conjunction with applications which have watch
directory support or provide interface for external utilities like FlexGet.
To get a sense of the many things that can be done with FlexGet you can take
a look in our `cookbook`_.

.. _FlexGet: https://flexget.com

.. _YAML: http://www.yaml.org/

.. _cookbook: https://flexget.com/Cookbook


**ChangeLog:** https://flexget.com/ChangeLog

**Help:** https://github.com/Flexget/Flexget/discussions

**Chat:** https://flexget.com/Chat

**Bugs:** https://github.com/Flexget/Flexget/issues

**API reference** https://flexget.readthedocs.io/en/latest/api/flexget.html

Install
-------

FlexGet is installable via pip with the command::

    pip install flexget

For more detailed instructions see the `installation guide`_.

.. _installation guide: https://flexget.com/Install

How to contribute
-----------------------

Refer to `the contributor guide <https://flexget.readthedocs.io/en/latest/contributor/index.html>`__.

If you don't want to use virtualenv there's ``flexget_vanilla.py`` file which
can be used to run FlexGet without virtualenv, note that you will need to
install all required dependencies yourself.
