[med-svn] [Git][python-team/packages/python-stdlib-list][master] 3 commits: New upstream version 0.12.0

Colin Watson (@cjwatson) gitlab at salsa.debian.org
Mon Oct 27 22:40:38 GMT 2025



Colin Watson pushed to branch master at Debian Python Team / packages / python-stdlib-list


Commits:
cb6d5ebd by Colin Watson at 2025-10-27T22:33:56+00:00
New upstream version 0.12.0
- - - - -
97ece147 by Colin Watson at 2025-10-27T22:35:13+00:00
Update upstream source from tag 'upstream/0.12.0'

Update to upstream version '0.12.0'
with Debian dir 76997b71dde160ab5758b5d0ab3b237dfe9182b9

- - - - -
8efc4d68 by Colin Watson at 2025-10-27T22:37:46+00:00
releasing package python-stdlib-list version 0.12.0-1

- - - - -


17 changed files:

- .github/dependabot.yml
- .github/workflows/ci.yml
- .github/workflows/docs.yml
- .github/workflows/listgen.yml
- .github/workflows/release.yml
- .github/workflows/zizmor.yml
- + CONTRIBUTING.md
- README.md
- debian/changelog
- debian/control
- docs/index.rst
- pyproject.toml
- stdlib_list/__init__.py
- stdlib_list/base.py
- stdlib_list/lists/3.13.txt
- + stdlib_list/lists/3.14.txt
- support/walk-modules.py


Changes:

=====================================
.github/dependabot.yml
=====================================
@@ -5,6 +5,8 @@ updates:
     directory: /
     schedule:
       interval: weekly
+    cooldown:
+      default-days: 7
 
   - package-ecosystem: github-actions
     directory: /
@@ -12,3 +14,5 @@ updates:
       interval: weekly
     open-pull-requests-limit: 99
     rebase-strategy: "disabled"
+    cooldown:
+      default-days: 7


=====================================
.github/workflows/ci.yml
=====================================
@@ -7,6 +7,8 @@ on:
   pull_request:
   workflow_dispatch:
 
+permissions: {}
+
 jobs:
   test:
     strategy:
@@ -17,16 +19,18 @@ jobs:
           - "3.11"
           - "3.12"
           - "3.13"
+          - "3.14"
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           python-version: ${{ matrix.python }}
           cache: pip
+          allow-prereleases: true
 
       - name: test
         run: make test INSTALL_EXTRA=test
@@ -35,24 +39,24 @@ jobs:
     if: always()
 
     needs:
-    - test
+      - test
 
     runs-on: ubuntu-latest
 
     steps:
       - name: check test jobs
-        uses: re-actors/alls-green at v1.2.2
+        uses: re-actors/alls-green at 05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
         with:
           jobs: ${{ toJSON(needs) }}
 
   lint:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           python-version: "3.x"
 


=====================================
.github/workflows/docs.yml
=====================================
@@ -6,15 +6,17 @@ on:
       - main
   workflow_dispatch:
 
+permissions: {}
+
 jobs:
   build:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           python-version: "3.x"
           cache: "pip"
@@ -29,7 +31,7 @@ jobs:
           make doc
 
       - name: upload docs artifact
-        uses: actions/upload-pages-artifact at v3.0.1
+        uses: actions/upload-pages-artifact at 7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
         with:
           path: ./docs/_build/html/
 
@@ -45,4 +47,4 @@ jobs:
       url: ${{ steps.deployment.outputs.page_url }}
     steps:
       - id: deployment
-        uses: actions/deploy-pages at v4.0.5
+        uses: actions/deploy-pages at d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5


=====================================
.github/workflows/listgen.yml
=====================================
@@ -10,6 +10,8 @@ on:
   schedule:
     - cron: "0 0 * * 2"
 
+permissions: {}
+
 jobs:
   pre-list-legacy:
     strategy:
@@ -20,11 +22,11 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           # NOTE: matrix.python is intentionally not used here.
           python-version: "3.x"
@@ -39,7 +41,7 @@ jobs:
           ./env/bin/python ./support/fetch-sphinx.py "${LISTGEN_PYTHON_VERSION}" > pre-list.txt
 
       - name: upload pre-list
-        uses: actions/upload-artifact at v4
+        uses: actions/upload-artifact at 330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
         with:
           name: pre-list-${{ matrix.python }}
           path: pre-list.txt
@@ -49,22 +51,22 @@ jobs:
     strategy:
       matrix:
         python:
-          - "3.7"
-          - "3.8"
+          # - "3.7" # EOL
+          # - "3.8" # EOL
           - "3.9"
 
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           python-version: ${{ matrix.python }}
 
-      - uses: actions/download-artifact at v4
+      - uses: actions/download-artifact at 018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
         with:
           name: pre-list-${{ matrix.python }}
 
@@ -93,7 +95,7 @@ jobs:
 
       - name: create PR
         if: ${{ !inputs.dry-run }}
-        uses: peter-evans/create-pull-request at v7
+        uses: peter-evans/create-pull-request at 271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
         with:
           commit-message: "[BOT] update list for ${{ matrix.python }}"
           branch: update-stdlib-list-${{ matrix.python }}
@@ -115,44 +117,32 @@ jobs:
           - "3.11"
           - "3.12"
           - "3.13"
