Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-easydict for openSUSE:Factory
checked in at 2026-11-10 14:40:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-easydict (Old)
and /work/SRC/openSUSE:Factory/.python-easydict.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-easydict"
Tue Nov 10 14:40:16 2026 rev:2 rq:1396397 version:1.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-easydict/python-easydict.changes
2026-08-24 15:43:35.721659820 +0200
+++
/work/SRC/openSUSE:Factory/.python-easydict.new.3759290/python-easydict.changes
2026-11-10 14:41:29.253248103 +0100
@@ -1,0 +2,14 @@
+Mon Nov 9 18:13:10 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.14:
+ * Fix update() mutating its positional argument
+ * setdefault() now keeps attributes in sync, including nested
+ mappings
+ * Subclasses of list, tuple and dict are no longer
+ auto-converted
+- Drop CHANGES from %doc: no longer shipped in the sdist
+- Switch to the setuptools_scm-based build (upstream dropped
+ setup.py); pin the tagged version via
+ SETUPTOOLS_SCM_PRETEND_VERSION
+
+-------------------------------------------------------------------
Old:
----
easydict-1.13.tar.gz
New:
----
easydict-1.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-easydict.spec ++++++
--- /var/tmp/diff_new_pack.UIr8nN/_old 2026-11-10 14:41:31.228330843 +0100
+++ /var/tmp/diff_new_pack.UIr8nN/_new 2026-11-10 14:41:31.230330927 +0100
@@ -18,14 +18,15 @@
%{?sle15_python_module_pythons}
Name: python-easydict
-Version: 1.13
+Version: 1.14
Release: 0
Summary: Access dict values as attributes (works recursively)
License: LGPL-3.0-only
URL: https://github.com/makinacorpus/easydict
Source:
https://files.pythonhosted.org/packages/source/e/easydict/easydict-%{version}.tar.gz
BuildRequires: %{python_module pip}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module setuptools >= 77}
+BuildRequires: %{python_module setuptools_scm >= 8}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@@ -41,6 +42,8 @@
%autosetup -p1 -n easydict-%{version}
%build
+# sdist ships no .git; pin the tagged version for setuptools-scm.
+export SETUPTOOLS_SCM_PRETEND_VERSION=%{version}
%pyproject_wheel
%install
@@ -51,9 +54,9 @@
# Upstream ships no pytest suite; CI runs doctest on the module.
%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} $python -B -c "import
doctest, easydict; r = doctest.testmod(easydict); raise SystemExit(r.failed)"
-%files %{python_files}
+%files %python_files
%license LICENSE
-%doc README.rst CHANGES
+%doc README.rst
%{python_sitelib}/easydict
%{python_sitelib}/easydict-%{version}.dist-info
++++++ easydict-1.13.tar.gz -> easydict-1.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/.github/workflows/publish.yml
new/easydict-1.14/.github/workflows/publish.yml
--- old/easydict-1.13/.github/workflows/publish.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/easydict-1.14/.github/workflows/publish.yml 2026-11-09
13:44:40.939068800 +0100
@@ -0,0 +1,55 @@
+name: Publish Python 🐍 distribution 📦 to PyPI
+
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ build:
+ name: Build distribution 📦
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Set up Python
+ uses: actions/setup-python@v6
+ with:
+ python-version: "3.x"
+
+ - name: Print environment
+ run: |
+ python --version
+
+ - name: Install pypa/build
+ run: python3 -m pip install build
+
+ - name: Build a binary wheel and a source tarball
+ run: python3 -m build
+
+ - name: Store the distribution packages
+ uses: actions/upload-artifact@v5
+ with:
+ name: python-package-distributions
+ path: dist/
+
+ publish-to-pypi:
+ name: Publish Python 🐍 distribution 📦 to PyPI
+ if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag
pushes
+ needs:
+ - build
+ runs-on: ubuntu-latest
+ environment:
+ name: release
+ url: https://pypi.org/p/easydict
+ permissions:
+ id-token: write
+ steps:
+ - name: Download all the dists
+ uses: actions/download-artifact@v6
+ with:
+ name: python-package-distributions
+ path: dist/
+ - name: Publish distribution 📦 to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/.github/workflows/test.yml
new/easydict-1.14/.github/workflows/test.yml
--- old/easydict-1.13/.github/workflows/test.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/easydict-1.14/.github/workflows/test.yml 2026-11-09
13:44:40.939377000 +0100
@@ -0,0 +1,40 @@
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+ - main
+
+name: Tests
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: actions/setup-python@v4
+
+ - name: Install dependencies
+ run: pip install ruff
+
+ - name: Run linting and formatting checks
+ run: ruff check
+
+ unit-tests:
+ name: Unit Tests
+ needs: lint
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ python-version: ["3.11", "3.12", "3.14", "3.15"]
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v5
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Run doctests
+ run: python easydict/__init__.py -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/.gitignore new/easydict-1.14/.gitignore
--- old/easydict-1.13/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/easydict-1.14/.gitignore 2026-11-09 13:44:40.939377000 +0100
@@ -0,0 +1,6 @@
+*.pyc
+/build/
+/dist/
+easydict.egg-info/
+.ruff_cache
+__pycache__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/CHANGES new/easydict-1.14/CHANGES
--- old/easydict-1.13/CHANGES 2024-03-04 13:02:43.000000000 +0100
+++ new/easydict-1.14/CHANGES 1970-01-01 01:00:00.000000000 +0100
@@ -1,78 +0,0 @@
-=========
-CHANGELOG
-=========
-
-1.12 (2024-03-04)
-=================
-
-- Fix #46: Fix handling of optional default value for .pop() (#47)
-
-1.12 (2024-02-13)
-=================
-
-- Fix #22: Do not convert tuple attributes to list (#44)
-
-1.11 (2023-10-24)
-=================
-
-- Fix #39: RecursionError when dict in class member (#41)
-- Minor changes in README
-
-1.10 (2022-09-28)
-=================
-
-* Make tests compatible with python2 and python3 (thanks @JackLangerman)
-* Dictify input
-* Fix license metadata
-
-1.9 (2018-10-18)
-================
-
-* Fix issue #3 that update and pop now work correctly on EasyDicts.
-
-
-1.8 (2018-08-17)
-================
-
-* Update package classifiers.
-
-
-1.7 (2017-04-27)
-================
-
-* Prevent copying sub-EasyDicts on assignment to fix unpickling (#7, thanks
@Chronos-Sk)
-
-1.6 (2015-01-27)
-================
-
-* Allow setting attributes via setting items (thanks phivos)
-
-1.5 (2014-08-07)
-================
-
-* Allow subclassing using self instead of class name (thanks Steve Engledow)
-
-1.4 (2011-03-13)
-================
-
-* Access class attributes like instance attributes
-
-1.3 (2012-02-08)
-================
-
-* Better documentation and tests
-
-1.2 (2011-06-08)
-================
-
-* Fix inclusion of README
-
-1.1 (2012-04-21)
-================
-
-* Switch to distutils2
-
-1.0 (2011-04-18)
-================
-
-* Initial working version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/MANIFEST.in
new/easydict-1.14/MANIFEST.in
--- old/easydict-1.13/MANIFEST.in 2022-09-28 13:16:54.000000000 +0200
+++ new/easydict-1.14/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-include README.rst CHANGES LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/PKG-INFO new/easydict-1.14/PKG-INFO
--- old/easydict-1.13/PKG-INFO 2024-03-04 13:03:23.822693000 +0100
+++ new/easydict-1.14/PKG-INFO 2026-11-09 13:44:46.543886700 +0100
@@ -1,22 +1,22 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: easydict
-Version: 1.13
+Version: 1.14
Summary: Access dict values as attributes (works recursively).
-Home-page: https://github.com/makinacorpus/easydict
-Download-URL: http://pypi.python.org/pypi/easydict/
-Author: Mathieu Leplatre
-Author-email: [email protected]
-License: LGPL-3.0
+Author-email: Mathieu Leplatre <[email protected]>
+License-Expression: LGPL-3.0-only
+Project-URL: Homepage, https://github.com/makinacorpus/easydict
+Project-URL: Download, https://pypi.org/project/easydict/
+Project-URL: Changelog, https://github.com/makinacorpus/easydict/releases/
Keywords: Tools
Classifier: Topic :: Utilities
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: GNU Lesser General Public License v3
(LGPLv3)
-Classifier: Programming Language :: Python :: 2.5
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3
+Description-Content-Type: text/x-rst
License-File: LICENSE
+Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/easydict.svg
:target: https://pypi.python.org/pypi/easydict
@@ -128,83 +128,3 @@
* `TreeDict <http://pypi.python.org/pypi/treedict>`_, a fast and full-featured
dict-like tree container.
* `addict <https://github.com/mewwts/addict>`_
-
-
-=========
-CHANGELOG
-=========
-
-1.12 (2024-03-04)
-=================
-
-- Fix #46: Fix handling of optional default value for .pop() (#47)
-
-1.12 (2024-02-13)
-=================
-
-- Fix #22: Do not convert tuple attributes to list (#44)
-
-1.11 (2023-10-24)
-=================
-
-- Fix #39: RecursionError when dict in class member (#41)
-- Minor changes in README
-
-1.10 (2022-09-28)
-=================
-
-* Make tests compatible with python2 and python3 (thanks @JackLangerman)
-* Dictify input
-* Fix license metadata
-
-1.9 (2018-10-18)
-================
-
-* Fix issue #3 that update and pop now work correctly on EasyDicts.
-
-
-1.8 (2018-08-17)
-================
-
-* Update package classifiers.
-
-
-1.7 (2017-04-27)
-================
-
-* Prevent copying sub-EasyDicts on assignment to fix unpickling (#7, thanks
@Chronos-Sk)
-
-1.6 (2015-01-27)
-================
-
-* Allow setting attributes via setting items (thanks phivos)
-
-1.5 (2014-08-07)
-================
-
-* Allow subclassing using self instead of class name (thanks Steve Engledow)
-
-1.4 (2011-03-13)
-================
-
-* Access class attributes like instance attributes
-
-1.3 (2012-02-08)
-================
-
-* Better documentation and tests
-
-1.2 (2011-06-08)
-================
-
-* Fix inclusion of README
-
-1.1 (2012-04-21)
-================
-
-* Switch to distutils2
-
-1.0 (2011-04-18)
-================
-
-* Initial working version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict/__init__.py
new/easydict-1.14/easydict/__init__.py
--- old/easydict-1.13/easydict/__init__.py 2024-03-04 12:15:50.000000000
+0100
+++ new/easydict-1.14/easydict/__init__.py 2026-11-09 13:44:40.939377000
+0100
@@ -54,7 +54,30 @@
>>> d.tpl = (1, 2, 3)
>>> d.tpl
(1, 2, 3)
-
+ >>> d.lst = [{'a': 1}, {'b': 2}]
+ >>> type(d.lst).__name__, type(d.lst[0]).__name__, d.lst[0].a, d.lst[1].b
+ ('list', 'EasyDict', 1, 2)
+ >>> d.tpl = ({'a': 1}, {'b': 2})
+ >>> type(d.tpl).__name__, type(d.tpl[0]).__name__, d.tpl[0].a, d.tpl[1].b
+ ('tuple', 'EasyDict', 1, 2)
+
+ Subclasses of list, tuple and dict are left untouched
+
+ >>> class CustomList(list): pass
+ >>> class CustomTuple(tuple): pass
+ >>> class CustomDict(dict): pass
+ >>> d = EasyDict()
+ >>> d.lst = CustomList([{'a': 1}])
+ >>> type(d.lst).__name__, type(d.lst[0]).__name__
+ ('CustomList', 'dict')
+ >>> d.tpl = CustomTuple(({'a': 1},))
+ >>> type(d.tpl).__name__, type(d.tpl[0]).__name__
+ ('CustomTuple', 'dict')
+ >>> d.dct = CustomDict({'key': 'value'})
+ >>> type(d.dct).__name__
+ 'CustomDict'
+ >>> d.dct == {'key': 'value'}
+ True
Values extraction
@@ -129,6 +152,48 @@
4
>>> d
{'c': 3.0}
+
+ Set defaults through attributes, including nested mappings
+
+ >>> d = EasyDict()
+ >>> d.setdefault('count', 2)
+ 2
+ >>> d.count
+ 2
+ >>> settings = d.setdefault('settings', {'enabled': True})
+ >>> settings is d.settings
+ True
+ >>> settings.enabled
+ True
+ >>> d.setdefault('count', 9)
+ 2
+ >>> d.count
+ 2
+ >>> d.setdefault('optional') is None
+ True
+ >>> d.optional is None
+ True
+ >>> sorted(d)
+ ['count', 'optional', 'settings']
+
+ Keys that cannot be ordinary attributes remain dictionary entries
+
+ >>> for key in (1, None, ('item',), '__class__', '__dict__',
'__weakref__'):
+ ... d = EasyDict()
+ ... value = {'enabled': True}
+ ... assert d.setdefault(key, value) is value
+ ... assert d[key] is value
+ ... assert d.setdefault(key, 'replacement') is value
+ ... assert type(d) is EasyDict
+ ... assert vars(d) == {}
+
+ update does not mutate its argument
+
+ >>> src = {'a': 1}
+ >>> d = EasyDict()
+ >>> d.update(src, b=2)
+ >>> src == {'a': 1}
+ True
"""
def __init__(self, d=None, **kwargs):
if d is None:
@@ -140,31 +205,38 @@
for k, v in d.items():
setattr(self, k, v)
# Class attributes
- for k in self.__class__.__dict__.keys():
- if not (k.startswith('__') and k.endswith('__')) and k not in
('update', 'pop'):
+ for k in self.__class__.__dict__:
+ if not (k.startswith('__') and k.endswith('__')) and k not in
('update', 'pop', 'setdefault'):
setattr(self, k, getattr(self, k))
def __setattr__(self, name, value):
- if isinstance(value, (list, tuple)):
+ if type(value) in (list, tuple):
value = type(value)(self.__class__(x)
if isinstance(x, dict) else x for x in value)
- elif isinstance(value, dict) and not isinstance(value, EasyDict):
+ elif type(value) == dict and not isinstance(value, EasyDict):
value = EasyDict(value)
- super(EasyDict, self).__setattr__(name, value)
- super(EasyDict, self).__setitem__(name, value)
+ super().__setattr__(name, value)
+ super().__setitem__(name, value)
__setitem__ = __setattr__
def update(self, e=None, **f):
- d = e or dict()
+ d = dict(e) if e else {}
d.update(f)
for k in d:
setattr(self, k, d[k])
+ def setdefault(self, key, default=None):
+ if not isinstance(key, str) or (key.startswith('__') and
key.endswith('__')):
+ return dict.setdefault(self, key, default)
+ if key not in self:
+ self[key] = default
+ return self[key]
+
def pop(self, k, *args):
if hasattr(self, k):
delattr(self, k)
- return super(EasyDict, self).pop(k, *args)
+ return super().pop(k, *args)
if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict.egg-info/PKG-INFO
new/easydict-1.14/easydict.egg-info/PKG-INFO
--- old/easydict-1.13/easydict.egg-info/PKG-INFO 2024-03-04
13:03:23.000000000 +0100
+++ new/easydict-1.14/easydict.egg-info/PKG-INFO 2026-11-09
13:44:46.528137200 +0100
@@ -1,22 +1,22 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: easydict
-Version: 1.13
+Version: 1.14
Summary: Access dict values as attributes (works recursively).
-Home-page: https://github.com/makinacorpus/easydict
-Download-URL: http://pypi.python.org/pypi/easydict/
-Author: Mathieu Leplatre
-Author-email: [email protected]
-License: LGPL-3.0
+Author-email: Mathieu Leplatre <[email protected]>
+License-Expression: LGPL-3.0-only
+Project-URL: Homepage, https://github.com/makinacorpus/easydict
+Project-URL: Download, https://pypi.org/project/easydict/
+Project-URL: Changelog, https://github.com/makinacorpus/easydict/releases/
Keywords: Tools
Classifier: Topic :: Utilities
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: GNU Lesser General Public License v3
(LGPLv3)
-Classifier: Programming Language :: Python :: 2.5
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3
+Description-Content-Type: text/x-rst
License-File: LICENSE
+Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/easydict.svg
:target: https://pypi.python.org/pypi/easydict
@@ -128,83 +128,3 @@
* `TreeDict <http://pypi.python.org/pypi/treedict>`_, a fast and full-featured
dict-like tree container.
* `addict <https://github.com/mewwts/addict>`_
-
-
-=========
-CHANGELOG
-=========
-
-1.12 (2024-03-04)
-=================
-
-- Fix #46: Fix handling of optional default value for .pop() (#47)
-
-1.12 (2024-02-13)
-=================
-
-- Fix #22: Do not convert tuple attributes to list (#44)
-
-1.11 (2023-10-24)
-=================
-
-- Fix #39: RecursionError when dict in class member (#41)
-- Minor changes in README
-
-1.10 (2022-09-28)
-=================
-
-* Make tests compatible with python2 and python3 (thanks @JackLangerman)
-* Dictify input
-* Fix license metadata
-
-1.9 (2018-10-18)
-================
-
-* Fix issue #3 that update and pop now work correctly on EasyDicts.
-
-
-1.8 (2018-08-17)
-================
-
-* Update package classifiers.
-
-
-1.7 (2017-04-27)
-================
-
-* Prevent copying sub-EasyDicts on assignment to fix unpickling (#7, thanks
@Chronos-Sk)
-
-1.6 (2015-01-27)
-================
-
-* Allow setting attributes via setting items (thanks phivos)
-
-1.5 (2014-08-07)
-================
-
-* Allow subclassing using self instead of class name (thanks Steve Engledow)
-
-1.4 (2011-03-13)
-================
-
-* Access class attributes like instance attributes
-
-1.3 (2012-02-08)
-================
-
-* Better documentation and tests
-
-1.2 (2011-06-08)
-================
-
-* Fix inclusion of README
-
-1.1 (2012-04-21)
-================
-
-* Switch to distutils2
-
-1.0 (2011-04-18)
-================
-
-* Initial working version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict.egg-info/SOURCES.txt
new/easydict-1.14/easydict.egg-info/SOURCES.txt
--- old/easydict-1.13/easydict.egg-info/SOURCES.txt 2024-03-04
13:03:23.000000000 +0100
+++ new/easydict-1.14/easydict.egg-info/SOURCES.txt 2026-11-09
13:44:46.537371000 +0100
@@ -1,11 +1,13 @@
-CHANGES
+.gitignore
LICENSE
-MANIFEST.in
README.rst
-setup.py
+pyproject.toml
+.github/workflows/publish.yml
+.github/workflows/test.yml
easydict/__init__.py
easydict.egg-info/PKG-INFO
easydict.egg-info/SOURCES.txt
easydict.egg-info/dependency_links.txt
-easydict.egg-info/not-zip-safe
+easydict.egg-info/scm_file_list.json
+easydict.egg-info/scm_version.json
easydict.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict.egg-info/not-zip-safe
new/easydict-1.14/easydict.egg-info/not-zip-safe
--- old/easydict-1.13/easydict.egg-info/not-zip-safe 2022-09-28
13:21:01.000000000 +0200
+++ new/easydict-1.14/easydict.egg-info/not-zip-safe 1970-01-01
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict.egg-info/scm_file_list.json
new/easydict-1.14/easydict.egg-info/scm_file_list.json
--- old/easydict-1.13/easydict.egg-info/scm_file_list.json 1970-01-01
01:00:00.000000000 +0100
+++ new/easydict-1.14/easydict.egg-info/scm_file_list.json 2026-11-09
13:44:46.526790900 +0100
@@ -0,0 +1,11 @@
+{
+ "files": [
+ ".github/workflows/publish.yml",
+ ".github/workflows/test.yml",
+ ".gitignore",
+ "LICENSE",
+ "README.rst",
+ "easydict/__init__.py",
+ "pyproject.toml"
+ ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/easydict.egg-info/scm_version.json
new/easydict-1.14/easydict.egg-info/scm_version.json
--- old/easydict-1.13/easydict.egg-info/scm_version.json 1970-01-01
01:00:00.000000000 +0100
+++ new/easydict-1.14/easydict.egg-info/scm_version.json 2026-11-09
13:44:46.521070000 +0100
@@ -0,0 +1,8 @@
+{
+ "tag": "1.14",
+ "distance": 0,
+ "node": "gfae493a1380d9b77af0cc9e607571f836bdd2a2c",
+ "dirty": false,
+ "branch": "HEAD",
+ "node_date": "2026-11-09"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/pyproject.toml
new/easydict-1.14/pyproject.toml
--- old/easydict-1.13/pyproject.toml 1970-01-01 01:00:00.000000000 +0100
+++ new/easydict-1.14/pyproject.toml 2026-11-09 13:44:40.939377000 +0100
@@ -0,0 +1,35 @@
+[project]
+name = "easydict"
+dynamic = ["version"]
+readme = "README.rst"
+description = "Access dict values as attributes (works recursively)."
+license = "LGPL-3.0-only"
+license-files = ["LICENSE"]
+authors = [
+ { name = "Mathieu Leplatre", email = "[email protected]"
},
+]
+keywords = ["Tools"]
+classifiers = [
+ "Topic :: Utilities",
+ "Natural Language :: English",
+ "Operating System :: OS Independent",
+ "Intended Audience :: Developers",
+ "Development Status :: 5 - Production/Stable",
+ "Programming Language :: Python :: 3",
+]
+dependencies = []
+
+[project.urls]
+Homepage = "https://github.com/makinacorpus/easydict"
+Download = "https://pypi.org/project/easydict/"
+Changelog = "https://github.com/makinacorpus/easydict/releases/"
+
+[tool.setuptools]
+packages = ["easydict"]
+
+[tool.setuptools_scm]
+# presence enables setuptools_scm (version from git tags)
+
+[build-system]
+requires = ["setuptools>=77", "setuptools_scm>=8"]
+build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/easydict-1.13/setup.py new/easydict-1.14/setup.py
--- old/easydict-1.13/setup.py 2024-03-04 13:01:32.000000000 +0100
+++ new/easydict-1.14/setup.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf8 -*-
-import os
-from setuptools import setup, find_packages
-
-here = os.path.abspath(os.path.dirname(__file__))
-
-setup(
- name='easydict',
- version='1.13',
- author='Mathieu Leplatre',
- author_email='[email protected]',
- url='https://github.com/makinacorpus/easydict',
- download_url="http://pypi.python.org/pypi/easydict/",
- description="Access dict values as attributes (works recursively).",
- long_description=open(os.path.join(here, 'README.rst')).read() + '\n\n' +
- open(os.path.join(here, 'CHANGES')).read(),
- license='LGPL-3.0',
- install_requires=[],
- packages=find_packages(),
- include_package_data=True,
- zip_safe=False,
- keywords=['Tools'],
- classifiers=['Topic :: Utilities',
- 'Natural Language :: English',
- 'Operating System :: OS Independent',
- 'Intended Audience :: Developers',
- 'Development Status :: 5 - Production/Stable',
- 'License :: OSI Approved :: GNU Lesser General Public License
v3 (LGPLv3)',
- 'Programming Language :: Python :: 2.5',
- 'Programming Language :: Python :: 3.6'],
-)