:py:mod:`wfexs_backend.fetchers.internal.ftp_downloader`
========================================================

.. py:module:: wfexs_backend.fetchers.internal.ftp_downloader

.. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader
   :allowtitles:

Module Contents
---------------

Classes
~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`FTPDownloader <wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader>`
     - .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader
          :summary:

Functions
~~~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`asyncio_run <wfexs_backend.fetchers.internal.ftp_downloader.asyncio_run>`
     - .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.asyncio_run
          :summary:

API
~~~

.. py:function:: asyncio_run(tasks: Tuple[asyncio.Task[CT], ...]) -> wfexs_backend.fetchers.internal.ftp_downloader.CT
   :canonical: wfexs_backend.fetchers.internal.ftp_downloader.asyncio_run

   .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.asyncio_run

.. py:class:: FTPDownloader(HOST: str, PORT: int = DEFAULT_FTP_PORT, USER: str = DEFAULT_USER, PASSWORD: str = DEFAULT_PASS, max_retries: int = DEFAULT_MAX_RETRIES)
   :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader

   .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader

   .. rubric:: Initialization

   .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__init__

   .. py:attribute:: DEFAULT_USER
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_USER
      :type: Final[str]
      :value: 'ftp'

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_USER

   .. py:attribute:: DEFAULT_PASS
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_PASS
      :type: Final[str]
      :value: 'guest@'

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_PASS

   .. py:attribute:: DEFAULT_FTP_PORT
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_FTP_PORT
      :type: Final[int]
      :value: 21

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_FTP_PORT

   .. py:attribute:: DEFAULT_MAX_RETRIES
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_MAX_RETRIES
      :type: Final[int]
      :value: 5

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.DEFAULT_MAX_RETRIES

   .. py:method:: __enter__() -> wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__enter__

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__enter__

   .. py:method:: __exit__(exc_type, exc_val, exc_tb)
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__exit__

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__exit__

   .. py:method:: __download_file_async(client: aioftp.Client, upload_file_path: pathlib.Path, dfdPath: pathlib.Path, dfdStat: Mapping[str, Any]) -> None
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__download_file_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.__download_file_async

   .. py:method:: _reconnect(client: aioftp.Client) -> None
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._reconnect
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._reconnect

   .. py:method:: _download_dir_async(client: aioftp.Client, dfdPath: pathlib.Path, utdPath: pathlib.Path, exclude_ext: Sequence[str]) -> Sequence[Path]
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._download_dir_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._download_dir_async

   .. py:method:: _download_file_async(client: aioftp.Client, dfdPath: pathlib.Path, utdPath: pathlib.Path) -> pathlib.Path
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._download_file_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader._download_file_async

   .. py:method:: download_dir_async(download_from_dir: str, upload_to_dir: str, exclude_ext: Sequence[str]) -> Sequence[Path]
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_dir_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_dir_async

   .. py:method:: download_file_async(download_from_file: str, upload_to_file: str) -> pathlib.Path
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_file_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_file_async

   .. py:method:: download_async(download_from_df: str, upload_to_df: str, exclude_ext: Sequence[str]) -> Union[Path, Sequence[Path]]
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_async
      :async:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_async

   .. py:method:: download_dir(download_from_dir: str, upload_to_dir: str = '.', exclude_ext: Sequence[str] = []) -> Sequence[Path]
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_dir

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_dir

   .. py:method:: download_file(download_from_file: str, upload_to_file: str) -> pathlib.Path
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_file

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download_file

   .. py:method:: download(download_path: str, upload_path: str, exclude_ext: Sequence[str] = []) -> Union[Path, Sequence[Path]]
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.download

   .. py:method:: clear_tasks() -> None
      :canonical: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.clear_tasks
      :staticmethod:

      .. autodoc2-docstring:: wfexs_backend.fetchers.internal.ftp_downloader.FTPDownloader.clear_tasks