+          - "3.14"
 
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout at v4
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-
-      - uses: actions/setup-python at v5
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
         with:
           python-version: ${{ matrix.python }}
+          allow-prereleases: true
 
       - name: walk modules
         env:
           LISTGEN_PYTHON_VERSION: ${{ matrix.python }}
-          LISTGEN_DRY_RUN: ${{ inputs.dry-run }}
-        run: |
-          python ./support/walk-modules.py "${LISTGEN_PYTHON_VERSION}.txt"
-
-          if [[ -f "./stdlib_list/lists/"${LISTGEN_PYTHON_VERSION}.txt"" ]]; then
-            sort -u -o ./stdlib_list/lists/"${LISTGEN_PYTHON_VERSION}.txt" \
-              ./stdlib_list/lists/"${LISTGEN_PYTHON_VERSION}.txt" \
-              "${LISTGEN_PYTHON_VERSION}.txt"
-          else
-            sort -u -o ./stdlib_list/lists/"${LISTGEN_PYTHON_VERSION}.txt" \
-              "${LISTGEN_PYTHON_VERSION}.txt"
-          fi
+        run: python ./support/walk-modules.py ./stdlib_list/lists/"${LISTGEN_PYTHON_VERSION}.txt"
 
-          rm "${LISTGEN_PYTHON_VERSION}.txt"
-
-          if [[ "${LISTGEN_DRY_RUN}" == "true" ]]; then
-            git diff
-          fi
+      - name: show diff
+        if: ${{ inputs.dry-run }}
+        run: git diff
 
       - name: create PR
         if: ${{ !inputs.dry-run }}
-        uses: peter-evans/create-pull-request at v7
+        uses: peter-evans/create-pull-request at 271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
         with:
           commit-message: "[BOT] update list for ${{ matrix.python }}"
           branch: update-stdlib-list-${{ matrix.python }}


=====================================
.github/workflows/release.yml
=====================================
@@ -5,6 +5,8 @@ on:
 
 name: release
 
+permissions: {}
+
 jobs:
   pypi:
     name: upload release to PyPI
@@ -19,21 +21,21 @@ jobs:
       contents: write
 
     steps:
-    - uses: actions/checkout at v4
-      with:
-        persist-credentials: false
+      - uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+        with:
+          persist-credentials: false
 
-    - uses: actions/setup-python at v5
-      with:
-        python-version: "3.x"
+      - uses: actions/setup-python at e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
+        with:
+          python-version: "3.x"
 
-    - name: deps
-      run: python -m pip install -U build
+      - name: deps
+        run: python -m pip install -U build
 
-    - name: build
-      run: python -m build
+      - name: build
+        run: python -m build
 
-    - name: publish
-      uses: pypa/gh-action-pypi-publish at v1.12.4
-      with:
-        attestations: true
+      - name: publish
+        uses: pypa/gh-action-pypi-publish at ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
+        with:
+          attestations: true


=====================================
.github/workflows/zizmor.yml
=====================================
@@ -6,31 +6,19 @@ on:
   pull_request:
     branches: ["**"]
 
+permissions: {}
+
 jobs:
   zizmor:
-    name: zizmor latest via PyPI
+    name: Run zizmor 🌈
     runs-on: ubuntu-latest
     permissions:
       security-events: write
-      # required for workflows in private repositories
-      contents: read
-      actions: read
     steps:
       - name: Checkout repository
-        uses: actions/checkout at v4
+        uses: actions/checkout at 08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
         with:
           persist-credentials: false
 
-      - name: Install the latest version of uv
-        uses: astral-sh/setup-uv at v5
-
       - name: Run zizmor 🌈
-        run: uvx zizmor --format sarif . > results.sarif
-        env:
-          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
-      - name: Upload SARIF file
-        uses: github/codeql-action/upload-sarif at v3
-        with:
-          sarif_file: results.sarif
-          category: zizmor
+        uses: zizmorcore/zizmor-action at e673c3917a1aef3c65c972347ed84ccd013ecda4 # v0.2.0


=====================================
CONTRIBUTING.md
=====================================
@@ -0,0 +1,135 @@
+# Contributing to stdlib-list
+
+Thank you for your interest in contributing to `stdlib-list`! We welcome contributions from everyone.
+
+## Overview
+
+`stdlib-list` provides lists of Python standard library modules for Python versions 2.6 through 3.13. The project maintains high standards for code quality, documentation, and testing.
+
+## Development Setup
+
+We use a `Makefile` to streamline the development workflow. To get started:
+
+1. **Clone the repository:**
+   ```bash
+   git clone https://github.com/pypi/stdlib-list.git
+   cd stdlib-list
+   ```
+
+2. **Set up the development environment:**
+   ```bash
+   make dev
+   ```
+   This creates a Python virtual environment and installs all development dependencies.
+
+## Code Quality Standards
+
+We maintain high code quality standards using automated tools:
+
+### Linting and Formatting
+
+- **Ruff**: Used for code linting and formatting
+- **MyPy**: Used for static type checking
+
+Run linting checks:
+```bash
+make lint
+```
+
+Auto-format code:
+```bash
+make reformat
+```
+
+### Testing
+
+We require **100% test coverage** for all code changes.
+
+Run tests:
+```bash
+make test
+```
+
+If you're working on a specific test, you can run individual tests:
+```bash
+make test TESTS="test_name_pattern"
+```
+
+## Documentation
+
+Documentation is built using Sphinx and hosted at [pypi.github.io/stdlib-list](https://pypi.github.io/stdlib-list/).
+
+Build documentation locally:
+```bash
+make doc
+```
+
+### Module Inclusion Policy
+
+Please read our [module inclusion policy](docs/module-policy.rst) to understand how we determine which modules should be included in the standard library lists.
+
+## Making Contributions
+
+### Types of Contributions
+
+We welcome several types of contributions:
+
+1. **Bug reports**: If you find a missing or incorrectly included module
+2. **Bug fixes**: Corrections to module lists or code issues
+3. **Documentation improvements**: Clarifications or additions to docs
+4. **New Python version support**: Adding support for new Python releases
+
+### Submission Process
+
+1. **Fork the repository** on GitHub
+2. **Create a feature branch** from `main`:
+   ```bash
+   git checkout -b feature/your-feature-name
+   ```
+3. **Make your changes** following our code quality standards
+4. **Run the full test suite** to ensure nothing is broken:
+   ```bash
+   make lint && make test
+   ```
+5. **Commit your changes** with a clear, descriptive commit message
+6. **Push to your fork** and **create a pull request**
+
+### Pull Request Guidelines
+
+- Provide a clear description of the problem and solution
+- Include tests for any new functionality
+- Ensure all CI checks pass
+- Keep changes focused and atomic
+- Reference any related issues
+
+### Code Style
+
+- Follow Python PEP 8 (enforced by Ruff)
+- Use type hints (checked by MyPy)
+- Write clear, descriptive commit messages
+- Add docstrings for new functions and classes
+
+## Development Workflow Commands
+
+Here's a quick reference of useful `make` commands:
+
+| Command | Purpose |
+|---------|---------|
+| `make dev` | Set up development environment |
+| `make lint` | Run linting and type checking |
+| `make reformat` | Auto-format code with Ruff |
+| `make test` | Run full test suite with coverage |
+| `make doc` | Build documentation |
+| `make package` | Build distribution packages |
+
+## Getting Help
+
+- **Issues**: For bug reports and feature requests, please use [GitHub Issues](https://github.com/pypi/stdlib-list/issues)
+- **Discussions**: For questions about usage or contribution ideas
+- **Documentation**: Check our [online documentation](https://pypi.github.io/stdlib-list/)
+
+## Project History
+
+This project was originally created by [@jackmaney](https://github.com/jackmaney) and later transferred to the PyPI organization with new maintainers. We appreciate all contributions that help maintain this valuable resource for the Python community.
+
+Thank you for contributing! 🐍
\ No newline at end of file


=====================================
README.md
=====================================
@@ -5,7 +5,7 @@
 [![CI](https://github.com/pypi/stdlib-list/actions/workflows/ci.yml/badge.svg)](https://github.com/pypi/stdlib-list/actions/workflows/ci.yml)
 
 This package includes lists of all of the standard libraries for Python 2.6
-through 3.13.
+through 3.14.
 
 **IMPORTANT**: If you're on Python 3.10 or newer, you **probably don't need this library**.
 See [`sys.stdlib_module_names`](https://docs.python.org/3/library/sys.html#sys.stdlib_module_names)


=====================================
debian/changelog
=====================================
@@ -1,3 +1,17 @@
+python-stdlib-list (0.12.0-1) unstable; urgency=medium
+
+  * Team upload.
+
+  [ Alexandre Detiste ]
+  * Update long description.
+  * Drop build-dependency on python3-setuptools.
+  * Drop "Rules-Requires-Root: no": this is now the default.
+
+  [ Colin Watson ]
+  * New upstream release.
+
+ -- Colin Watson <cjwatson at debian.org>  Mon, 27 Oct 2025 22:36:26 +0000
+
 python-stdlib-list (0.11.1-1) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/control
=====================================
@@ -24,5 +24,5 @@ Depends:
  ${python3:Depends},
 Description: List of Python Standard Libraries
  This package includes lists of all of the standard libraries for
- Python 2.6, 2.7 and 3.2 until 3.13 along
+ Python 2.6, 2.7 and 3.2 until 3.14 along
  with the code for scraping the official Python docs to get said lists.


=====================================
docs/index.rst
=====================================
@@ -2,7 +2,7 @@ stdlib-list
 ===========
 
 This package includes lists of all of the standard libraries for Python 2.6
-through 3.13.
+through 3.14.
 
 .. note::
 


=====================================
pyproject.toml
=====================================
@@ -11,7 +11,7 @@ include = ["tests/"]
 [project]
 name = "stdlib-list"
 dynamic = ["version"]
-description = "A list of Python Standard Libraries (2.7 through 3.13)."
+description = "A list of Python Standard Libraries (2.7 through 3.14)."
 readme = "README.md"
 license = { file = "LICENSE" }
 authors = [{ name = "Jack Maney", email = "jackmaney at gmail.com" }]


=====================================
stdlib_list/__init__.py
=====================================
@@ -1,4 +1,4 @@
-__version__ = "0.11.1"
+__version__ = "0.12.0"
 
 # Import all the things that used to be in here for backwards-compatibility reasons
 from .base import (


=====================================
stdlib_list/base.py
=====================================
@@ -20,6 +20,7 @@ long_versions = [
     "3.11",
     "3.12",
     "3.13",
+    "3.14",
 ]
 
 short_versions = [".".join(x.split(".")[:2]) for x in long_versions]
@@ -58,18 +59,17 @@ def stdlib_list(version: str | None = None) -> list[str]:
 
     data = pkgutil.get_data("stdlib_list", module_list_file).decode()  # type: ignore[union-attr]
 
-    result = [y for y in [x.strip() for x in data.splitlines()] if y]
+    result = [y for x in data.splitlines() if (y := x.strip())]
 
     return result
 
 
 @lru_cache(maxsize=16)
-def _stdlib_list_with_cache(version: str | None = None) -> list[str]:
+def _stdlib_list_with_cache(version: str | None = None) -> frozenset[str]:
     """Internal cached version of `stdlib_list`"""
-    return stdlib_list(version=version)
+    return frozenset(stdlib_list(version=version))
 
 
- at lru_cache(maxsize=256)
 def in_stdlib(module_name: str, version: str | None = None) -> bool:
     """
     Return a ``bool`` indicating if module ``module_name`` is in the list of stdlib


=====================================
stdlib_list/lists/3.13.txt
=====================================
@@ -67,6 +67,7 @@ _pyrepl
 _pyrepl.__main__
 _pyrepl._minimal_curses
 _pyrepl._threading_handler
+_pyrepl.base_eventqueue
 _pyrepl.commands
 _pyrepl.completing_reader
 _pyrepl.console
@@ -86,6 +87,7 @@ _pyrepl.unix_console
 _pyrepl.unix_eventqueue
 _pyrepl.utils
 _pyrepl.windows_console
+_pyrepl.windows_eventqueue
 _queue
 _random
 _scproxy


=====================================
stdlib_list/lists/3.14.txt
=====================================
@@ -0,0 +1,827 @@
+__future__
+__main__
+_abc
+_aix_support
+_android_support
+_apple_support
+_ast
+_ast_unparse
+_asyncio
+_bisect
+_blake2
+_bz2
+_codecs
+_codecs_cn
+_codecs_hk
+_codecs_iso2022
+_codecs_jp
+_codecs_kr
+_codecs_tw
+_collections
+_collections_abc
+_colorize
+_compat_pickle
+_contextvars
+_csv
+_ctypes
+_curses
+_curses_panel
+_datetime
+_dbm
+_decimal
+_elementtree
+_frozen_importlib
+_frozen_importlib_external
+_functools
+_gdbm
+_hashlib
+_heapq
+_hmac
+_imp
+_interpchannels
+_interpqueues
+_interpreters
+_io
+_ios_support
+_json
+_locale
+_lsprof
+_lzma
+_markupbase
+_md5
+_multibytecodec
+_multiprocessing
+_opcode
+_opcode_metadata
+_operator
+_osx_support
+_overlapped
+_pickle
+_posixshmem
+_posixsubprocess
+_py_abc
+_py_warnings
+_pydatetime
+_pydecimal
+_pyio
+_pylong
+_pyrepl
+_pyrepl.__main__
+_pyrepl._module_completer
+_pyrepl._threading_handler
+_pyrepl.base_eventqueue
+_pyrepl.commands
+_pyrepl.completing_reader
+_pyrepl.console
+_pyrepl.fancy_termios
+_pyrepl.historical_reader
+_pyrepl.input
+_pyrepl.keymap
+_pyrepl.main
+_pyrepl.pager
+_pyrepl.reader
+_pyrepl.readline
+_pyrepl.simple_interact
+_pyrepl.terminfo
+_pyrepl.trace
+_pyrepl.types
+_pyrepl.unix_console
+_pyrepl.unix_eventqueue
+_pyrepl.utils
+_pyrepl.windows_console
+_pyrepl.windows_eventqueue
+_queue
+_random
+_remote_debugging
+_scproxy
+_sha1
+_sha2
+_sha3
+_signal
+_sitebuiltins
+_socket
+_sqlite3
+_sre
+_ssl
+_stat
+_statistics
+_string
+_strptime
+_struct
+_suggestions
+_symtable
+_sysconfig
+_thread
+_threading_local
+_tkinter
+_tokenize
+_tracemalloc
+_types
+_typing
+_uuid
+_warnings
+_weakref
+_weakrefset
+_winapi
+_wmi
+_zoneinfo
+_zstd
+abc
+annotationlib
+antigravity
+argparse
+array
+ast
+asyncio
+asyncio.__main__
+asyncio.base_events
+asyncio.base_futures
+asyncio.base_subprocess
+asyncio.base_tasks
+asyncio.constants
+asyncio.coroutines
+asyncio.events
+asyncio.exceptions
+asyncio.format_helpers
+asyncio.futures
+asyncio.graph
+asyncio.locks
+asyncio.log
+asyncio.mixins
+asyncio.proactor_events
+asyncio.protocols
+asyncio.queues
+asyncio.runners
+asyncio.selector_events
+asyncio.sslproto
+asyncio.staggered
+asyncio.streams
+asyncio.subprocess
+asyncio.taskgroups
+asyncio.tasks
+asyncio.threads
+asyncio.timeouts
+asyncio.tools
+asyncio.transports
+asyncio.trsock
+asyncio.unix_events
+asyncio.windows_events
+asyncio.windows_utils
+atexit
+base64
+bdb
+binascii
+bisect
+builtins
+bz2
+cProfile
+calendar
+cmath
+cmd
+code
+codecs
+codeop
+collections
+colorsys
+compileall
+compression
+compression._common
+compression._common._streams
+compression.bz2
+compression.gzip
+compression.lzma
+compression.zlib
+compression.zstd
+compression.zstd._zstdfile
+concurrent
+concurrent.futures
+concurrent.futures._base
+concurrent.futures.interpreter
+concurrent.futures.process
+concurrent.futures.thread
+concurrent.interpreters
+concurrent.interpreters._crossinterp
+concurrent.interpreters._queues
+configparser
+contextlib
+contextvars
+copy
+copyreg
+csv
+ctypes
+ctypes._aix
+ctypes._endian
+ctypes._layout
+ctypes.macholib
+ctypes.macholib.dyld
+ctypes.macholib.dylib
+ctypes.macholib.framework
+ctypes.util
+ctypes.wintypes
+curses
+curses.ascii
+curses.has_key
+curses.panel
+curses.textpad
+dataclasses
+datetime
+dbm
+dbm.dumb
+dbm.gnu
+dbm.ndbm
+dbm.sqlite3
+decimal
+difflib
+dis
+doctest
+email
+email._encoded_words
+email._header_value_parser
+email._parseaddr
+email._policybase
+email.base64mime
+email.charset
+email.contentmanager
+email.encoders
+email.errors
+email.feedparser
+email.generator
+email.header
+email.headerregistry
+email.iterators
+email.message
+email.mime
+email.mime.application
+email.mime.audio
+email.mime.base
+email.mime.image
+email.mime.message
+email.mime.multipart
+email.mime.nonmultipart
+email.mime.text
+email.parser
+email.policy
+email.quoprimime
+email.utils
+encodings
+encodings._win_cp_codecs
+encodings.aliases
+encodings.ascii
+encodings.base64_codec
+encodings.big5
+encodings.big5hkscs
+encodings.bz2_codec
+encodings.charmap
+encodings.cp037
+encodings.cp1006
+encodings.cp1026
+encodings.cp1125
+encodings.cp1140
+encodings.cp1250
+encodings.cp1251
+encodings.cp1252
+encodings.cp1253
+encodings.cp1254
+encodings.cp1255
+encodings.cp1256
+encodings.cp1257
+encodings.cp1258
+encodings.cp273
+encodings.cp424
+encodings.cp437
+encodings.cp500
+encodings.cp720
+encodings.cp737
+encodings.cp775
+encodings.cp850
+encodings.cp852
+encodings.cp855
+encodings.cp856
+encodings.cp857
+encodings.cp858
+encodings.cp860
+encodings.cp861
+encodings.cp862
+encodings.cp863
+encodings.cp864
+encodings.cp865
+encodings.cp866
+encodings.cp869
+encodings.cp874
+encodings.cp875
+encodings.cp932
+encodings.cp949
+encodings.cp950
+encodings.euc_jis_2004
+encodings.euc_jisx0213
+encodings.euc_jp
+encodings.euc_kr
+encodings.gb18030
+encodings.gb2312
+encodings.gbk
+encodings.hex_codec
+encodings.hp_roman8
+encodings.hz
+encodings.idna
+encodings.iso2022_jp
+encodings.iso2022_jp_1
+encodings.iso2022_jp_2
+encodings.iso2022_jp_2004
+encodings.iso2022_jp_3
+encodings.iso2022_jp_ext
+encodings.iso2022_kr
+encodings.iso8859_1
+encodings.iso8859_10
+encodings.iso8859_11
+encodings.iso8859_13
+encodings.iso8859_14
+encodings.iso8859_15
+encodings.iso8859_16
+encodings.iso8859_2
+encodings.iso8859_3
+encodings.iso8859_4
+encodings.iso8859_5
+encodings.iso8859_6
+encodings.iso8859_7
+encodings.iso8859_8
+encodings.iso8859_9
+encodings.johab
+encodings.koi8_r
+encodings.koi8_t
+encodings.koi8_u
+encodings.kz1048
+encodings.latin_1
+encodings.mac_arabic
+encodings.mac_croatian
+encodings.mac_cyrillic
+encodings.mac_farsi
+encodings.mac_greek
+encodings.mac_iceland
+encodings.mac_latin2
+encodings.mac_roman
+encodings.mac_romanian
+encodings.mac_turkish
+encodings.mbcs
+encodings.oem
+encodings.palmos
+encodings.ptcp154
+encodings.punycode
+encodings.quopri_codec
+encodings.raw_unicode_escape
+encodings.rot_13
+encodings.shift_jis
+encodings.shift_jis_2004
+encodings.shift_jisx0213
+encodings.tis_620
+encodings.undefined
+encodings.unicode_escape
+encodings.utf_16
+encodings.utf_16_be
+encodings.utf_16_le
+encodings.utf_32
+encodings.utf_32_be
+encodings.utf_32_le
+encodings.utf_7
+encodings.utf_8
+encodings.utf_8_sig
+encodings.uu_codec
+encodings.zlib_codec
+ensurepip
+ensurepip.__main__
+ensurepip._uninstall
+enum
+errno
+faulthandler
+fcntl
+filecmp
+fileinput
+fnmatch
+fractions
+ftplib
+functools
+gc
+genericpath
+getopt
+getpass
+gettext
+glob
+graphlib
+grp
+gzip
+hashlib
+heapq
+hmac
+html
+html.entities
+html.parser
+http
+http.client
+http.cookiejar
+http.cookies
+http.server
+idlelib
+idlelib.__main__
+idlelib.autocomplete
+idlelib.autocomplete_w
+idlelib.autoexpand
+idlelib.browser
+idlelib.calltip
+idlelib.calltip_w
+idlelib.codecontext
+idlelib.colorizer
+idlelib.config
+idlelib.config_key
+idlelib.configdialog
+idlelib.debugger
+idlelib.debugger_r
+idlelib.debugobj
+idlelib.debugobj_r
+idlelib.delegator
+idlelib.dynoption
+idlelib.editor
+idlelib.filelist
+idlelib.format
+idlelib.grep
+idlelib.help
+idlelib.help_about
+idlelib.history
+idlelib.hyperparser
+idlelib.idle
+idlelib.idle_test
+idlelib.idle_test.htest
+idlelib.idle_test.mock_idle
+idlelib.idle_test.mock_tk
+idlelib.idle_test.template
+idlelib.idle_test.test_autocomplete
+idlelib.idle_test.test_autocomplete_w
+idlelib.idle_test.test_autoexpand
+idlelib.idle_test.test_browser
+idlelib.idle_test.test_calltip
+idlelib.idle_test.test_calltip_w
+idlelib.idle_test.test_codecontext
+idlelib.idle_test.test_colorizer
+idlelib.idle_test.test_config
+idlelib.idle_test.test_config_key
+idlelib.idle_test.test_configdialog
+idlelib.idle_test.test_debugger
+idlelib.idle_test.test_debugger_r
+idlelib.idle_test.test_debugobj
+idlelib.idle_test.test_debugobj_r
+idlelib.idle_test.test_delegator
+idlelib.idle_test.test_editmenu
+idlelib.idle_test.test_editor
+idlelib.idle_test.test_filelist
+idlelib.idle_test.test_format
+idlelib.idle_test.test_grep
+idlelib.idle_test.test_help
+idlelib.idle_test.test_help_about
+idlelib.idle_test.test_history
+idlelib.idle_test.test_hyperparser
+idlelib.idle_test.test_iomenu
+idlelib.idle_test.test_macosx
+idlelib.idle_test.test_mainmenu
+idlelib.idle_test.test_multicall
+idlelib.idle_test.test_outwin
+idlelib.idle_test.test_parenmatch
+idlelib.idle_test.test_pathbrowser
+idlelib.idle_test.test_percolator
+idlelib.idle_test.test_pyparse
+idlelib.idle_test.test_pyshell
+idlelib.idle_test.test_query
+idlelib.idle_test.test_redirector
+idlelib.idle_test.test_replace
+idlelib.idle_test.test_rpc
+idlelib.idle_test.test_run
+idlelib.idle_test.test_runscript
+idlelib.idle_test.test_scrolledlist
+idlelib.idle_test.test_search
+idlelib.idle_test.test_searchbase
+idlelib.idle_test.test_searchengine
+idlelib.idle_test.test_sidebar
+idlelib.idle_test.test_squeezer
+idlelib.idle_test.test_stackviewer
+idlelib.idle_test.test_statusbar
+idlelib.idle_test.test_text
+idlelib.idle_test.test_textview
+idlelib.idle_test.test_tooltip
+idlelib.idle_test.test_tree
+idlelib.idle_test.test_undo
+idlelib.idle_test.test_util
+idlelib.idle_test.test_warning
+idlelib.idle_test.test_window
+idlelib.idle_test.test_zoomheight
+idlelib.idle_test.test_zzdummy
+idlelib.idle_test.tkinter_testing_utils
+idlelib.iomenu
+idlelib.macosx
+idlelib.mainmenu
+idlelib.multicall
+idlelib.outwin
+idlelib.parenmatch
+idlelib.pathbrowser
+idlelib.percolator
+idlelib.pyparse
+idlelib.pyshell
+idlelib.query
+idlelib.redirector
+idlelib.replace
+idlelib.rpc
+idlelib.run
+idlelib.runscript
+idlelib.scrolledlist
+idlelib.search
+idlelib.searchbase
+idlelib.searchengine
+idlelib.sidebar
+idlelib.squeezer
+idlelib.stackviewer
+idlelib.statusbar
+idlelib.textview
+idlelib.tooltip
+idlelib.tree
+idlelib.undo
+idlelib.util
+idlelib.window
+idlelib.zoomheight
+idlelib.zzdummy
+imaplib
+importlib
+importlib._abc
+importlib._bootstrap
+importlib._bootstrap_external
+importlib.abc
+importlib.machinery
+importlib.metadata
+importlib.metadata._adapters
+importlib.metadata._collections
+importlib.metadata._functools
+importlib.metadata._itertools
+importlib.metadata._meta
+importlib.metadata._text
+importlib.metadata.diagnose
+importlib.readers
+importlib.resources
+importlib.resources._adapters
+importlib.resources._common
+importlib.resources._functional
+importlib.resources._itertools
+importlib.resources.abc
+importlib.resources.readers
+importlib.resources.simple
+importlib.simple
+importlib.util
+inspect
+io
+ipaddress
+itertools
+json
+json.__main__
+json.decoder
+json.encoder
+json.scanner
+json.tool
+keyword
+linecache
+locale
+logging
+logging.config
+logging.handlers
+lzma
+mailbox
+marshal
+math
+mimetypes
+mmap
+modulefinder
+msvcrt
+multiprocessing
+multiprocessing.connection
+multiprocessing.context
+multiprocessing.dummy
+multiprocessing.dummy.connection
+multiprocessing.forkserver
+multiprocessing.heap
+multiprocessing.managers
+multiprocessing.pool
+multiprocessing.popen_fork
+multiprocessing.popen_forkserver
+multiprocessing.popen_spawn_posix
+multiprocessing.popen_spawn_win32
+multiprocessing.process
+multiprocessing.queues
+multiprocessing.reduction
+multiprocessing.resource_sharer
+multiprocessing.resource_tracker
+multiprocessing.shared_memory
+multiprocessing.sharedctypes
+multiprocessing.spawn
+multiprocessing.synchronize
+multiprocessing.util
+netrc
+nt
+ntpath
+nturl2path
+numbers
+opcode
+operator
+optparse
+os
+os.path
+pathlib
+pathlib._os
+pathlib.types
+pdb
+pickle
+pickletools
+pkgutil
+platform
+plistlib
+poplib
+posix
+posixpath
+pprint
+profile
+pstats
+pty
+pwd
+py_compile
+pyclbr
+pydoc
+pydoc_data
+pydoc_data.topics
+pyexpat
+pyexpat.errors
+pyexpat.model
+queue
+quopri
+random
+re
+re._casefix
+re._compiler
+re._constants
+re._parser
+readline
+reprlib
+resource
+rlcompleter
+runpy
+sched
+secrets
+select
+selectors
+shelve
+shlex
+shutil
+signal
+site
+smtplib
+socket
+socketserver
+sqlite3
+sqlite3.__main__
+sqlite3.dbapi2
+sqlite3.dump
+sre_compile
+sre_constants
+sre_parse
+ssl
+stat
+statistics
+string
+string.templatelib
+stringprep
+struct
+subprocess
+symtable
+sys
+sysconfig
+sysconfig.__main__
+syslog
+tabnanny
+tarfile
+tempfile
+termios
+textwrap
+this
+threading
+time
+timeit
+tkinter
+tkinter.__main__
+tkinter.colorchooser
+tkinter.commondialog
+tkinter.constants
+tkinter.dialog
+tkinter.dnd
+tkinter.filedialog
+tkinter.font
+tkinter.messagebox
+tkinter.scrolledtext
+tkinter.simpledialog
+tkinter.ttk
+token
+tokenize
+tomllib
+tomllib._parser
+tomllib._re
+tomllib._types
+trace
+traceback
+tracemalloc
+tty
+turtle
+turtledemo
+turtledemo.__main__
+turtledemo.bytedesign
+turtledemo.chaos
+turtledemo.clock
+turtledemo.colormixer
+turtledemo.forest
+turtledemo.fractalcurves
+turtledemo.lindenmayer
+turtledemo.minimal_hanoi
+turtledemo.nim
+turtledemo.paint
+turtledemo.peace
+turtledemo.penrose
+turtledemo.planet_and_moon
+turtledemo.rosette
+turtledemo.round_dance
+turtledemo.sorting_animate
+turtledemo.tree
+turtledemo.two_canvases
+turtledemo.yinyang
+types
+typing
+unicodedata
+unittest
+unittest.__main__
+unittest._log
+unittest.async_case
+unittest.case
+unittest.loader
+unittest.main
+unittest.mock
+unittest.result
+unittest.runner
+unittest.signals
+unittest.suite
+unittest.util
+urllib
+urllib.error
+urllib.parse
+urllib.request
+urllib.response
+urllib.robotparser
+uuid
+venv
+venv.__main__
+warnings
+wave
+weakref
+webbrowser
+winreg
+winsound
+wsgiref
+wsgiref.handlers
+wsgiref.headers
+wsgiref.simple_server
+wsgiref.types
+wsgiref.util
+wsgiref.validate
+xml
+xml.dom
+xml.dom.NodeFilter
+xml.dom.domreg
+xml.dom.expatbuilder
+xml.dom.minicompat
+xml.dom.minidom
+xml.dom.pulldom
+xml.dom.xmlbuilder
+xml.etree
+xml.etree.ElementInclude
+xml.etree.ElementPath
+xml.etree.ElementTree
+xml.etree.cElementTree
+xml.parsers
+xml.parsers.expat
+xml.sax
+xml.sax._exceptions
+xml.sax.expatreader
+xml.sax.handler
+xml.sax.saxutils
+xml.sax.xmlreader
+xmlrpc
+xmlrpc.client
+xmlrpc.server
+zipapp
+zipfile
+zipfile.__main__
+zipfile._path
+zipfile._path.glob
+zipimport
+zlib
+zoneinfo
+zoneinfo._common
+zoneinfo._tzpath
+zoneinfo._zoneinfo


=====================================
support/walk-modules.py
=====================================
@@ -1,24 +1,30 @@
 #!/usr/bin/env python
+from __future__ import annotations
 
+import importlib
 import inspect
 import pkgutil
 import sys
 
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+    from collections.abc import Sequence
+    from types import ModuleType
+
 SEEN_MODS = set()
 
 
-def walk_pkgutil(mod_name, mod, io):
-    for pkg in pkgutil.walk_packages(mod.__path__, mod_name + "."):
+def walk_pkgutil(mod_name: str, locations: Sequence[str]) -> None:
+    for pkg in pkgutil.walk_packages(locations, f"{mod_name}."):
         if pkg.name in SEEN_MODS:
             continue
         else:
             # We don't recurse here because `walk_packages` takes care of
             # it for us.
             SEEN_MODS.add(pkg.name)
-            print(pkg.name, file=io)
 
 
-def walk_naive(mod_name, mod, io):
+def walk_naive(mod_name: str, mod: ModuleType) -> None:
     for attr in dir(mod):
         attr_obj = getattr(mod, attr, None)
         # Shouldn't happen, but who knows.
@@ -33,9 +39,9 @@ def walk_naive(mod_name, mod, io):
         # and import the submodule by its qualified name.
         # If the import fails, we know it's a re-exported module.
         try:
-            submod_name = mod_name + "." + attr
-            __import__(submod_name)
-            walk(submod_name, io)
+            submod_name = f"{mod_name}.{attr}"
+            importlib.import_module(submod_name)
+            walk(submod_name)
         except ImportError:
             # ...but sometimes we do want to include re-exports, since
             # they might be things like "accelerator" modules that don't
@@ -45,47 +51,59 @@ def walk_naive(mod_name, mod, io):
                 # Again, try and import to avoid module-looking object
                 # that don't actually appear on disk. Experimentally,
                 # there are a few of these (like "TK").
-                __import__(attr)
-                walk(attr, io)
+                importlib.import_module(attr)
+                walk(attr)
             except ImportError:
                 continue
 
 
-def walk(mod_name, io):
+def walk(mod_name: str) -> None:
     if mod_name in SEEN_MODS:
         return
     else:
         SEEN_MODS.add(mod_name)
-        print(mod_name, file=io)
 
     # Try and import it.
     try:
-        mod = __import__(mod_name)
+        mod = importlib.import_module(mod_name)
+    except ImportError:
+        return
 
-        if hasattr(mod, "__path__"):
-            walk_pkgutil(mod_name, mod, io)
-        else:
-            walk_naive(mod_name, mod, io)
+    try:
+        locations = mod.__spec__.submodule_search_locations
+    except AttributeError:
+        locations = None
 
-    except ImportError:
-        pass
+    if locations is not None:
+        walk_pkgutil(mod_name, locations)
+    else:
+        walk_naive(mod_name, mod)
 
 
 if __name__ == "__main__":
     output = sys.argv[1]
 
-    with open(output, mode="w") as io:
-        for mod_name in sys.builtin_module_names:
-            walk(mod_name, io)
+    for mod_name in sys.builtin_module_names:
+        walk(mod_name)
 
-        if hasattr(sys, "stdlib_module_names"):
-            for mod_name in sys.stdlib_module_names:
-                walk(mod_name, io)
-        else:
-            for mod_name in sys.stdin:
-                # Our precomputed list might not start at the root, since it
-                # might be a package rather than a module.
-                if "." in mod_name:
-                    top_mod = mod_name.split(".")[0]
-                    walk(top_mod, io)
-                walk(mod_name.rstrip("\n"), io)
+    if hasattr(sys, "stdlib_module_names"):
+        for mod_name in sys.stdlib_module_names:
+            walk(mod_name)
+    else:
+        for mod_name in sys.stdin:
+            # Our precomputed list might not start at the root, since it
+            # might be a package rather than a module.
+            if "." in mod_name:
+                top_mod = mod_name.split(".")[0]
+                walk(top_mod)
+            walk(mod_name.rstrip("\n"))
+
+    try:
+        with open(output, encoding="utf-8") as io:
+            SEEN_MODS.update(io.read().splitlines())
+    except FileNotFoundError:
+        pass
+
+    with open(output, mode="w", encoding="utf-8") as io:
+        for line in sorted(SEEN_MODS):
+            print(line, file=io)



View it on GitLab: https://salsa.debian.org/python-team/packages/python-stdlib-list/-/compare/a726a7b35699d425aaae4cd549982351b2717ccb...8efc4d68a7aa3ed496fb7e8595dc5b7b698c98db

-- 
View it on GitLab: https://salsa.debian.org/python-team/packages/python-stdlib-list/-/compare/a726a7b35699d425aaae4cd549982351b2717ccb...8efc4d68a7aa3ed496fb7e8595dc5b7b698c98db
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20251027/df2f6ffa/attachment-0001.htm>


More information about the debian-med-commit mailing list