Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-iniconfig for
openSUSE:Factory checked in at 2025-06-10 08:57:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-iniconfig (Old)
and /work/SRC/openSUSE:Factory/.python-iniconfig.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-iniconfig"
Tue Jun 10 08:57:39 2025 rev:9 rq:1283362 version:2.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-iniconfig/python-iniconfig.changes
2023-09-14 16:26:22.936118140 +0200
+++
/work/SRC/openSUSE:Factory/.python-iniconfig.new.19631/python-iniconfig.changes
2025-06-10 08:58:30.182585626 +0200
@@ -1,0 +2,9 @@
+Tue Jun 3 14:18:36 UTC 2025 - Nico Krapp <[email protected]>
+
+- Update to 2.1.0
+ * fix #26 - list individuals in license file by @RonnyPfannschmidt in #52
+ * Run tests in CI by @nicoddemus in #53
+ * Use pypa/gh-action-pypi-publish@release/v1 @ GHA by @webknjaz in #54
+ * Add support for Python 3.12-3.13 and drop EOL 3.7 by @hugovk in #56
+
+-------------------------------------------------------------------
Old:
----
iniconfig-2.0.0-tests.tar.gz
iniconfig-2.0.0.tar.gz
New:
----
iniconfig-2.1.0-tests.tar.gz
iniconfig-2.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-iniconfig.spec ++++++
--- /var/tmp/diff_new_pack.uoYd4U/_old 2025-06-10 08:58:30.814611695 +0200
+++ /var/tmp/diff_new_pack.uoYd4U/_new 2025-06-10 08:58:30.818611860 +0200
@@ -1,7 +1,7 @@
#
-# spec file
+# spec file for package python-iniconfig
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -27,7 +27,7 @@
%endif
%{?sle15_python_module_pythons}
Name: python-iniconfig%{psuffix}
-Version: 2.0.0
+Version: 2.1.0
Release: 0
Summary: iniconfig: brain-dead simple config-ini parsing
License: MIT
@@ -35,7 +35,7 @@
URL: https://github.com/RonnyPfannschmidt/iniconfig
Source:
https://files.pythonhosted.org/packages/source/i/iniconfig/iniconfig-%{version}.tar.gz
Source1:
https://github.com/pytest-dev/iniconfig/archive/refs/tags/v%{version}.tar.gz#/iniconfig-%{version}-tests.tar.gz
-BuildRequires: %{python_module base >= 3.7}
+BuildRequires: %{python_module base >= 3.8}
BuildRequires: %{python_module hatch_vcs}
BuildRequires: %{python_module hatchling}
BuildRequires: %{python_module pip}
++++++ iniconfig-2.0.0-tests.tar.gz -> iniconfig-2.1.0-tests.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.github/workflows/deploy.yml
new/iniconfig-2.1.0/.github/workflows/deploy.yml
--- old/iniconfig-2.0.0/.github/workflows/deploy.yml 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/.github/workflows/deploy.yml 2025-03-19
18:28:27.000000000 +0100
@@ -15,11 +15,11 @@
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.cache/pip
key: deploy-${{ hashFiles('**/pyproject.toml') }}
@@ -27,7 +27,7 @@
deploy-
- name: Set up Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: "3.x"
@@ -50,7 +50,7 @@
- name: Publish package to PyPI
if: github.event.action == 'published'
- uses: pypa/gh-action-pypi-publish@master
+ uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.pypi_password }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.github/workflows/main.yml
new/iniconfig-2.1.0/.github/workflows/main.yml
--- old/iniconfig-2.0.0/.github/workflows/main.yml 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/.github/workflows/main.yml 2025-03-19
18:28:27.000000000 +0100
@@ -1,6 +1,6 @@
name: build
-on: [push, pull_request]
+on: [push, pull_request, workflow_dispatch]
jobs:
build:
@@ -10,23 +10,26 @@
strategy:
fail-fast: false
matrix:
- python: ["3.7", "3.8", "3.9", "3.10", "3.11"]
+ python: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
os: [ubuntu-latest, windows-latest]
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- - name: Install tox
- run: python -m pip install --upgrade pip setuptools_scm hatch hatch-vcs
- - name: install package local
- run: pip install --no-build-isolation .
+ allow-prereleases: true
+ - name: Install hatch
+ run: python -m pip install --upgrade pip hatch hatch-vcs
+ - name: Run tests
+ run: hatch run +py=${{ matrix.python }} test:default --color=yes
pre-commit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
- - uses: pre-commit/[email protected]
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: 3.x
+ - uses: pre-commit/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.pre-commit-config.yaml
new/iniconfig-2.1.0/.pre-commit-config.yaml
--- old/iniconfig-2.0.0/.pre-commit-config.yaml 2023-01-07 12:04:39.000000000
+0100
+++ new/iniconfig-2.1.0/.pre-commit-config.yaml 2025-03-19 18:28:27.000000000
+0100
@@ -3,7 +3,7 @@
rev: v3.3.1
hooks:
- id: pyupgrade
- args: [--py37-plus]
+ args: [--py38-plus]
- repo: https://github.com/tox-dev/pyproject-fmt
rev: "0.4.1"
hooks:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/CHANGELOG
new/iniconfig-2.1.0/CHANGELOG
--- old/iniconfig-2.0.0/CHANGELOG 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/CHANGELOG 2025-03-19 18:28:27.000000000 +0100
@@ -1,4 +1,11 @@
-2.0.0
+2.1.0
+=====
+
+* fix artifact building - pin minimal version of hatch
+* drop eol python 3.8
+* add python 3.12 and 3.13
+
+2.0.0
======
* add support for Python 3.7-3.11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/LICENSE new/iniconfig-2.1.0/LICENSE
--- old/iniconfig-2.0.0/LICENSE 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/LICENSE 2025-03-19 18:28:27.000000000 +0100
@@ -1,19 +1,21 @@
+The MIT License (MIT)
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
+Copyright (c) 2010 - 2023 Holger Krekel and others
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/pyproject.toml
new/iniconfig-2.1.0/pyproject.toml
--- old/iniconfig-2.0.0/pyproject.toml 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/pyproject.toml 2025-03-19 18:28:27.000000000 +0100
@@ -2,7 +2,7 @@
build-backend = "hatchling.build"
requires = [
"hatch-vcs",
- "hatchling",
+ "hatchling>=1.26",
]
[project]
@@ -14,7 +14,7 @@
{ name = "Ronny Pfannschmidt", email = "[email protected]" },
{ name = "Holger Krekel", email = "[email protected]" },
]
-requires-python = ">=3.7"
+requires-python = ">=3.8"
dynamic = [
"version",
]
@@ -27,11 +27,12 @@
"Operating System :: POSIX",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
- "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries",
"Topic :: Utilities",
]
@@ -55,10 +56,10 @@
"pytest"
]
[tool.hatch.envs.test.scripts]
-default = "pytest"
+default = "pytest {args}"
[[tool.hatch.envs.test.matrix]]
-python = ["3.7", "3.8", "3.9", "3.10", "3.11"]
+python = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
[tool.setuptools_scm]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/src/iniconfig/__init__.py
new/iniconfig-2.1.0/src/iniconfig/__init__.py
--- old/iniconfig-2.0.0/src/iniconfig/__init__.py 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/src/iniconfig/__init__.py 2025-03-19
18:28:27.000000000 +0100
@@ -20,7 +20,7 @@
import os
if TYPE_CHECKING:
- from typing_extensions import Final
+ from typing import Final
__all__ = ["IniConfig", "ParseError", "COMMENTCHARS", "iscommentline"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/src/iniconfig/exceptions.py
new/iniconfig-2.1.0/src/iniconfig/exceptions.py
--- old/iniconfig-2.0.0/src/iniconfig/exceptions.py 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/src/iniconfig/exceptions.py 2025-03-19
18:28:27.000000000 +0100
@@ -2,7 +2,7 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing_extensions import Final
+ from typing import Final
class ParseError(Exception):
++++++ iniconfig-2.0.0-tests.tar.gz -> iniconfig-2.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.github/workflows/deploy.yml
new/iniconfig-2.1.0/.github/workflows/deploy.yml
--- old/iniconfig-2.0.0/.github/workflows/deploy.yml 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/.github/workflows/deploy.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,63 +0,0 @@
-name: Deploy
-
-on:
- push:
- branches:
- - master
- - "*deploy*"
- release:
- types:
- - published
-
-jobs:
- build:
- if: github.repository == 'pytest-dev/iniconfig'
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Cache
- uses: actions/cache@v3
- with:
- path: ~/.cache/pip
- key: deploy-${{ hashFiles('**/pyproject.toml') }}
- restore-keys: |
- deploy-
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.x"
-
- - name: Install build + twine
- run: python -m pip install build twine setuptools_scm
-
- - name: git describe output
- run: git describe --tags
-
- - id: scm_version
- run: |
- VERSION=$(python -m setuptools_scm --strip-dev)
- echo SETUPTOOLS_SCM_PRETEND_VERSION=$VERSION >> $GITHUB_ENV
-
- - name: Build package
- run: python -m build
-
- - name: twine check
- run: twine check dist/*
-
- - name: Publish package to PyPI
- if: github.event.action == 'published'
- uses: pypa/gh-action-pypi-publish@master
- with:
- user: __token__
- password: ${{ secrets.pypi_password }}
-
- - name: Publish package to TestPyPI
- uses: pypa/gh-action-pypi-publish@release/v1
- with:
- user: __token__
- password: ${{ secrets.test_pypi_password }}
- repository_url: https://test.pypi.org/legacy/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.github/workflows/main.yml
new/iniconfig-2.1.0/.github/workflows/main.yml
--- old/iniconfig-2.0.0/.github/workflows/main.yml 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/.github/workflows/main.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-name: build
-
-on: [push, pull_request]
-
-jobs:
- build:
-
- runs-on: ${{ matrix.os }}
-
- strategy:
- fail-fast: false
- matrix:
- python: ["3.7", "3.8", "3.9", "3.10", "3.11"]
- os: [ubuntu-latest, windows-latest]
-
- steps:
- - uses: actions/checkout@v3
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: ${{ matrix.python }}
- - name: Install tox
- run: python -m pip install --upgrade pip setuptools_scm hatch hatch-vcs
- - name: install package local
- run: pip install --no-build-isolation .
-
- pre-commit:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
- - uses: pre-commit/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/.pre-commit-config.yaml
new/iniconfig-2.1.0/.pre-commit-config.yaml
--- old/iniconfig-2.0.0/.pre-commit-config.yaml 2023-01-07 12:04:39.000000000
+0100
+++ new/iniconfig-2.1.0/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000
+0100
@@ -1,24 +0,0 @@
-repos:
-- repo: https://github.com/asottile/pyupgrade
- rev: v3.3.1
- hooks:
- - id: pyupgrade
- args: [--py37-plus]
-- repo: https://github.com/tox-dev/pyproject-fmt
- rev: "0.4.1"
- hooks:
- - id: pyproject-fmt
-
-- repo: https://github.com/psf/black
- rev: 22.12.0
- hooks:
- - id: black
- language_version: python3
-- repo: https://github.com/pre-commit/mirrors-mypy
- rev: 'v0.991'
- hooks:
- - id: mypy
- args: []
- additional_dependencies:
- - "pytest==7.2.0"
- - "tomli"
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/CHANGELOG
new/iniconfig-2.1.0/CHANGELOG
--- old/iniconfig-2.0.0/CHANGELOG 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/CHANGELOG 1970-01-01 01:00:00.000000000 +0100
@@ -1,52 +0,0 @@
-2.0.0
-======
-
-* add support for Python 3.7-3.11
-* drop support for Python 2.6-3.6
-* add encoding argument defaulting to utf-8
-* inline and clarify type annotations
-* move parsing code from inline to extra file
-* add typing overloads for helper methods
-
-
-.. note::
-
- major release due to the major changes in python versions supported +
changes in packaging
-
- the api is expected to be compatible
-
-
-1.1.1
-=====
-
-* fix version determination (thanks @florimondmanca)
-
-1.1.0
-=====
-
-- typing stubs (thanks @bluetech)
-- ci fixes
-
-1.0.1
-=====
-
-pytest 5+ support
-
-1.0
-===
-
-- re-sync with pylib codebase
-- add support for Python 3.4-3.5
-- drop support for Python 2.4-2.5, 3.2
-
-0.2
-===
-
-- added ability to ask "name in iniconfig", i.e. to check
- if a section is contained.
-
-- fix bug in "name=value" parsing where value was "x=3"
-
-- allow for ': ' to delimit name=value pairs, so that e.g. .pypirc files
- like http://docs.python.org/distutils/packageindex.html
- can be successfully parsed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/LICENSE new/iniconfig-2.1.0/LICENSE
--- old/iniconfig-2.0.0/LICENSE 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/LICENSE 2020-02-02 01:00:00.000000000 +0100
@@ -1,19 +1,21 @@
+The MIT License (MIT)
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
+Copyright (c) 2010 - 2023 Holger Krekel and others
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/MANIFEST.in
new/iniconfig-2.1.0/MANIFEST.in
--- old/iniconfig-2.0.0/MANIFEST.in 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-include LICENSE
-include example.ini
-include tox.ini
-include src/iniconfig/py.typed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/PKG-INFO new/iniconfig-2.1.0/PKG-INFO
--- old/iniconfig-2.0.0/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/iniconfig-2.1.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,81 @@
+Metadata-Version: 2.4
+Name: iniconfig
+Version: 2.1.0
+Summary: brain-dead simple config-ini parsing
+Project-URL: Homepage, https://github.com/pytest-dev/iniconfig
+Author-email: Ronny Pfannschmidt <[email protected]>, Holger
Krekel <[email protected]>
+License-Expression: MIT
+License-File: LICENSE
+Classifier: Development Status :: 4 - Beta
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: MacOS :: MacOS X
+Classifier: Operating System :: Microsoft :: Windows
+Classifier: Operating System :: POSIX
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+Classifier: Topic :: Software Development :: Libraries
+Classifier: Topic :: Utilities
+Requires-Python: >=3.8
+Description-Content-Type: text/x-rst
+
+iniconfig: brain-dead simple parsing of ini files
+=======================================================
+
+iniconfig is a small and simple INI-file parser module
+having a unique set of features:
+
+* maintains order of sections and entries
+* supports multi-line values with or without line-continuations
+* supports "#" comments everywhere
+* raises errors with proper line-numbers
+* no bells and whistles like automatic substitutions
+* iniconfig raises an Error if two sections have the same name.
+
+If you encounter issues or have feature wishes please report them to:
+
+ https://github.com/RonnyPfannschmidt/iniconfig/issues
+
+Basic Example
+===================================
+
+If you have an ini file like this:
+
+.. code-block:: ini
+
+ # content of example.ini
+ [section1] # comment
+ name1=value1 # comment
+ name1b=value1,value2 # comment
+
+ [section2]
+ name2=
+ line1
+ line2
+
+then you can do:
+
+.. code-block:: pycon
+
+ >>> import iniconfig
+ >>> ini = iniconfig.IniConfig("example.ini")
+ >>> ini['section1']['name1'] # raises KeyError if not exists
+ 'value1'
+ >>> ini.get('section1', 'name1b', [], lambda x: x.split(","))
+ ['value1', 'value2']
+ >>> ini.get('section1', 'notexist', [], lambda x: x.split(","))
+ []
+ >>> [x.name for x in list(ini)]
+ ['section1', 'section2']
+ >>> list(list(ini)[0].items())
+ [('name1', 'value1'), ('name1b', 'value1,value2')]
+ >>> 'section1' in ini
+ True
+ >>> 'inexistendsection' in ini
+ False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/example.ini
new/iniconfig-2.1.0/example.ini
--- old/iniconfig-2.0.0/example.ini 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/example.ini 1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-
-# content of example.ini
-[section1] # comment
-name1=value1 # comment
-name1b=value1,value2 # comment
-
-[section2]
-name2=
- line1
- line2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/pyproject.toml
new/iniconfig-2.1.0/pyproject.toml
--- old/iniconfig-2.0.0/pyproject.toml 2023-01-07 12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
build-backend = "hatchling.build"
requires = [
"hatch-vcs",
- "hatchling",
+ "hatchling>=1.26",
]
[project]
@@ -14,7 +14,7 @@
{ name = "Ronny Pfannschmidt", email = "[email protected]" },
{ name = "Holger Krekel", email = "[email protected]" },
]
-requires-python = ">=3.7"
+requires-python = ">=3.8"
dynamic = [
"version",
]
@@ -27,11 +27,12 @@
"Operating System :: POSIX",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
- "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries",
"Topic :: Utilities",
]
@@ -55,10 +56,10 @@
"pytest"
]
[tool.hatch.envs.test.scripts]
-default = "pytest"
+default = "pytest {args}"
[[tool.hatch.envs.test.matrix]]
-python = ["3.7", "3.8", "3.9", "3.10", "3.11"]
+python = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
[tool.setuptools_scm]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/src/iniconfig/__init__.py
new/iniconfig-2.1.0/src/iniconfig/__init__.py
--- old/iniconfig-2.0.0/src/iniconfig/__init__.py 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/src/iniconfig/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -20,7 +20,7 @@
import os
if TYPE_CHECKING:
- from typing_extensions import Final
+ from typing import Final
__all__ = ["IniConfig", "ParseError", "COMMENTCHARS", "iscommentline"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/src/iniconfig/_version.py
new/iniconfig-2.1.0/src/iniconfig/_version.py
--- old/iniconfig-2.0.0/src/iniconfig/_version.py 1970-01-01
01:00:00.000000000 +0100
+++ new/iniconfig-2.1.0/src/iniconfig/_version.py 2020-02-02
01:00:00.000000000 +0100
@@ -0,0 +1,21 @@
+# file generated by setuptools-scm
+# don't change, don't track in version control
+
+__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
+
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+ from typing import Tuple
+ from typing import Union
+
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
+else:
+ VERSION_TUPLE = object
+
+version: str
+__version__: str
+__version_tuple__: VERSION_TUPLE
+version_tuple: VERSION_TUPLE
+
+__version__ = version = '2.1.0'
+__version_tuple__ = version_tuple = (2, 1, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/src/iniconfig/exceptions.py
new/iniconfig-2.1.0/src/iniconfig/exceptions.py
--- old/iniconfig-2.0.0/src/iniconfig/exceptions.py 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/src/iniconfig/exceptions.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing_extensions import Final
+ from typing import Final
class ParseError(Exception):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/testing/conftest.py
new/iniconfig-2.1.0/testing/conftest.py
--- old/iniconfig-2.0.0/testing/conftest.py 2023-01-07 12:04:39.000000000
+0100
+++ new/iniconfig-2.1.0/testing/conftest.py 1970-01-01 01:00:00.000000000
+0100
@@ -1 +0,0 @@
-option_doctestglob = "README.txt"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/iniconfig-2.0.0/testing/test_iniconfig.py
new/iniconfig-2.1.0/testing/test_iniconfig.py
--- old/iniconfig-2.0.0/testing/test_iniconfig.py 2023-01-07
12:04:39.000000000 +0100
+++ new/iniconfig-2.1.0/testing/test_iniconfig.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,305 +0,0 @@
-from __future__ import annotations
-import pytest
-from iniconfig import IniConfig, ParseError, __all__ as ALL
-from iniconfig._parse import _ParsedLine as PL
-from iniconfig import iscommentline
-from textwrap import dedent
-from pathlib import Path
-
-
-check_tokens: dict[str, tuple[str, list[PL]]] = {
- "section": ("[section]", [PL(0, "section", None, None)]),
- "value": ("value = 1", [PL(0, None, "value", "1")]),
- "value in section": (
- "[section]\nvalue=1",
- [PL(0, "section", None, None), PL(1, "section", "value", "1")],
- ),
- "value with continuation": (
- "names =\n Alice\n Bob",
- [PL(0, None, "names", "Alice\nBob")],
- ),
- "value with aligned continuation": (
- "names = Alice\n Bob",
- [PL(0, None, "names", "Alice\nBob")],
- ),
- "blank line": (
- "[section]\n\nvalue=1",
- [PL(0, "section", None, None), PL(2, "section", "value", "1")],
- ),
- "comment": ("# comment", []),
- "comment on value": ("value = 1", [PL(0, None, "value", "1")]),
- "comment on section": ("[section] #comment", [PL(0, "section", None,
None)]),
- "comment2": ("; comment", []),
- "comment2 on section": ("[section] ;comment", [PL(0, "section", None,
None)]),
- "pseudo section syntax in value": (
- "name = value []",
- [PL(0, None, "name", "value []")],
- ),
- "assignment in value": ("value = x = 3", [PL(0, None, "value", "x = 3")]),
- "use of colon for name-values": ("name: y", [PL(0, None, "name", "y")]),
- "use of colon without space": ("value:y=5", [PL(0, None, "value", "y=5")]),
- "equality gets precedence": ("value=xyz:5", [PL(0, None, "value",
"xyz:5")]),
-}
-
-
[email protected](params=sorted(check_tokens))
-def input_expected(request: pytest.FixtureRequest) -> tuple[str, list[PL]]:
-
- return check_tokens[request.param]
-
-
[email protected]
-def input(input_expected: tuple[str, list[PL]]) -> str:
- return input_expected[0]
-
-
[email protected]
-def expected(input_expected: tuple[str, list[PL]]) -> list[PL]:
- return input_expected[1]
-
-
-def parse(input: str) -> list[PL]:
- from iniconfig._parse import parse_lines
-
- return parse_lines("sample", input.splitlines(True))
-
-
-def parse_a_error(input: str) -> ParseError:
- try:
- parse(input)
- except ParseError as e:
- return e
- else:
- raise ValueError(input)
-
-
-def test_tokenize(input: str, expected: list[PL]) -> None:
- parsed = parse(input)
- assert parsed == expected
-
-
-def test_parse_empty() -> None:
- parsed = parse("")
- assert not parsed
- ini = IniConfig("sample", "")
- assert not ini.sections
-
-
-def test_ParseError() -> None:
- e = ParseError("filename", 0, "hello")
- assert str(e) == "filename:1: hello"
-
-
-def test_continuation_needs_perceeding_token() -> None:
- err = parse_a_error(" Foo")
- assert err.lineno == 0
-
-
-def test_continuation_cant_be_after_section() -> None:
- err = parse_a_error("[section]\n Foo")
- assert err.lineno == 1
-
-
-def test_section_cant_be_empty() -> None:
- err = parse_a_error("[]")
- assert err.lineno == 0
-
-
[email protected](
- "line",
- [
- "!!",
- ],
-)
-def test_error_on_weird_lines(line: str) -> None:
- parse_a_error(line)
-
-
-def test_iniconfig_from_file(tmp_path: Path) -> None:
- path = tmp_path / "test.txt"
- path.write_text("[metadata]\nname=1")
-
- config = IniConfig(path=str(path))
- assert list(config.sections) == ["metadata"]
- config = IniConfig(str(path), "[diff]")
- assert list(config.sections) == ["diff"]
- with pytest.raises(TypeError):
- IniConfig(data=path.read_text()) # type: ignore
-
-
-def test_iniconfig_section_first() -> None:
- with pytest.raises(ParseError) as excinfo:
- IniConfig("x", data="name=1")
- assert excinfo.value.msg == "no section header defined"
-
-
-def test_iniconig_section_duplicate_fails() -> None:
- with pytest.raises(ParseError) as excinfo:
- IniConfig("x", data="[section]\n[section]")
- assert "duplicate section" in str(excinfo.value)
-
-
-def test_iniconfig_duplicate_key_fails() -> None:
- with pytest.raises(ParseError) as excinfo:
- IniConfig("x", data="[section]\nname = Alice\nname = bob")
-
- assert "duplicate name" in str(excinfo.value)
-
-
-def test_iniconfig_lineof() -> None:
- config = IniConfig(
- "x.ini",
- data=("[section]\nvalue = 1\n[section2]\n# comment\nvalue =2"),
- )
-
- assert config.lineof("missing") is None
- assert config.lineof("section") == 1
- assert config.lineof("section2") == 3
- assert config.lineof("section", "value") == 2
- assert config.lineof("section2", "value") == 5
-
- assert config["section"].lineof("value") == 2
- assert config["section2"].lineof("value") == 5
-
-
-def test_iniconfig_get_convert() -> None:
- config = IniConfig("x", data="[section]\nint = 1\nfloat = 1.1")
- assert config.get("section", "int") == "1"
- assert config.get("section", "int", convert=int) == 1
-
-
-def test_iniconfig_get_missing() -> None:
- config = IniConfig("x", data="[section]\nint = 1\nfloat = 1.1")
- assert config.get("section", "missing", default=1) == 1
- assert config.get("section", "missing") is None
-
-
-def test_section_get() -> None:
- config = IniConfig("x", data="[section]\nvalue=1")
- section = config["section"]
- assert section.get("value", convert=int) == 1
- assert section.get("value", 1) == "1"
- assert section.get("missing", 2) == 2
-
-
-def test_missing_section() -> None:
- config = IniConfig("x", data="[section]\nvalue=1")
- with pytest.raises(KeyError):
- config["other"]
-
-
-def test_section_getitem() -> None:
- config = IniConfig("x", data="[section]\nvalue=1")
- assert config["section"]["value"] == "1"
- assert config["section"]["value"] == "1"
-
-
-def test_section_iter() -> None:
- config = IniConfig("x", data="[section]\nvalue=1")
- names = list(config["section"])
- assert names == ["value"]
- items = list(config["section"].items())
- assert items == [("value", "1")]
-
-
-def test_config_iter() -> None:
- config = IniConfig(
- "x.ini",
- data=dedent(
- """
- [section1]
- value=1
- [section2]
- value=2
- """
- ),
- )
- l = list(config)
- assert len(l) == 2
- assert l[0].name == "section1"
- assert l[0]["value"] == "1"
- assert l[1].name == "section2"
- assert l[1]["value"] == "2"
-
-
-def test_config_contains() -> None:
- config = IniConfig(
- "x.ini",
- data=dedent(
- """
- [section1]
- value=1
- [section2]
- value=2
- """
- ),
- )
- assert "xyz" not in config
- assert "section1" in config
- assert "section2" in config
-
-
-def test_iter_file_order() -> None:
- config = IniConfig(
- "x.ini",
- data="""
-[section2] #cpython dict ordered before section
-value = 1
-value2 = 2 # dict ordered before value
-[section]
-a = 1
-b = 2
-""",
- )
- l = list(config)
- secnames = [x.name for x in l]
- assert secnames == ["section2", "section"]
- assert list(config["section2"]) == ["value", "value2"]
- assert list(config["section"]) == ["a", "b"]
-
-
-def test_example_pypirc() -> None:
- config = IniConfig(
- "pypirc",
- data=dedent(
- """
- [distutils]
- index-servers =
- pypi
- other
-
- [pypi]
- repository: <repository-url>
- username: <username>
- password: <password>
-
- [other]
- repository: http://example.com/pypi
- username: <username>
- password: <password>
- """
- ),
- )
- distutils, pypi, other = list(config)
- assert distutils["index-servers"] == "pypi\nother"
- assert pypi["repository"] == "<repository-url>"
- assert pypi["username"] == "<username>"
- assert pypi["password"] == "<password>"
- assert ["repository", "username", "password"] == list(other)
-
-
-def test_api_import() -> None:
- assert ALL == ["IniConfig", "ParseError", "COMMENTCHARS", "iscommentline"]
-
-
[email protected](
- "line",
- [
- "#qwe",
- " #qwe",
- ";qwe",
- " ;qwe",
- ],
-)
-def test_iscommentline_true(line: str) -> None:
- assert iscommentline(line)