Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-traitlets for openSUSE:Factory checked in at 2022-09-15 22:57:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-traitlets (Old) and /work/SRC/openSUSE:Factory/.python-traitlets.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-traitlets" Thu Sep 15 22:57:35 2022 rev:12 rq:1003061 version:5.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-traitlets/python-traitlets.changes 2022-06-24 08:45:33.459155785 +0200 +++ /work/SRC/openSUSE:Factory/.python-traitlets.new.2083/python-traitlets.changes 2022-09-15 22:57:37.848951198 +0200 @@ -1,0 +2,9 @@ +Mon Sep 12 14:34:49 UTC 2022 - Arun Persaud <a...@gmx.de> + +- update to version 5.4.0: + * Fix version_info + * Make generated config files more lintable + * Fix union trait from string + * Add security.md, and tidelift bage + +------------------------------------------------------------------- Old: ---- traitlets-5.3.0.tar.gz New: ---- traitlets-5.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-traitlets.spec ++++++ --- /var/tmp/diff_new_pack.9D0h4w/_old 2022-09-15 22:57:38.324952541 +0200 +++ /var/tmp/diff_new_pack.9D0h4w/_new 2022-09-15 22:57:38.328952553 +0200 @@ -17,7 +17,7 @@ Name: python-traitlets -Version: 5.3.0 +Version: 5.4.0 Release: 0 Summary: Traitlets Python configuration system License: BSD-3-Clause ++++++ traitlets-5.3.0.tar.gz -> traitlets-5.4.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/.github/workflows/downstream.yml new/traitlets-5.4.0/.github/workflows/downstream.yml --- old/traitlets-5.3.0/.github/workflows/downstream.yml 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/.github/workflows/downstream.yml 2020-02-02 01:00:00.000000000 +0100 @@ -2,54 +2,63 @@ on: push: + branches: ["main"] pull_request: +concurrency: + group: downstream-${{ github.ref }} + cancel-in-progress: true + jobs: - tests: + ipython: runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 + with: + package_name: ipython + package_spec: pip install -e ".[test]" + nbconvert: + runs-on: ubuntu-latest + timeout-minutes: 10 steps: - - name: Checkout - uses: actions/checkout@v2 + - uses: actions/checkout@v2 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 + with: + package_name: nbconvert + package_spec: pip install -e ".[test]" - - name: Set up Python 3.8 - uses: actions/setup-python@v2 + jupyter_server: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 with: - python-version: 3.8 + package_name: jupyter_server - - name: Install dependencies - run: | - pip install --upgrade pip - pip install build - python -m build . - pip install dist/traitlets*.whl - pip install --pre --upgrade traitlets[test] pytest pytest-cov - pip install ipython[test] nbconvert[test] \ - notebook[test] ipywidgets[test] - pip freeze - - - name: Run tests IPython - run: | - cd $HOME - pytest -ra --cov traitlets --cov-report=xml:coverage-from-ipython.xml --pyargs IPython - - - name: Run tests nbconvert - run: | - cd $HOME - pytest -ra --cov traitlets --cov-report=xml:coverage-from-nbconvert.xml \ - --pyargs nbconvert -p no:unraisableexception -k 'not network' - - - name: Run tests notebook - run: | - cd $HOME - pytest -ra --cov traitlets --cov-report=xml:coverage-from-notebook.xml \ - --pyargs notebook -k 'not selenium and not integration_tests' - - - name: Run tests ipywidgets - run: | - cd $HOME - pytest -ra --cov traitlets --cov-report=xml:coverage-from-ipywidgets.xml \ - --pyargs ipywidgets + ipywidgets: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 + with: + package_name: ipywidgets - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 + notebook: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v2 + - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + - uses: jupyterlab/maintainer-tools/.github/actions/downstream-test@v1 + with: + package_name: notebook + test_command: pytest -vv --ignore-glob=notebook/tests/selenium/* --ignore-glob=notebook/nbconvert/tests/* --ignore-glob=notebook/services/nbconvert/tests/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/.github/workflows/tests.yml new/traitlets-5.4.0/.github/workflows/tests.yml --- old/traitlets-5.3.0/.github/workflows/tests.yml 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/.github/workflows/tests.yml 2020-02-02 01:00:00.000000000 +0100 @@ -31,7 +31,7 @@ steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 @@ -45,19 +45,19 @@ python -m pytest --cov traitlets --cov-report=xml -v traitlets - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v3 test_miniumum_verisons: name: Test Minimum Versions runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 with: python_version: "3.7" - - name: Install miniumum versions + - name: Install minimum versions uses: jupyterlab/maintainer-tools/.github/actions/install-minimums@v1 - name: Run the unit tests run: pytest -vv -W default traitlets || pytest -vv -W default traitlets --lf @@ -68,7 +68,7 @@ runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Base Setup uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - name: Install the Python dependencies @@ -87,7 +87,7 @@ runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 - uses: jupyterlab/maintainer-tools/.github/actions/make-sdist@v1 @@ -104,8 +104,10 @@ name: pre-commit runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.x - uses: pre-commit/action@v2.0.0 with: extra_args: --all-files --hook-stage=manual diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/.pre-commit-config.yaml new/traitlets-5.4.0/.pre-commit-config.yaml --- old/traitlets-5.3.0/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -25,7 +25,7 @@ - id: trailing-whitespace - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 22.8.0 hooks: - id: black args: ["--line-length", "100"] @@ -38,7 +38,7 @@ args: [--profile=black] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.961 + rev: v0.971 hooks: - id: mypy args: ["--config-file", "pyproject.toml"] @@ -47,43 +47,39 @@ stages: [manual] - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.6.2 + rev: v3.0.0-alpha.0 hooks: - id: prettier - repo: https://github.com/asottile/pyupgrade - rev: v2.34.0 + rev: v2.37.3 hooks: - id: pyupgrade args: [--py37-plus] - repo: https://github.com/PyCQA/doc8 - rev: 0.11.2 + rev: v1.0.0 hooks: - id: doc8 args: [--max-line-length=200] stages: [manual] - repo: https://github.com/pycqa/flake8 - rev: 4.0.1 + rev: 5.0.4 hooks: - id: flake8 additional_dependencies: - [ - "flake8-bugbear==20.1.4", - "flake8-logging-format==0.6.0", - "flake8-implicit-str-concat==0.2.0", - ] + ["flake8-bugbear==22.6.22", "flake8-implicit-str-concat==0.2.0"] stages: [manual] - repo: https://github.com/pre-commit/mirrors-eslint - rev: v8.17.0 + rev: v8.23.0 hooks: - id: eslint stages: [manual] - repo: https://github.com/sirosen/check-jsonschema - rev: 0.16.0 + rev: 0.18.2 hooks: - id: check-jsonschema name: "Check GitHub Workflows" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/PKG-INFO new/traitlets-5.4.0/PKG-INFO --- old/traitlets-5.3.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: traitlets -Version: 5.3.0 +Version: 5.4.0 Project-URL: Homepage, https://github.com/ipython/traitlets Author-email: IPython Development Team <ipython-...@python.org> License: # Licensing terms @@ -65,6 +65,7 @@ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. +License-File: COPYING.md Keywords: Interactive,Interpreter,Shell,Web Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Science/Research @@ -83,6 +84,7 @@ [](https://github.com/ipython/traitlets/actions/workflows/tests.yml) [](https://github.com/ipython/traitlets/actions/workflows/downstream.yml) [](https://traitlets.readthedocs.io/en/latest/?badge=latest) +[](https://tidelift.com/badges/package/pypi/traitlets?style=flat) | | | | ------------- | ------------------------------------ | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/README.md new/traitlets-5.4.0/README.md --- old/traitlets-5.3.0/README.md 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/README.md 2020-02-02 01:00:00.000000000 +0100 @@ -3,6 +3,7 @@ [](https://github.com/ipython/traitlets/actions/workflows/tests.yml) [](https://github.com/ipython/traitlets/actions/workflows/downstream.yml) [](https://traitlets.readthedocs.io/en/latest/?badge=latest) +[](https://tidelift.com/badges/package/pypi/traitlets?style=flat) | | | | ------------- | ------------------------------------ | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/SECURITY.md new/traitlets-5.4.0/SECURITY.md --- old/traitlets-5.3.0/SECURITY.md 1970-01-01 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/SECURITY.md 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,10 @@ +# Security Policy + +## Reporting a Vulnerability + +All IPython and Jupyter security are handled via secur...@ipython.org. +You can find more information on the Jupyter website. https://jupyter.org/security + +## Tidelift + +We are also lifting IPython via Tidelift, you can also report security concern via the [tidelift platform](https://tidelift.com/security). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/docs/source/changelog.rst new/traitlets-5.4.0/docs/source/changelog.rst --- old/traitlets-5.3.0/docs/source/changelog.rst 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/docs/source/changelog.rst 2020-02-02 01:00:00.000000000 +0100 @@ -1,6 +1,16 @@ Changes in Traitlets ==================== +Traitlets 5.4 +------------- + +5.4.0 +***** + + - Fix version_info + - Make generated config files more lintable + - Fix union trait from string + - Add security.md, and tidelift bage Traitlets 5.3 ------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/pyrightconfig.json new/traitlets-5.4.0/pyrightconfig.json --- old/traitlets-5.3.0/pyrightconfig.json 1970-01-01 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/pyrightconfig.json 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1 @@ +{"venvPath":"/Users/steve.silvester/miniconda/envs","venv": "rtraitlets-dc8751d170388729c0a1a5ab_env"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets/_version.py new/traitlets-5.4.0/traitlets/_version.py --- old/traitlets-5.3.0/traitlets/_version.py 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets/_version.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,5 +1,5 @@ -version_info = (5, 3, 0) -__version__ = "5.3.0" +version_info = (5, 4, 0) +__version__ = "5.4.0" # unlike `.dev`, alpha, beta and rc _must not_ have dots, # or the wheel and tgz won't look to pip like the same version. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets/config/application.py new/traitlets-5.4.0/traitlets/config/application.py --- old/traitlets-5.3.0/traitlets/config/application.py 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets/config/application.py 2020-02-02 01:00:00.000000000 +0100 @@ -830,12 +830,12 @@ if not isinstance(path, list): path = [path] - for path in path[::-1]: + for current in reversed(path): # path list is in descending priority order, so load files backwards: - pyloader = cls.python_config_loader_class(basefilename + ".py", path=path, log=log) + pyloader = cls.python_config_loader_class(basefilename + ".py", path=current, log=log) if log: - log.debug("Looking for %s in %s", basefilename, path or os.getcwd()) - jsonloader = cls.json_config_loader_class(basefilename + ".json", path=path, log=log) + log.debug("Looking for %s in %s", basefilename, current or os.getcwd()) + jsonloader = cls.json_config_loader_class(basefilename + ".json", path=current, log=log) loaded: t.List[t.Any] = [] filenames: t.List[str] = [] for loader in [pyloader, jsonloader]: @@ -882,7 +882,7 @@ """Load config files by filename and path.""" filename, ext = os.path.splitext(filename) new_config = Config() - for (config, filename) in self._load_config_files( + for (config, fname) in self._load_config_files( filename, path=path, log=self.log, @@ -890,9 +890,9 @@ ): new_config.merge(config) if ( - filename not in self._loaded_config_files + fname not in self._loaded_config_files ): # only add to list of loaded files if not previously loaded - self._loaded_config_files.append(filename) + self._loaded_config_files.append(fname) # add self.cli_config to preserve CLI config priority new_config.merge(self.cli_config) self.update_config(new_config) @@ -941,6 +941,8 @@ """generate default config file from Configurables""" lines = ["# Configuration file for %s." % self.name] lines.append("") + lines.append("c = get_config() # noqa") + lines.append("") classes = self.classes if classes is None else classes config_classes = list(self._classes_with_config_traits(classes)) for cls in config_classes: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets/tests/test_traitlets.py new/traitlets-5.4.0/traitlets/tests/test_traitlets.py --- old/traitlets-5.3.0/traitlets/tests/test_traitlets.py 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets/tests/test_traitlets.py 2020-02-02 01:00:00.000000000 +0100 @@ -82,6 +82,10 @@ self._notify_type = change["type"] +class CrossValidationStub(HasTraits): + _cross_validation_lock = False + + # ----------------------------------------------------------------------------- # Test classes # ----------------------------------------------------------------------------- @@ -2924,7 +2928,7 @@ if type(expected) is type and issubclass(expected, Exception): with pytest.raises(expected): value = cast(s) - trait.validate(None, value) + trait.validate(CrossValidationStub(), value) else: value = cast(s) assert value == expected @@ -3136,6 +3140,30 @@ _from_string_test(TCPAddress, s, expected) +@pytest.mark.parametrize( + "s, expected", + [("[]", []), ("{}", "{}")], +) +def test_union_of_list_and_unicode_from_string(s, expected): + _from_string_test(Union([List(), Unicode()]), s, expected) + + +@pytest.mark.parametrize( + "s, expected", + [("1", 1), ("1.5", 1.5)], +) +def test_union_of_int_and_float_from_string(s, expected): + _from_string_test(Union([Int(), Float()]), s, expected) + + +@pytest.mark.parametrize( + "s, expected, allow_none", + [("[]", [], False), ("{}", {}, False), ("None", TraitError, False), ("None", None, True)], +) +def test_union_of_list_and_dict_from_string(s, expected, allow_none): + _from_string_test(Union([List(), Dict()], allow_none=allow_none), s, expected) + + def test_all_attribute(): """Verify all trait types are added to `traitlets.__all__`""" names = dir(traitlets) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets/traitlets.py new/traitlets-5.4.0/traitlets/traitlets.py --- old/traitlets-5.3.0/traitlets/traitlets.py 2020-02-02 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets/traitlets.py 2020-02-02 01:00:00.000000000 +0100 @@ -2131,11 +2131,22 @@ ---------- trait_types : sequence The list of trait types of length at least 1. + **kwargs + Extra kwargs passed to `TraitType` Notes ----- Union([Float(), Bool(), Int()]) attempts to validate the provided values with the validation function of Float, then Bool, and finally Int. + + Parsing from string is ambiguous for container types which accept other + collection-like literals (e.g. List accepting both `[]` and `()` + precludes Union from ever parsing ``Union([List(), Tuple()])`` as a tuple; + you can modify behaviour of too permissive container traits by overriding + ``_literal_from_string_pairs`` in subclasses. + Similarly, parsing unions of numeric types is only unambiguous if + types are provided in order of increasing permissiveness, e.g. + ``Union([Int(), Float()])`` (since floats accept integer-looking values). """ self.trait_types = list(trait_types) self.info_text = " or ".join([tt.info() for tt in self.trait_types]) @@ -2179,6 +2190,15 @@ else: return Union(self.trait_types + [other]) + def from_string(self, s): + for trait_type in self.trait_types: + try: + v = trait_type.from_string(s) + return trait_type.validate(None, v) + except (TraitError, ValueError): + continue + return super().from_string(s) + # ----------------------------------------------------------------------------- # Basic TraitTypes implementations/subclasses diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets-dc8751d170388729c0a1a5ab.sublime-project new/traitlets-5.4.0/traitlets-dc8751d170388729c0a1a5ab.sublime-project --- old/traitlets-5.3.0/traitlets-dc8751d170388729c0a1a5ab.sublime-project 1970-01-01 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets-dc8751d170388729c0a1a5ab.sublime-project 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1 @@ +{"folders":[{"path": "."}]} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/traitlets-5.3.0/traitlets-dc8751d170388729c0a1a5ab.sublime-workspace new/traitlets-5.4.0/traitlets-dc8751d170388729c0a1a5ab.sublime-workspace --- old/traitlets-5.3.0/traitlets-dc8751d170388729c0a1a5ab.sublime-workspace 1970-01-01 01:00:00.000000000 +0100 +++ new/traitlets-5.4.0/traitlets-dc8751d170388729c0a1a5ab.sublime-workspace 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1 @@ +{} \ No newline at end of file