giampaolo / pyftpdlib

Extremely fast and scalable Python FTP server library
MIT License
1.65k stars 265 forks source link

1.5.6: `pytest-ftpserver` test suite is failing in `pyftpdlib` module #574

Open kloczek opened 2 years ago

kloczek commented 2 years ago

Looks like something is wrong

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-ftpserver-1.1.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-ftpserver-1.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
Traceback (most recent call last):
  File "/usr/bin/pytest", line 8, in <module>
    sys.exit(console_main())
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 187, in console_main
    code = main()
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 145, in main
    config = _prepareconfig(args, plugins)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 324, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "/usr/lib/python3.8/site-packages/pluggy/_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "/usr/lib/python3.8/site-packages/pluggy/_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 55, in _multicall
    gen.send(outcome)
  File "/usr/lib/python3.8/site-packages/_pytest/helpconfig.py", line 102, in pytest_cmdline_parse
    config: Config = outcome.get_result()
  File "/usr/lib/python3.8/site-packages/pluggy/_result.py", line 60, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1016, in pytest_cmdline_parse
    self.parse(args)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1304, in parse
    self._preparse(args, addopts=addopts)
  File "/usr/lib/python3.8/site-packages/_pytest/config/__init__.py", line 1187, in _preparse
    self.pluginmanager.load_setuptools_entrypoints("pytest11")
  File "/usr/lib/python3.8/site-packages/pluggy/_manager.py", line 287, in load_setuptools_entrypoints
    plugin = ep.load()
  File "/usr/lib64/python3.8/importlib/metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "/usr/lib64/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "/usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
    exec(co, module.__dict__)
  File "/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-ftpserver-1.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages/pytest_localftpserver/plugin.py", line 5, in <module>
    from .servers import PytestLocalFTPServer
  File "/usr/lib/python3.8/site-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
    exec(co, module.__dict__)
  File "/home/tkloczko/rpmbuild/BUILDROOT/python-pytest-ftpserver-1.1.3-2.fc35.x86_64/usr/lib/python3.8/site-packages/pytest_localftpserver/servers.py", line 13, in <module>
    from pyftpdlib.handlers import FTPHandler, TLS_FTPHandler
ImportError: cannot import name 'TLS_FTPHandler' from 'pyftpdlib.handlers' (/usr/lib/python3.8/site-packages/pyftpdlib/handlers.py)

On generate pytest-ftpserver sphinx documentation sphinx shows some pyftpdlib module related issues

+ /usr/bin/python3 setup.py build_sphinx -b man --build-dir build/sphinx
running build_sphinx
Running Sphinx v4.5.0
making output directory... done
[autosummary] generating autosummary for: api_doc.rst, authors.rst, contributing.rst, history.rst, index.rst, installation.rst, readme.rst, usage.rst
WARNING: [autosummary] failed to import pytest_localftpserver.servers.FunctionalityWrapper.
Possible hints:
* AttributeError: module 'pytest_localftpserver' has no attribute 'servers'
* ImportError: cannot import name 'TLS_FTPHandler' from 'pyftpdlib.handlers' (/usr/lib/python3.8/site-packages/pyftpdlib/handlers.py)
* ImportError: no module named pytest_localftpserver.servers
building [mo]: targets for 0 po files that are out of date
building [man]: all manpages
updating environment: [new config] 8 added, 0 changed, 0 removed
reading sources... [100%] usage
/home/tkloczko/rpmbuild/BUILD/pytest-localftpserver-1.1.3/docs/api_doc.rst:12: WARNING: autosummary: failed to import FunctionalityWrapper.
Possible hints:
* KeyError: 'FunctionalityWrapper'
* ImportError: cannot import name 'TLS_FTPHandler' from 'pyftpdlib.handlers' (/usr/lib/python3.8/site-packages/pyftpdlib/handlers.py)
* ModuleNotFoundError: No module named 'FunctionalityWrapper'
* ValueError: not enough values to unpack (expected 2, got 1)
* AttributeError: module 'pytest_localftpserver' has no attribute 'servers'
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
writing... python-pytest_localftpserver.3 { readme installation usage api_doc contributing authors history } done
build succeeded, 2 warnings.
kloczek commented 1 year ago

gentle ping .. any update? Is it possible to reporduce that issue? 🤔

JoshLoecker commented 1 year ago

I'm also getting these errors when installing version 1.1.4 of pytest-localftpserver.

pytest --version
Traceback (most recent call last):
  File "/Users/joshl/miniconda3/envs/madrid_tests/bin/pytest", line 11, in <module>
    sys.exit(console_main())
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 187, in console_main
    code = main()
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 145, in main
    config = _prepareconfig(args, plugins)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 324, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_callers.py", line 55, in _multicall
    gen.send(outcome)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/helpconfig.py", line 102, in pytest_cmdline_parse
    config: Config = outcome.get_result()
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_result.py", line 60, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1016, in pytest_cmdline_parse
    self.parse(args)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1304, in parse
    self._preparse(args, addopts=addopts)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/config/__init__.py", line 1187, in _preparse
    self.pluginmanager.load_setuptools_entrypoints("pytest11")
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pluggy/_manager.py", line 287, in load_setuptools_entrypoints
    plugin = ep.load()
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
    module = import_module(match.group('module'))
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
    exec(co, module.__dict__)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pytest_localftpserver/plugin.py", line 5, in <module>
    from .servers import PytestLocalFTPServer
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/_pytest/assertion/rewrite.py", line 168, in exec_module
    exec(co, module.__dict__)
  File "/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pytest_localftpserver/servers.py", line 13, in <module>
    from pyftpdlib.handlers import FTPHandler, TLS_FTPHandler
ImportError: cannot import name 'TLS_FTPHandler' from 'pyftpdlib.handlers' (/Users/joshl/miniconda3/envs/madrid_tests/lib/python3.10/site-packages/pyftpdlib/handlers.py)
kloczek commented 1 year ago

I'm also getting these errors when installing version 1.1.4 of pytest-localftpserver.

Just in case .. during packaging I'm usinf exact below porocedure

isoflavone-r commented 2 months ago

Basically got this error when trying to
from pyftpdlib.handlers import TLS_FTPHandler in an environment where the package pyopenssl wasn't installed.

so pip install pyopenssl to fix.

i saw this on py 3.12 pyftpdlib 1.5.9 but i don't think that matters.

(in my case it meant that i had pyftpdlib = "*" in my [dev-packages] in my Pipfile and had to add pyopenssl = "*" as well and then pipenv lock pipenv sync --dev )

kloczek commented 2 months ago

Please look on install time pytest-ftpserver dependencies https://github.com/oz123/pytest-localftpserver/blob/4a8dbdcfc8789ddef1f60ed758353bc57cf7ea20/pyproject.toml#L33-L37 It iw not possible to install this module without pyopenssl.

kloczek commented 1 month ago

gentle ping .. any update? 🤔