From fb88512e9f19ddff11d76cf0543a38e29520cfbf Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:10:22 -0400 Subject: [PATCH 1/7] Use a single constraint file for requirements --- requirements/constraints.txt | 38 ++++++++++++++++++++++++++++++ requirements/requirements-dev.txt | 11 ++++++--- requirements/requirements-test.txt | 1 - requirements/requirements.in | 1 - requirements/requirements.txt | 7 +----- 5 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 requirements/constraints.txt delete mode 100644 requirements/requirements.in diff --git a/requirements/constraints.txt b/requirements/constraints.txt new file mode 100644 index 0000000..cdf8494 --- /dev/null +++ b/requirements/constraints.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate --no-emit-index-url --output-file=./requirements/constraints.txt --strip-extras requirements/requirements-dev.txt requirements/requirements-test.txt requirements/requirements.txt +# +argcomplete==3.6.2 +attrs==25.3.0 +black==25.1.0 +cfgv==3.4.0 +click==8.2.1 +colorlog==6.9.0 +coverage==7.8.2 +dependency-groups==1.3.1 +distlib==0.3.9 +filelock==3.18.0 +flake8==7.2.0 +flake8-builtins==2.5.0 +flake8-pep585==0.1.7 +identify==2.6.12 +iniconfig==2.1.0 +mccabe==0.7.0 +mypy==1.16.0 +mypy-extensions==1.1.0 +nodeenv==1.9.1 +nox==2025.5.1 +packaging==25.0 +pathspec==0.12.1 +platformdirs==4.3.8 +pluggy==1.6.0 +pre-commit==4.2.0 +pycodestyle==2.13.0 +pyflakes==3.3.2 +pytest==8.3.5 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +typing-extensions==4.13.2 +virtualenv==20.31.2 diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index b24b2b3..e99cfd6 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -1,8 +1,13 @@ # Development Requirements - linting, formatting, etc. -pre-commit -black -mypy +# Linting flake8 flake8-builtins flake8-pep585 + +# formatters +black +isort + +# type checking +mypy diff --git a/requirements/requirements-test.txt b/requirements/requirements-test.txt index e6dafae..04472fe 100644 --- a/requirements/requirements-test.txt +++ b/requirements/requirements-test.txt @@ -3,4 +3,3 @@ pytest pytest-randomly coverage -nox diff --git a/requirements/requirements.in b/requirements/requirements.in deleted file mode 100644 index d3e582f..0000000 --- a/requirements/requirements.in +++ /dev/null @@ -1 +0,0 @@ -# Core Dependencies diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 110ef67..d3e582f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,6 +1 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-emit-index-url requirements/requirements.in -# +# Core Dependencies From 63c90db3e71b4a9d7ab023acd6ecb063c6d87e4c Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:11:21 -0400 Subject: [PATCH 2/7] Update nox and CI workflows nox is now the single source of workflow control for the repo. --- .github/workflows/python-tests.yml | 67 +++++----- noxfile.py | 195 ++++++++++++++++++----------- 2 files changed, 158 insertions(+), 104 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 96f3318..6044535 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -1,27 +1,36 @@ name: "python tests and coverage" # Uses: -# https://github.com/actions/setup-python -# https://github.com/actions/checkout -# https://github.com/actions/download-artifact -# https://github.com/actions/upload-artifact +# https://github.com/actions/setup-python : 0b93645e9fea7318ecaed2b359559ac225c90a2b +# https://github.com/actions/checkout : 11bd71901bbe5b1630ceea73d27597364c9af683 +# https://github.com/actions/download-artifact : fa0a91b85d4f404e444e00e005971372dc801d16 +# https://github.com/actions/upload-artifact : 6f51ac03b9356f520e9adb1b1b7802705f340c2b on: pull_request: branches: - - "*" + - "main" push: branches: - "main" jobs: + settings: + runs-on: "ubuntu-latest" + name: "Define workflow settings" + outputs: + default-python-version: "3.12" + steps: + - name: "Define settings" + run: "" + run-tests-and-coverage: - name: "Run nox for tests and coverage" + name: "Run pytest with coverage." + needs: ["settings"] runs-on: "${{ matrix.os }}" strategy: fail-fast: false matrix: os: - - "macos-latest" - "windows-latest" - "ubuntu-latest" python-version: @@ -34,75 +43,77 @@ jobs: steps: - name: "Repo checkout" - uses: "actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11" + uses: "actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683" - name: "Set up Python ${{ matrix.python-version }}" - uses: "actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c" + uses: "actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b" with: python-version: "${{ matrix.python-version }}" allow-prereleases: true - name: "Install nox" run: | - python -m pip install --upgrade pip nox + python -m pip install --upgrade nox - name: "Run tests and coverage via nox" run: | - nox --session tests_with_coverage-${{ matrix.python-version }} + nox --session test -- partial-coverage - name: "Save coverage artifact" - uses: "actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3" + uses: "actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b" with: name: "coverage-artifact-${{ matrix.os}}-${{ matrix.python-version}}" path: ".coverage.*" retention-days: 1 + include-hidden-files: true coverage-compile: - name: "coverage compile" - needs: "run-tests-and-coverage" + name: "Compile coverage reports." + needs: ["settings", "run-tests-and-coverage"] runs-on: "ubuntu-latest" steps: - name: "Repo checkout" - uses: "actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11" + uses: "actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683" - name: "Set up Python" - uses: "actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c" + uses: "actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b" with: - python-version: "3.12" + python-version: "${{ needs.settings.outputs.default-python-version }}" - name: "Install nox" run: | - python -m pip install --upgrade pip nox + python -m pip install --upgrade nox - name: "Download coverage artifacts" - uses: "actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427" + uses: "actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16" with: pattern: "coverage-artifact-*" merge-multiple: true - name: "Compile coverage data, print report" run: | - nox --session coverage_combine_and_report + nox --session coverage_combine export TOTAL=$(python -c "import json;print(json.load(open('coverage.json'))['totals']['percent_covered_display'])") echo "TOTAL=$TOTAL" >> $GITHUB_ENV echo "### Total coverage: ${TOTAL}%" >> $GITHUB_STEP_SUMMARY - mypy-check: - name: "mypy strict enforcement" + linting: + name: "Check linting and formatting requirements" + needs: ["settings"] runs-on: "ubuntu-latest" steps: - name: "Repo checkout" - uses: "actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11" + uses: "actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683" - name: "Set up Python" - uses: "actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c" + uses: "actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b" with: - python-version: "3.12" + python-version: "${{ needs.settings.outputs.default-python-version }}" - name: "Install nox" run: | - python -m pip install --upgrade pip nox + python -m pip install --upgrade nox - - name: "Enforce strict type annotations with mypy" + - name: "Run formatters and linters" run: | - nox --session mypy_check + nox --session lint diff --git a/noxfile.py b/noxfile.py index 88f53cd..7fbe974 100644 --- a/noxfile.py +++ b/noxfile.py @@ -4,6 +4,7 @@ import pathlib import shutil import sys +from functools import partial import nox @@ -11,11 +12,9 @@ MODULE_NAME = "commentedconfigparser" TESTS_PATH = "tests" COVERAGE_FAIL_UNDER = 100 -DEFAULT_PYTHON_VERSION = "3.12" -VENV_PATH = "venv" -REQUIREMENT_IN_FILES = [ - pathlib.Path("requirements/requirements.in"), -] +VENV_PATH = "./.venv" +LINT_PATH = "./src" +REQUIREMENTS_PATH = "./requirements" # What we allowed to clean (delete) CLEANABLE_TARGETS = [ @@ -32,110 +31,148 @@ "./**/*.pyo", ] - # Define the default sessions run when `nox` is called on the CLI -nox.options.sessions = [ - "tests_with_coverage", - "coverage_combine_and_report", - "mypy_check", -] +nox.options.default_venv_backend = "virtualenv" +nox.options.sessions = ["lint", "test"] -@nox.session( - python=["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"], -) -def tests_with_coverage(session: nox.Session) -> None: - """Run unit tests with coverage saved to partial file.""" - print_standard_logs(session) +@nox.session() +def dev(session: nox.Session) -> None: + """Setup a development environment by creating the venv and installs dependencies.""" + # Use the active environement if it exists, otherwise create a new one + venv_path = os.environ.get("VIRTUAL_ENV", VENV_PATH) - session.install(".[test]") - session.run("coverage", "run", "-p", "-m", "pytest", TESTS_PATH) + if sys.platform == "win32": + venv_path = f"{venv_path}/Scripts" + activate_command = f"{venv_path}/activate" + else: + venv_path = f"{venv_path}/bin" + activate_command = f"source {venv_path}/activate" + if not os.path.exists(VENV_PATH): + session.run("python", "-m", "venv", VENV_PATH, "--upgrade-deps") -@nox.session(python=DEFAULT_PYTHON_VERSION) -def coverage_combine_and_report(session: nox.Session) -> None: - """Combine all coverage partial files and generate JSON report.""" - print_standard_logs(session) + python = partial(session.run, f"{venv_path}/python", "-m") + contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt") + + for requirement_file in get_requirement_files(): + python("pip", "install", "-r", requirement_file, *contraint, external=True) + + python("pip", "install", "--editable", ".", *contraint, external=True) - fail_under = f"--fail-under={COVERAGE_FAIL_UNDER}" + python("pip", "install", "pre-commit", external=True) + session.run(f"{venv_path}/pre-commit", "install", external=True) - session.install(".[test]") - session.run("python", "-m", "coverage", "combine") - session.run("python", "-m", "coverage", "report", "-m", fail_under) - session.run("python", "-m", "coverage", "json") + if not os.environ.get("VIRTUAL_ENV"): + session.log(f"\n\nRun '{activate_command}' to enter the virtual environment.\n") -@nox.session(python=DEFAULT_PYTHON_VERSION) -def mypy_check(session: nox.Session) -> None: - """Run mypy against package and all required dependencies.""" +@nox.session(name="test") +def run_tests_with_coverage(session: nox.Session) -> None: + """Run pytest with coverage, outputs console report and json.""" print_standard_logs(session) - session.install(".") - session.install("mypy") - session.run("mypy", "-p", MODULE_NAME, "--no-incremental") + contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt") + session.install(".[test]", *contraint) -@nox.session(python=False) -def coverage(session: nox.Session) -> None: - """Generate a coverage report. Does not use a venv.""" - session.run("coverage", "erase") - session.run("coverage", "run", "-m", "pytest", TESTS_PATH) - session.run("coverage", "report", "-m") + coverage = partial(session.run, "python", "-m", "coverage") + coverage("erase") -@nox.session(python=DEFAULT_PYTHON_VERSION) -def build(session: nox.Session) -> None: - """Build distrobution files.""" + if "partial-coverage" in session.posargs: + coverage("run", "--parallel-mode", "--module", "pytest", TESTS_PATH) + else: + coverage("run", "--module", "pytest", TESTS_PATH) + coverage("report", "--show-missing", f"--fail-under={COVERAGE_FAIL_UNDER}") + coverage("json") + + +@nox.session() +def coverage_combine(session: nox.Session) -> None: + """CI: Combine parallel-mode coverage files and produce reports.""" print_standard_logs(session) - session.install("build") - session.run("python", "-m", "build") + contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt") + session.install("-r", f"{REQUIREMENTS_PATH}/requirements-test.txt", *contraint) -@nox.session(python=False) -def install(session: nox.Session) -> None: - """Setup a development environment. Uses active venv if available, builds one if not.""" - # Use the active environement if it exists, otherwise create a new one - venv_path = os.environ.get("VIRTUAL_ENV", VENV_PATH) + coverage = partial(session.run, "python", "-m", "coverage") + coverage("combine") + coverage("report", "--show-missing", f"--fail-under={COVERAGE_FAIL_UNDER}") + coverage("json") - if sys.platform == "win32": - py_command = "py" - venv_path = f"{venv_path}/Scripts" - activate_command = f"{venv_path}/activate" - else: - py_command = f"python{DEFAULT_PYTHON_VERSION}" - venv_path = f"{venv_path}/bin" - activate_command = f"source {venv_path}/activate" - if not os.path.exists(VENV_PATH): - session.run(py_command, "-m", "venv", VENV_PATH) - session.run(f"{venv_path}/python", "-m", "pip", "install", "--upgrade", "pip") +@nox.session(name="lint") +def run_linters_and_formatters(session: nox.Session) -> None: + """Run code formatters, linters, and type checking against all files.""" + print_standard_logs(session) - session.run(f"{venv_path}/python", "-m", "pip", "install", "-e", ".[dev,test]") - session.run(f"{venv_path}/pre-commit", "install") + contraint = ("--constraint", f"{REQUIREMENTS_PATH}/constraints.txt") + session.install(".[dev]", *contraint) - if not os.environ.get("VIRTUAL_ENV"): - session.log(f"\n\nRun '{activate_command}' to enter the virtual environment.\n") + python = partial(session.run, "python", "-m") + + # Handle anything tool that applies corrections first. + python( + "isort", + "--verbose", + "--force-single-line-imports", + "--profile", + "black", + "--add-import", + "from __future__ import annotations", + LINT_PATH, + ) + python("black", "--verbose", LINT_PATH) + + # Linters: aka, things that yell but want you to fix things + python("flake8", "--show-source", "--verbose", LINT_PATH) + python("mypy", "--no-incremental", "--package", MODULE_NAME) -@nox.session(python=DEFAULT_PYTHON_VERSION) -def update(session: nox.Session) -> None: - """Process requirement*.in files, updating only additions/removals.""" +@nox.session() +def build(session: nox.Session) -> None: + """Build distribution files.""" print_standard_logs(session) - session.install("pip-tools") - for filename in REQUIREMENT_IN_FILES: - session.run("pip-compile", "--no-emit-index-url", str(filename)) + session.install("build") + session.run("python", "-m", "build") + +@nox.session(name="update-deps") +def update_deps(session: nox.Session) -> None: + """Process requirement*.txt files, updating only additions/removals.""" + print_standard_logs(session) -@nox.session(python=DEFAULT_PYTHON_VERSION) -def upgrade(session: nox.Session) -> None: - """Process requirement*.in files and upgrade all libraries as possible.""" + session.install("pip-tools") + session.run( + "pip-compile", + "--strip-extras", + "--no-annotate", + "--no-emit-index-url", + "--output-file", + f"{REQUIREMENTS_PATH}/constraints.txt", + *get_requirement_files(), + ) + + +@nox.session(name="upgrade-deps") +def upgrade_deps(session: nox.Session) -> None: + """Process requirement*.txt files and upgrade all libraries as possible.""" print_standard_logs(session) session.install("pip-tools") - for filename in REQUIREMENT_IN_FILES: - session.run("pip-compile", "--no-emit-index-url", "--upgrade", str(filename)) + session.run( + "pip-compile", + "--strip-extras", + "--no-annotate", + "--no-emit-index-url", + "--upgrade", + "--output-file", + f"{REQUIREMENTS_PATH}/constraints.txt", + *get_requirement_files(), + ) @nox.session(python=False) @@ -158,3 +195,9 @@ def print_standard_logs(session: nox.Session) -> None: version = session.run("python", "--version", silent=True) session.log(f"Running from: {session.bin}") session.log(f"Running with: {version}") + + +def get_requirement_files() -> list[pathlib.Path]: + """Get a list of requirement files matching "requirements*.txt".""" + glob = pathlib.Path(REQUIREMENTS_PATH).glob("requirements*.txt") + return [path for path in glob] From c755fe1fe3b58c8f2b9163b04c4811fb1d5c3255 Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:12:11 -0400 Subject: [PATCH 3/7] Update documentation --- CONTRIBUTING.md | 110 ++++++++++-------------------------------------- README.md | 5 +++ 2 files changed, 27 insertions(+), 88 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2e4c6ac..2d4a27d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,8 +25,7 @@ All pull requests must: Follow the patterns seen in the code. Walk where others have walked. -The majority of code style nits will be met when passing `pre-commit` checks -prior to submitting a pull request. +Be sure to run the expected formatters and linters prior to opening the PR. ### Tests @@ -35,7 +34,6 @@ prior to submitting a pull request. - No test should be dependent on another - No test should be dependent on secrets/tokens - --- # Local developer installation @@ -47,127 +45,69 @@ The following steps outline how to install this repo for local development. ### Clone repo ```console -git clone https://github.com/Preocts/commented-configparser +git clone https://github.com/preocts/commented-configparser cd commented-configparser ``` -### Virtual Environment - -Use a ([`venv`](https://docs.python.org/3/library/venv.html)), or equivalent, -when working with python projects. Leveraging a `venv` will ensure the installed -dependency files will not impact other python projects or any system -dependencies. - -**Windows users**: Depending on your python install you will use `py` in place -of `python` to create the `venv`. - -**Linux/Mac users**: Replace `python`, if needed, with the appropriate call to -the desired version while creating the `venv`. (e.g. `python3` or `python3.12`) - -**All users**: Once inside an active `venv` all systems should allow the use of -`python` for command line instructions. This will ensure you are using the -`venv`'s python and not the system level python. - -### Create the `venv`: - -```console -python -m venv venv -``` - -Activate the `venv`: +### [Install nox](https://nox.thea.codes/en/stable/index.html) -```console -# Linux/Mac -. venv/bin/activate - -# Windows -venv\Scripts\activate -``` - -The command prompt should now have a `(venv)` prefix on it. `python` will now -call the version of the interpreter used to create the `venv` - -To deactivate (exit) the `venv`: +It is recommended to use a tool such as `pipx` or `uvx` to install nox. nox is +needed to run the provided sessions for developer setup, linting, tests, and +dependency management. It is optional, but these instructions will not cover +manually steps outside of nox. -```console -deactivate -``` ---- +## Nox Sessions -## Developer Installation Steps +### Developer Install -### Install editable library and development requirements +This builds the `/.venv`, installs the editable +package, and installs all dependency files. -```console -python -m pip install --editable .[dev,test] +```bash +nox -s dev ``` -### Install pre-commit [(see below for details)](#pre-commit) +### Run tests with coverage ```console -pre-commit install +nox -s test ``` -### Install with nox - -If you have `nox` installed with `pipx` or in the current venv you can use the -following session. This is an alternative to the two steps above. +### Run formatters and linters ```console -nox -s install -``` - ---- - -## Pre-commit and nox tools - -### Run pre-commit on all files - -```console -pre-commit run --all-files -``` - -### Run tests with coverage (quick) - -```console -nox -e coverage -``` - -### Run tests (slow) - -```console -nox +nox -s lint ``` ### Build dist ```console -nox -e build +nox -s build ``` --- ## Updating dependencies -New dependencys can be added to the `requirements-*.in` file. It is recommended +New dependencys can be added to the `requirements-*.txt` file. It is recommended to only use pins when specific versions or upgrades beyond a certain version are to be avoided. Otherwise, allow `pip-compile` to manage the pins in the -generated `requirements-*.txt` files. +generated `constraints.txt` file. Once updated following the steps below, the package can be installed if needed. ### Update the generated files with changes ```console -nox -e update +nox -s update-deps ``` ### Upgrade all generated dependencies ```console -nox -e upgrade +nox -s upgrade-deps ``` --- @@ -178,9 +118,3 @@ nox -e upgrade This repo is setup with a `.pre-commit-config.yaml` with the expectation that any code submitted for review already passes all selected pre-commit checks. - ---- - -## Error: File "setup.py" not found - -Update `pip` to at least version 22.3.1 diff --git a/README.md b/README.md index 1c3ef56..d16f95c 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,11 @@ # commented-configparser +- [Contributing Guide and Developer Setup Guide](./CONTRIBUTING.md) +- [License: MIT](./LICENSE) + +--- + A custom ConfigParser class that preserves comments and option casing when writing loaded config out. This library gives you a custom class of the standard library's `configparser.ConfigParger` which will preserve the comments of a loaded config file when writing that file back out. From 7e428cbdcb93e275fbf3985a1638b0e919882d71 Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:12:38 -0400 Subject: [PATCH 4/7] Add ./.venv --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 324b756..5e053fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ temp_* .env -venv/ +.venv/ *egg-info/ .tox/ .coverage From dfaf4d6005b1f60329a28ca42740f8a9d067983f Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:13:17 -0400 Subject: [PATCH 5/7] Add a no cover flag for a 3.10 detail --- src/commentedconfigparser/commentedconfigparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commentedconfigparser/commentedconfigparser.py b/src/commentedconfigparser/commentedconfigparser.py index 3df7e68..aebbfa2 100644 --- a/src/commentedconfigparser/commentedconfigparser.py +++ b/src/commentedconfigparser/commentedconfigparser.py @@ -37,7 +37,7 @@ def read( filenames = [filenames] # This only exists in 3.10+ and assists with unifying encoding. - if hasattr(io, "text_encoding"): + if hasattr(io, "text_encoding"): # pragma: no cover encoding = io.text_encoding(encoding) read_ok = [] From 193be0f16858e20b385a3a35a59ecf1a7f08fff5 Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:14:50 -0400 Subject: [PATCH 6/7] Remove flake8 and mypy from pre-commit --- .pre-commit-config.yaml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5239278..105b162 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,8 +12,6 @@ repos: - id: trailing-whitespace - id: end-of-file-fixer - id: check-docstring-first - - id: debug-statements - - id: mixed-line-ending # Adds a standard feel to import segments - repo: https://github.com/pycqa/isort @@ -32,19 +30,3 @@ repos: rev: 25.1.0 hooks: - id: black - - # Flake8 for linting, line-length adjusted to match Black default - - repo: https://github.com/PyCQA/flake8 - rev: 7.1.2 - hooks: - - id: flake8 - additional_dependencies: - - flake8-builtins - - flake8-pep585 - - pep8-naming - - # Type enforcement for Python - - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.15.0 - hooks: - - id: mypy From 417e9cdc0fc0facf74869a060b03e53e2fdf3752 Mon Sep 17 00:00:00 2001 From: Preocts Date: Sat, 31 May 2025 12:20:14 -0400 Subject: [PATCH 7/7] Fix typo --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2d4a27d..1fcd98b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,7 +45,7 @@ The following steps outline how to install this repo for local development. ### Clone repo ```console -git clone https://github.com/preocts/commented-configparser +git clone https://github.com/Preocts/commented-configparser cd commented-configparser ```