From 3caaae0e0f7e24667168123a55f26fe38e34d1cf Mon Sep 17 00:00:00 2001 From: David Tucker Date: Thu, 14 May 2026 16:42:04 +0000 Subject: [PATCH 1/2] Use a src layout - https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/ - https://blog.ionelmc.ro/2014/05/25/python-packaging/ --- docs/conf.py | 2 +- pyproject.toml | 4 +- {telnetlib3 => src/telnetlib3}/.gitignore | 0 {telnetlib3 => src/telnetlib3}/__init__.py | 0 {telnetlib3 => src/telnetlib3}/_base.py | 0 {telnetlib3 => src/telnetlib3}/_paths.py | 0 .../telnetlib3}/_session_context.py | 0 {telnetlib3 => src/telnetlib3}/_types.py | 0 {telnetlib3 => src/telnetlib3}/accessories.py | 0 {telnetlib3 => src/telnetlib3}/client.py | 0 {telnetlib3 => src/telnetlib3}/client_base.py | 0 .../telnetlib3}/client_shell.py | 0 .../telnetlib3}/client_shell_win32.py | 0 .../telnetlib3}/encodings/__init__.py | 0 .../telnetlib3}/encodings/atarist.py | 0 .../telnetlib3}/encodings/atascii.py | 0 .../telnetlib3}/encodings/big5bbs.py | 0 .../telnetlib3}/encodings/petscii.py | 0 .../telnetlib3}/fingerprinting.py | 0 .../telnetlib3}/fingerprinting_display.py | 0 .../telnetlib3}/guard_shells.py | 0 {telnetlib3 => src/telnetlib3}/mud.py | 0 {telnetlib3 => src/telnetlib3}/py.typed | 0 .../telnetlib3}/relay_server.py | 0 {telnetlib3 => src/telnetlib3}/server.py | 0 {telnetlib3 => src/telnetlib3}/server_base.py | 0 .../telnetlib3}/server_fingerprinting.py | 0 .../telnetlib3}/server_pty_shell.py | 0 .../telnetlib3}/server_shell.py | 0 {telnetlib3 => src/telnetlib3}/slc.py | 0 .../telnetlib3}/stream_reader.py | 0 .../telnetlib3}/stream_writer.py | 0 {telnetlib3 => src/telnetlib3}/sync.py | 0 {telnetlib3 => src/telnetlib3}/telnetlib.py | 0 {telnetlib3 => src/telnetlib3}/telopt.py | 0 .../telnetlib3}/tests/accessories.py | 2 +- .../telnetlib3}/tests/conftest.py | 0 .../telnetlib3}/tests/pty_helper.py | 0 .../telnetlib3}/tests/test_accessories.py | 0 .../tests/test_accessories_extra.py | 0 .../telnetlib3}/tests/test_atascii_codec.py | 0 .../telnetlib3}/tests/test_benchmarks.py | 0 .../telnetlib3}/tests/test_big5bbs_codec.py | 0 .../telnetlib3}/tests/test_charset.py | 0 .../telnetlib3}/tests/test_client_shell.py | 0 .../tests/test_client_shell_win32.py | 0 .../telnetlib3}/tests/test_client_unit.py | 0 .../telnetlib3}/tests/test_core.py | 0 .../telnetlib3}/tests/test_encoding.py | 0 .../telnetlib3}/tests/test_environ.py | 0 .../telnetlib3}/tests/test_fingerprinting.py | 0 .../tests/test_guard_integration.py | 0 .../telnetlib3}/tests/test_linemode.py | 0 .../telnetlib3}/tests/test_mccp.py | 0 .../telnetlib3}/tests/test_mud.py | 0 .../telnetlib3}/tests/test_mud_negotiation.py | 0 .../telnetlib3}/tests/test_naws.py | 0 .../telnetlib3}/tests/test_petscii_codec.py | 0 .../telnetlib3}/tests/test_pty_shell.py | 0 .../telnetlib3}/tests/test_reader.py | 0 .../telnetlib3}/tests/test_relay_server.py | 0 .../telnetlib3}/tests/test_server.py | 0 .../telnetlib3}/tests/test_server_api.py | 0 .../telnetlib3}/tests/test_server_cli.py | 0 .../tests/test_server_fingerprinting.py | 0 .../telnetlib3}/tests/test_server_mud.py | 2 +- .../tests/test_server_shell_unit.py | 0 .../telnetlib3}/tests/test_shell.py | 0 .../telnetlib3}/tests/test_slc.py | 0 .../telnetlib3}/tests/test_status_logger.py | 0 .../tests/test_stream_reader_extra.py | 0 .../tests/test_stream_writer_full.py | 0 .../telnetlib3}/tests/test_sync.py | 0 .../telnetlib3}/tests/test_telnetlib.py | 0 .../telnetlib3}/tests/test_timeout.py | 0 .../telnetlib3}/tests/test_tls.py | 0 .../telnetlib3}/tests/test_tspeed.py | 0 .../telnetlib3}/tests/test_ttype.py | 0 .../tests/test_uvloop_integration.py | 0 .../telnetlib3}/tests/test_writer.py | 0 .../telnetlib3}/tests/test_xdisploc.py | 0 tox.ini | 47 ++++++++++--------- 82 files changed, 29 insertions(+), 28 deletions(-) rename {telnetlib3 => src/telnetlib3}/.gitignore (100%) rename {telnetlib3 => src/telnetlib3}/__init__.py (100%) rename {telnetlib3 => src/telnetlib3}/_base.py (100%) rename {telnetlib3 => src/telnetlib3}/_paths.py (100%) rename {telnetlib3 => src/telnetlib3}/_session_context.py (100%) rename {telnetlib3 => src/telnetlib3}/_types.py (100%) rename {telnetlib3 => src/telnetlib3}/accessories.py (100%) rename {telnetlib3 => src/telnetlib3}/client.py (100%) rename {telnetlib3 => src/telnetlib3}/client_base.py (100%) rename {telnetlib3 => src/telnetlib3}/client_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/client_shell_win32.py (100%) rename {telnetlib3 => src/telnetlib3}/encodings/__init__.py (100%) rename {telnetlib3 => src/telnetlib3}/encodings/atarist.py (100%) rename {telnetlib3 => src/telnetlib3}/encodings/atascii.py (100%) rename {telnetlib3 => src/telnetlib3}/encodings/big5bbs.py (100%) rename {telnetlib3 => src/telnetlib3}/encodings/petscii.py (100%) rename {telnetlib3 => src/telnetlib3}/fingerprinting.py (100%) rename {telnetlib3 => src/telnetlib3}/fingerprinting_display.py (100%) rename {telnetlib3 => src/telnetlib3}/guard_shells.py (100%) rename {telnetlib3 => src/telnetlib3}/mud.py (100%) rename {telnetlib3 => src/telnetlib3}/py.typed (100%) rename {telnetlib3 => src/telnetlib3}/relay_server.py (100%) rename {telnetlib3 => src/telnetlib3}/server.py (100%) rename {telnetlib3 => src/telnetlib3}/server_base.py (100%) rename {telnetlib3 => src/telnetlib3}/server_fingerprinting.py (100%) rename {telnetlib3 => src/telnetlib3}/server_pty_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/server_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/slc.py (100%) rename {telnetlib3 => src/telnetlib3}/stream_reader.py (100%) rename {telnetlib3 => src/telnetlib3}/stream_writer.py (100%) rename {telnetlib3 => src/telnetlib3}/sync.py (100%) rename {telnetlib3 => src/telnetlib3}/telnetlib.py (100%) rename {telnetlib3 => src/telnetlib3}/telopt.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/accessories.py (99%) rename {telnetlib3 => src/telnetlib3}/tests/conftest.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/pty_helper.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_accessories.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_accessories_extra.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_atascii_codec.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_benchmarks.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_big5bbs_codec.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_charset.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_client_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_client_shell_win32.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_client_unit.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_core.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_encoding.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_environ.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_fingerprinting.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_guard_integration.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_linemode.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_mccp.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_mud.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_mud_negotiation.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_naws.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_petscii_codec.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_pty_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_reader.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_relay_server.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_server.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_server_api.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_server_cli.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_server_fingerprinting.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_server_mud.py (99%) rename {telnetlib3 => src/telnetlib3}/tests/test_server_shell_unit.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_shell.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_slc.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_status_logger.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_stream_reader_extra.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_stream_writer_full.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_sync.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_telnetlib.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_timeout.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_tls.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_tspeed.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_ttype.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_uvloop_integration.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_writer.py (100%) rename {telnetlib3 => src/telnetlib3}/tests/test_xdisploc.py (100%) diff --git a/docs/conf.py b/docs/conf.py index 7f149091..b2c4c01c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,7 @@ # this path insert is needed for readthedocs.org (only) sys.path.insert( - 0, os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)) + 0, os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, "src")) ) suppress_warnings = ["image.nonlocal_uri", "ref.class"] diff --git a/pyproject.toml b/pyproject.toml index a9322b9c..fd4f776c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,7 +73,7 @@ Issues = "https://github.com/jquast/telnetlib3/issues" [tool.hatch.build.targets.sdist] include = [ - "/telnetlib3/**", + "/src/**", "/docs/**", "/README.rst", "/CONTRIBUTING.rst", @@ -85,7 +85,7 @@ include = [ ] [tool.hatch.build.targets.wheel] -packages = ["telnetlib3"] +packages = ["src/telnetlib3"] [tool.pylint.main] load-plugins = [ diff --git a/telnetlib3/.gitignore b/src/telnetlib3/.gitignore similarity index 100% rename from telnetlib3/.gitignore rename to src/telnetlib3/.gitignore diff --git a/telnetlib3/__init__.py b/src/telnetlib3/__init__.py similarity index 100% rename from telnetlib3/__init__.py rename to src/telnetlib3/__init__.py diff --git a/telnetlib3/_base.py b/src/telnetlib3/_base.py similarity index 100% rename from telnetlib3/_base.py rename to src/telnetlib3/_base.py diff --git a/telnetlib3/_paths.py b/src/telnetlib3/_paths.py similarity index 100% rename from telnetlib3/_paths.py rename to src/telnetlib3/_paths.py diff --git a/telnetlib3/_session_context.py b/src/telnetlib3/_session_context.py similarity index 100% rename from telnetlib3/_session_context.py rename to src/telnetlib3/_session_context.py diff --git a/telnetlib3/_types.py b/src/telnetlib3/_types.py similarity index 100% rename from telnetlib3/_types.py rename to src/telnetlib3/_types.py diff --git a/telnetlib3/accessories.py b/src/telnetlib3/accessories.py similarity index 100% rename from telnetlib3/accessories.py rename to src/telnetlib3/accessories.py diff --git a/telnetlib3/client.py b/src/telnetlib3/client.py similarity index 100% rename from telnetlib3/client.py rename to src/telnetlib3/client.py diff --git a/telnetlib3/client_base.py b/src/telnetlib3/client_base.py similarity index 100% rename from telnetlib3/client_base.py rename to src/telnetlib3/client_base.py diff --git a/telnetlib3/client_shell.py b/src/telnetlib3/client_shell.py similarity index 100% rename from telnetlib3/client_shell.py rename to src/telnetlib3/client_shell.py diff --git a/telnetlib3/client_shell_win32.py b/src/telnetlib3/client_shell_win32.py similarity index 100% rename from telnetlib3/client_shell_win32.py rename to src/telnetlib3/client_shell_win32.py diff --git a/telnetlib3/encodings/__init__.py b/src/telnetlib3/encodings/__init__.py similarity index 100% rename from telnetlib3/encodings/__init__.py rename to src/telnetlib3/encodings/__init__.py diff --git a/telnetlib3/encodings/atarist.py b/src/telnetlib3/encodings/atarist.py similarity index 100% rename from telnetlib3/encodings/atarist.py rename to src/telnetlib3/encodings/atarist.py diff --git a/telnetlib3/encodings/atascii.py b/src/telnetlib3/encodings/atascii.py similarity index 100% rename from telnetlib3/encodings/atascii.py rename to src/telnetlib3/encodings/atascii.py diff --git a/telnetlib3/encodings/big5bbs.py b/src/telnetlib3/encodings/big5bbs.py similarity index 100% rename from telnetlib3/encodings/big5bbs.py rename to src/telnetlib3/encodings/big5bbs.py diff --git a/telnetlib3/encodings/petscii.py b/src/telnetlib3/encodings/petscii.py similarity index 100% rename from telnetlib3/encodings/petscii.py rename to src/telnetlib3/encodings/petscii.py diff --git a/telnetlib3/fingerprinting.py b/src/telnetlib3/fingerprinting.py similarity index 100% rename from telnetlib3/fingerprinting.py rename to src/telnetlib3/fingerprinting.py diff --git a/telnetlib3/fingerprinting_display.py b/src/telnetlib3/fingerprinting_display.py similarity index 100% rename from telnetlib3/fingerprinting_display.py rename to src/telnetlib3/fingerprinting_display.py diff --git a/telnetlib3/guard_shells.py b/src/telnetlib3/guard_shells.py similarity index 100% rename from telnetlib3/guard_shells.py rename to src/telnetlib3/guard_shells.py diff --git a/telnetlib3/mud.py b/src/telnetlib3/mud.py similarity index 100% rename from telnetlib3/mud.py rename to src/telnetlib3/mud.py diff --git a/telnetlib3/py.typed b/src/telnetlib3/py.typed similarity index 100% rename from telnetlib3/py.typed rename to src/telnetlib3/py.typed diff --git a/telnetlib3/relay_server.py b/src/telnetlib3/relay_server.py similarity index 100% rename from telnetlib3/relay_server.py rename to src/telnetlib3/relay_server.py diff --git a/telnetlib3/server.py b/src/telnetlib3/server.py similarity index 100% rename from telnetlib3/server.py rename to src/telnetlib3/server.py diff --git a/telnetlib3/server_base.py b/src/telnetlib3/server_base.py similarity index 100% rename from telnetlib3/server_base.py rename to src/telnetlib3/server_base.py diff --git a/telnetlib3/server_fingerprinting.py b/src/telnetlib3/server_fingerprinting.py similarity index 100% rename from telnetlib3/server_fingerprinting.py rename to src/telnetlib3/server_fingerprinting.py diff --git a/telnetlib3/server_pty_shell.py b/src/telnetlib3/server_pty_shell.py similarity index 100% rename from telnetlib3/server_pty_shell.py rename to src/telnetlib3/server_pty_shell.py diff --git a/telnetlib3/server_shell.py b/src/telnetlib3/server_shell.py similarity index 100% rename from telnetlib3/server_shell.py rename to src/telnetlib3/server_shell.py diff --git a/telnetlib3/slc.py b/src/telnetlib3/slc.py similarity index 100% rename from telnetlib3/slc.py rename to src/telnetlib3/slc.py diff --git a/telnetlib3/stream_reader.py b/src/telnetlib3/stream_reader.py similarity index 100% rename from telnetlib3/stream_reader.py rename to src/telnetlib3/stream_reader.py diff --git a/telnetlib3/stream_writer.py b/src/telnetlib3/stream_writer.py similarity index 100% rename from telnetlib3/stream_writer.py rename to src/telnetlib3/stream_writer.py diff --git a/telnetlib3/sync.py b/src/telnetlib3/sync.py similarity index 100% rename from telnetlib3/sync.py rename to src/telnetlib3/sync.py diff --git a/telnetlib3/telnetlib.py b/src/telnetlib3/telnetlib.py similarity index 100% rename from telnetlib3/telnetlib.py rename to src/telnetlib3/telnetlib.py diff --git a/telnetlib3/telopt.py b/src/telnetlib3/telopt.py similarity index 100% rename from telnetlib3/telopt.py rename to src/telnetlib3/telopt.py diff --git a/telnetlib3/tests/accessories.py b/src/telnetlib3/tests/accessories.py similarity index 99% rename from telnetlib3/tests/accessories.py rename to src/telnetlib3/tests/accessories.py index 2e4ae6a5..4361dfb9 100644 --- a/telnetlib3/tests/accessories.py +++ b/src/telnetlib3/tests/accessories.py @@ -26,7 +26,7 @@ def init_subproc_coverage(run_note=None): except ImportError: return None - coveragerc = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "tox.ini") + coveragerc = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, "tox.ini") cov = coverage.Coverage(config_file=coveragerc) cov.start() return cov diff --git a/telnetlib3/tests/conftest.py b/src/telnetlib3/tests/conftest.py similarity index 100% rename from telnetlib3/tests/conftest.py rename to src/telnetlib3/tests/conftest.py diff --git a/telnetlib3/tests/pty_helper.py b/src/telnetlib3/tests/pty_helper.py similarity index 100% rename from telnetlib3/tests/pty_helper.py rename to src/telnetlib3/tests/pty_helper.py diff --git a/telnetlib3/tests/test_accessories.py b/src/telnetlib3/tests/test_accessories.py similarity index 100% rename from telnetlib3/tests/test_accessories.py rename to src/telnetlib3/tests/test_accessories.py diff --git a/telnetlib3/tests/test_accessories_extra.py b/src/telnetlib3/tests/test_accessories_extra.py similarity index 100% rename from telnetlib3/tests/test_accessories_extra.py rename to src/telnetlib3/tests/test_accessories_extra.py diff --git a/telnetlib3/tests/test_atascii_codec.py b/src/telnetlib3/tests/test_atascii_codec.py similarity index 100% rename from telnetlib3/tests/test_atascii_codec.py rename to src/telnetlib3/tests/test_atascii_codec.py diff --git a/telnetlib3/tests/test_benchmarks.py b/src/telnetlib3/tests/test_benchmarks.py similarity index 100% rename from telnetlib3/tests/test_benchmarks.py rename to src/telnetlib3/tests/test_benchmarks.py diff --git a/telnetlib3/tests/test_big5bbs_codec.py b/src/telnetlib3/tests/test_big5bbs_codec.py similarity index 100% rename from telnetlib3/tests/test_big5bbs_codec.py rename to src/telnetlib3/tests/test_big5bbs_codec.py diff --git a/telnetlib3/tests/test_charset.py b/src/telnetlib3/tests/test_charset.py similarity index 100% rename from telnetlib3/tests/test_charset.py rename to src/telnetlib3/tests/test_charset.py diff --git a/telnetlib3/tests/test_client_shell.py b/src/telnetlib3/tests/test_client_shell.py similarity index 100% rename from telnetlib3/tests/test_client_shell.py rename to src/telnetlib3/tests/test_client_shell.py diff --git a/telnetlib3/tests/test_client_shell_win32.py b/src/telnetlib3/tests/test_client_shell_win32.py similarity index 100% rename from telnetlib3/tests/test_client_shell_win32.py rename to src/telnetlib3/tests/test_client_shell_win32.py diff --git a/telnetlib3/tests/test_client_unit.py b/src/telnetlib3/tests/test_client_unit.py similarity index 100% rename from telnetlib3/tests/test_client_unit.py rename to src/telnetlib3/tests/test_client_unit.py diff --git a/telnetlib3/tests/test_core.py b/src/telnetlib3/tests/test_core.py similarity index 100% rename from telnetlib3/tests/test_core.py rename to src/telnetlib3/tests/test_core.py diff --git a/telnetlib3/tests/test_encoding.py b/src/telnetlib3/tests/test_encoding.py similarity index 100% rename from telnetlib3/tests/test_encoding.py rename to src/telnetlib3/tests/test_encoding.py diff --git a/telnetlib3/tests/test_environ.py b/src/telnetlib3/tests/test_environ.py similarity index 100% rename from telnetlib3/tests/test_environ.py rename to src/telnetlib3/tests/test_environ.py diff --git a/telnetlib3/tests/test_fingerprinting.py b/src/telnetlib3/tests/test_fingerprinting.py similarity index 100% rename from telnetlib3/tests/test_fingerprinting.py rename to src/telnetlib3/tests/test_fingerprinting.py diff --git a/telnetlib3/tests/test_guard_integration.py b/src/telnetlib3/tests/test_guard_integration.py similarity index 100% rename from telnetlib3/tests/test_guard_integration.py rename to src/telnetlib3/tests/test_guard_integration.py diff --git a/telnetlib3/tests/test_linemode.py b/src/telnetlib3/tests/test_linemode.py similarity index 100% rename from telnetlib3/tests/test_linemode.py rename to src/telnetlib3/tests/test_linemode.py diff --git a/telnetlib3/tests/test_mccp.py b/src/telnetlib3/tests/test_mccp.py similarity index 100% rename from telnetlib3/tests/test_mccp.py rename to src/telnetlib3/tests/test_mccp.py diff --git a/telnetlib3/tests/test_mud.py b/src/telnetlib3/tests/test_mud.py similarity index 100% rename from telnetlib3/tests/test_mud.py rename to src/telnetlib3/tests/test_mud.py diff --git a/telnetlib3/tests/test_mud_negotiation.py b/src/telnetlib3/tests/test_mud_negotiation.py similarity index 100% rename from telnetlib3/tests/test_mud_negotiation.py rename to src/telnetlib3/tests/test_mud_negotiation.py diff --git a/telnetlib3/tests/test_naws.py b/src/telnetlib3/tests/test_naws.py similarity index 100% rename from telnetlib3/tests/test_naws.py rename to src/telnetlib3/tests/test_naws.py diff --git a/telnetlib3/tests/test_petscii_codec.py b/src/telnetlib3/tests/test_petscii_codec.py similarity index 100% rename from telnetlib3/tests/test_petscii_codec.py rename to src/telnetlib3/tests/test_petscii_codec.py diff --git a/telnetlib3/tests/test_pty_shell.py b/src/telnetlib3/tests/test_pty_shell.py similarity index 100% rename from telnetlib3/tests/test_pty_shell.py rename to src/telnetlib3/tests/test_pty_shell.py diff --git a/telnetlib3/tests/test_reader.py b/src/telnetlib3/tests/test_reader.py similarity index 100% rename from telnetlib3/tests/test_reader.py rename to src/telnetlib3/tests/test_reader.py diff --git a/telnetlib3/tests/test_relay_server.py b/src/telnetlib3/tests/test_relay_server.py similarity index 100% rename from telnetlib3/tests/test_relay_server.py rename to src/telnetlib3/tests/test_relay_server.py diff --git a/telnetlib3/tests/test_server.py b/src/telnetlib3/tests/test_server.py similarity index 100% rename from telnetlib3/tests/test_server.py rename to src/telnetlib3/tests/test_server.py diff --git a/telnetlib3/tests/test_server_api.py b/src/telnetlib3/tests/test_server_api.py similarity index 100% rename from telnetlib3/tests/test_server_api.py rename to src/telnetlib3/tests/test_server_api.py diff --git a/telnetlib3/tests/test_server_cli.py b/src/telnetlib3/tests/test_server_cli.py similarity index 100% rename from telnetlib3/tests/test_server_cli.py rename to src/telnetlib3/tests/test_server_cli.py diff --git a/telnetlib3/tests/test_server_fingerprinting.py b/src/telnetlib3/tests/test_server_fingerprinting.py similarity index 100% rename from telnetlib3/tests/test_server_fingerprinting.py rename to src/telnetlib3/tests/test_server_fingerprinting.py diff --git a/telnetlib3/tests/test_server_mud.py b/src/telnetlib3/tests/test_server_mud.py similarity index 99% rename from telnetlib3/tests/test_server_mud.py rename to src/telnetlib3/tests/test_server_mud.py index bed2e830..54473671 100644 --- a/telnetlib3/tests/test_server_mud.py +++ b/src/telnetlib3/tests/test_server_mud.py @@ -7,7 +7,7 @@ # 3rd party import pytest -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "bin")) +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", "bin")) # 3rd party import server_mud as mud diff --git a/telnetlib3/tests/test_server_shell_unit.py b/src/telnetlib3/tests/test_server_shell_unit.py similarity index 100% rename from telnetlib3/tests/test_server_shell_unit.py rename to src/telnetlib3/tests/test_server_shell_unit.py diff --git a/telnetlib3/tests/test_shell.py b/src/telnetlib3/tests/test_shell.py similarity index 100% rename from telnetlib3/tests/test_shell.py rename to src/telnetlib3/tests/test_shell.py diff --git a/telnetlib3/tests/test_slc.py b/src/telnetlib3/tests/test_slc.py similarity index 100% rename from telnetlib3/tests/test_slc.py rename to src/telnetlib3/tests/test_slc.py diff --git a/telnetlib3/tests/test_status_logger.py b/src/telnetlib3/tests/test_status_logger.py similarity index 100% rename from telnetlib3/tests/test_status_logger.py rename to src/telnetlib3/tests/test_status_logger.py diff --git a/telnetlib3/tests/test_stream_reader_extra.py b/src/telnetlib3/tests/test_stream_reader_extra.py similarity index 100% rename from telnetlib3/tests/test_stream_reader_extra.py rename to src/telnetlib3/tests/test_stream_reader_extra.py diff --git a/telnetlib3/tests/test_stream_writer_full.py b/src/telnetlib3/tests/test_stream_writer_full.py similarity index 100% rename from telnetlib3/tests/test_stream_writer_full.py rename to src/telnetlib3/tests/test_stream_writer_full.py diff --git a/telnetlib3/tests/test_sync.py b/src/telnetlib3/tests/test_sync.py similarity index 100% rename from telnetlib3/tests/test_sync.py rename to src/telnetlib3/tests/test_sync.py diff --git a/telnetlib3/tests/test_telnetlib.py b/src/telnetlib3/tests/test_telnetlib.py similarity index 100% rename from telnetlib3/tests/test_telnetlib.py rename to src/telnetlib3/tests/test_telnetlib.py diff --git a/telnetlib3/tests/test_timeout.py b/src/telnetlib3/tests/test_timeout.py similarity index 100% rename from telnetlib3/tests/test_timeout.py rename to src/telnetlib3/tests/test_timeout.py diff --git a/telnetlib3/tests/test_tls.py b/src/telnetlib3/tests/test_tls.py similarity index 100% rename from telnetlib3/tests/test_tls.py rename to src/telnetlib3/tests/test_tls.py diff --git a/telnetlib3/tests/test_tspeed.py b/src/telnetlib3/tests/test_tspeed.py similarity index 100% rename from telnetlib3/tests/test_tspeed.py rename to src/telnetlib3/tests/test_tspeed.py diff --git a/telnetlib3/tests/test_ttype.py b/src/telnetlib3/tests/test_ttype.py similarity index 100% rename from telnetlib3/tests/test_ttype.py rename to src/telnetlib3/tests/test_ttype.py diff --git a/telnetlib3/tests/test_uvloop_integration.py b/src/telnetlib3/tests/test_uvloop_integration.py similarity index 100% rename from telnetlib3/tests/test_uvloop_integration.py rename to src/telnetlib3/tests/test_uvloop_integration.py diff --git a/telnetlib3/tests/test_writer.py b/src/telnetlib3/tests/test_writer.py similarity index 100% rename from telnetlib3/tests/test_writer.py rename to src/telnetlib3/tests/test_writer.py diff --git a/telnetlib3/tests/test_xdisploc.py b/src/telnetlib3/tests/test_xdisploc.py similarity index 100% rename from telnetlib3/tests/test_xdisploc.py rename to src/telnetlib3/tests/test_xdisploc.py diff --git a/tox.ini b/tox.ini index f7c33842..3869f84e 100644 --- a/tox.ini +++ b/tox.ini @@ -33,7 +33,7 @@ deps = trustme usedevelop = True commands = - pytest {posargs:--strict-markers --verbose --durations=10} telnetlib3/tests + pytest {posargs:--strict-markers --verbose --durations=10} @@ -43,7 +43,7 @@ commands = deps = black commands = - black telnetlib3/ bin/ + black src/ bin/ [testenv:docformatter] basepython = python3.13 @@ -57,7 +57,7 @@ commands = --pre-summary-newline \ --wrap-summaries=100 \ --wrap-descriptions=100 \ - {toxinidir}/telnetlib3/ \ + {toxinidir}/src/ \ {toxinidir}/docs/conf.py [testenv:docformatter_check] @@ -73,14 +73,14 @@ commands = --pre-summary-newline \ --wrap-summaries=100 \ --wrap-descriptions=100 \ - {toxinidir}/telnetlib3/ \ + {toxinidir}/src/ \ {toxinidir}/docs/conf.py [testenv:flake8] deps = flake8 commands = - flake8 --exclude=tests telnetlib3/ bin/ + flake8 --exclude=tests src/ bin/ [testenv:flake8_tests] deps = @@ -89,25 +89,25 @@ commands = # F811: pytest fixtures appear as redefinitions # E402: imports after conftest fixtures # E712: comparison to False in tests is intentional - flake8 --ignore=W504,F401,E501,F811,E402,E712,F841,W503,E203 telnetlib3/tests/ + flake8 --ignore=W504,F401,E501,F811,E402,E712,F841,W503,E203 src/telnetlib3/tests/ [testenv:isort] deps = isort commands = - isort telnetlib3 bin + isort src bin [testenv:isort_check] deps = isort commands = - isort --diff --check-only telnetlib3 bin + isort --diff --check-only src bin [testenv:mypy] deps = mypy commands = - mypy --strict telnetlib3 + mypy --strict src [testenv:pydocstyle] deps = @@ -116,7 +116,7 @@ deps = doc8 pygments commands = - pydocstyle --source --explain {toxinidir}/telnetlib3 + pydocstyle --source --explain {toxinidir}/src rst-lint README.rst doc8 --ignore-path docs/_build --ignore D000 docs @@ -126,7 +126,7 @@ deps = prettytable ucs-detect>=2 commands = - pylint {posargs} telnetlib3 bin --ignore=tests + pylint {posargs} src bin --ignore=tests [testenv:pylint_tests] deps = @@ -145,7 +145,7 @@ commands = --disable=unpacking-non-sequence \ --disable=unused-import \ --disable=unused-variable \ - {posargs} telnetlib3/tests + {posargs} src/telnetlib3/tests [testenv:codespell] deps = @@ -201,26 +201,26 @@ commands = [coverage:run] branch = True parallel = True -source = telnetlib3 -omit = telnetlib3/tests/* - telnetlib3/telnetlib.py - telnetlib3/_types.py +source = src/telnetlib3 +omit = src/telnetlib3/tests/* + src/telnetlib3/telnetlib.py + src/telnetlib3/_types.py # Too complex for good coverage, though some tests exists, it # is tested by running a public server: telnet 1984.ws 555 - telnetlib3/fingerprinting_display.py + src/telnetlib3/fingerprinting_display.py relative_files = True [coverage:report] precision = 1 exclude_lines = pragma: no cover -omit = telnetlib3/tests/* - telnetlib3/telnetlib.py - telnetlib3/_types.py - telnetlib3/fingerprinting_display.py +omit = src/telnetlib3/tests/* + src/telnetlib3/telnetlib.py + src/telnetlib3/_types.py + src/telnetlib3/fingerprinting_display.py [coverage:paths] -source = telnetlib3/ +source = src/ [doc8] max-line-length = 100 @@ -274,10 +274,11 @@ addopts = --disable-pytest-warnings --ignore=setup.py --ignore=.tox - --ignore=telnetlib3/tests/test_benchmarks.py + --ignore=src/telnetlib3/tests/test_benchmarks.py --durations=10 --timeout=15 --junit-xml=.tox/results.{envname}.xml faulthandler_timeout = 30 filterwarnings = junit_family = xunit1 +testpaths = src/telnetlib3/tests From 657f393472d55f22a9f3aee1734186df32055e7e Mon Sep 17 00:00:00 2001 From: David Tucker Date: Thu, 14 May 2026 16:45:49 +0000 Subject: [PATCH 2/2] Add a telnetlib shim Enable drop-in replacement of the now-removed telnetlib standard library in Python version 3.13 and above. --- pyproject.toml | 2 +- src/telnetlib.py | 11 +++++++++++ src/telnetlib3/tests/test_telnetlib.py | 10 ++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/telnetlib.py diff --git a/pyproject.toml b/pyproject.toml index fd4f776c..f1095886 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,7 +85,7 @@ include = [ ] [tool.hatch.build.targets.wheel] -packages = ["src/telnetlib3"] +packages = ["src/telnetlib.py", "src/telnetlib3"] [tool.pylint.main] load-plugins = [ diff --git a/src/telnetlib.py b/src/telnetlib.py new file mode 100644 index 00000000..5b010fc1 --- /dev/null +++ b/src/telnetlib.py @@ -0,0 +1,11 @@ +""" +Drop-in shim for telnetlib on 3.13+. + +On Python 3.12 and earlier, `import telnetlib` should find the module in the standard library, but +in 3.13+, that standard module is removed. That should cause this shim to be found, which just +imports the (mostly) unadulterated copy this project vendors. +""" + +# local +# pylint: disable=wildcard-import,unused-wildcard-import +from telnetlib3.telnetlib import * # noqa: F401, F403 diff --git a/src/telnetlib3/tests/test_telnetlib.py b/src/telnetlib3/tests/test_telnetlib.py index d97c1a79..eb9c80c7 100644 --- a/src/telnetlib3/tests/test_telnetlib.py +++ b/src/telnetlib3/tests/test_telnetlib.py @@ -3,8 +3,11 @@ # std imports import io import re +import sys import socket import selectors +import sysconfig +import telnetlib as telnetlib_ # pylint: disable=deprecated-module import threading import contextlib @@ -445,3 +448,10 @@ def test_expect(_mock_selector): telnet = make_telnet(want) _, _, data = telnet.expect([b"match"]) assert data == b"".join(want[:-1]) + + +def test_drop_in_support(): + """Ensure `import telnetlib` works in Python 3.13+.""" + telnetlib_in_stdlib = sys.version_info < (3, 13) + telnetlib_is_stdlib = telnetlib_.__file__.startswith(sysconfig.get_path("stdlib")) + assert telnetlib_is_stdlib == telnetlib_in_stdlib