Skip to content

Legacy Python tooling and metadata no longer match supported runtime #97

Description

@tylerlong

Problem

The repository's documented Python support, dependency declarations, packaging metadata, automation, examples, and local development instructions have drifted apart. Several elements are obsolete or materially stale, and a documented setup currently produces an end-of-life Python environment linked against unsupported LibreSSL.

This issue records the confirmed problems. It intentionally does not choose a remediation plan yet.

Confirmed findings

Python support and local environment

  • The README claims support for Python 3.7 and newer, but Python 3.7, 3.8, and 3.9 are end-of-life.
  • The runtime constraint websockets==15.* requires Python 3.9 or newer, so the advertised Python 3.7 support is already false.
  • The package publishes no Requires-Python metadata, allowing installers to attempt unsupported interpreter versions.
  • CI tests only Python 3.11, while documentation promises a much wider range.
  • Following the current local setup resulted in Python 3.9.6 linked against LibreSSL 2.8.3. urllib3 v2 does not support LibreSSL, producing NotOpenSSLWarning during real SDK use.
  • That local environment also contained pip 21.2.4 and setuptools 58.0.4.

Runtime and development dependencies

  • observable==0.3.* pins 0.3.2 from 2017. The upstream project's latest release is 1.0.3 from 2018, so this dependency is stale and apparently dormant.
  • websockets==15.* is behind the current 17.1 release by two major versions.
  • discover==0.4.0, released in 2010, remains a development dependency even though test discovery is built into Python 3's standard-library unittest.
  • pdoc==14.4.0 is pinned behind the current 16.0.0 release.
  • Minimum constraints such as coverage>=4.3.1, coveralls>=1.1, and requests-mock>=1.2.0 are many years old and no longer describe meaningful tested dependency bounds.
  • There is no committed lockfile, so development and CI dependency resolution changes over time.

Packaging and release metadata

  • The project has no pyproject.toml or standardized [build-system] declaration.
  • Package metadata is maintained only in executable setup.py code, including a hard-coded version and requirements loaded from a separate file.
  • Published metadata omits an explicit supported-Python range and useful modern project metadata.
  • Release automation uses stored PyPI username/password secrets through Twine rather than a credentialless trusted-publishing flow.

GitHub Actions

  • All workflows use actions/checkout@v3 and actions/setup-python@v3; current releases are v6.
  • Documentation deployment uses peaceiris/actions-gh-pages@v3; the current release is v4.
  • Workflows manually create and activate another virtual environment after setup-python has already provisioned an isolated runner.
  • The unit-test and release steps are named “Test with pytest” but execute unittest.
  • The documentation workflow installs python-dotenv explicitly and then installs the development requirements that already include it.

Python examples and contributor documentation

  • WebSocket demos use asyncio.get_event_loop().run_until_complete(). On Python 3.14, get_event_loop() raises when no current event loop exists; top-level applications should use asyncio.run().
  • Contributor notes instruct users to copy .env.sample, but that file does not exist.
  • Contributor notes claim a subscription test requires credentials, but the repository currently has no subscription test.
  • The README SMS example compares a string with is instead of == and calls time.sleep() without importing time.
  • Documentation alternates among python, python3, pip, and pip3 without defining one reproducible environment workflow.

Impact

  • New contributors can reproduce an unsupported TLS/Python environment by following repository guidance.
  • The published compatibility promise is not enforced by package metadata or CI.
  • Builds and tests are not reproducible across time or machines.
  • Old actions and dependencies increase maintenance and compatibility risk.
  • Some documented demos and examples fail on currently supported Python versions.

Planning boundary

A complete remediation plan, supported Python range, dependency upgrade policy, packaging backend, CI matrix, and release authentication approach still need to be decided. No implementation is authorized by this issue alone.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions