[med-svn] [Git][python-team/packages/python-stdlib-list][upstream] New upstream version 0.12.0
Colin Watson (@cjwatson)
gitlab at salsa.debian.org
Mon Oct 27 22:40:48 GMT 2025
Colin Watson pushed to branch upstream 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
- - - - -
15 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
- 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 @@
[](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)
=====================================
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/-/commit/cb6d5ebd85f445d79d5d3f61dc7dbb6b69d61eb1
--
View it on GitLab: https://salsa.debian.org/python-team/packages/python-stdlib-list/-/commit/cb6d5ebd85f445d79d5d3f61dc7dbb6b69d61eb1
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/3a6376fa/attachment-0001.htm>
More information about the debian-med-commit
mailing list