openSUSE Commits
Threads by month
- ----- 2024 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
October 2024
- 1 participants
- 1410 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package oc for openSUSE:Factory checked in at 2024-10-02 21:33:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/oc (Old)
and /work/SRC/openSUSE:Factory/.oc.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "oc"
Wed Oct 2 21:33:59 2024 rev:3 rq:1205061 version:4.17.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/oc/oc.changes 2024-07-04 16:25:56.085340133 +0200
+++ /work/SRC/openSUSE:Factory/.oc.new.19354/oc.changes 2024-10-02 21:34:24.864950618 +0200
@@ -1,0 +2,124 @@
+Wed Oct 02 05:56:20 UTC 2024 - opensuse_buildservice(a)ojkastl.de
+
+- Update to version 4.17.0:
+ * node-joiner: use proxy settings when required
+ * make the idle command's scale update unconditional
+ * Adding examples for add-cluster-role-to-* and
+ remove-cluster-role-from-* so they show in the CLI docs
+ * Make MacAddress mandatory until installer validations are
+ updated
+ * Make MacAddress flag optional, add test for
+ createConfigFileFromFlags
+ * upgrade-status: add test coverage for a compact cluster and a
+ single-node cluster
+ * WRKLDS-1429: Adds a guardrail for node-image commands which is
+ supported only for Openshift version 4.17 and later
+ * upgrade-status: fix HasOSImage function
+ * [OTA-1153]upgrade-status: communicate control plane completion
+ clearly
+ * WRKLDS-1316: Retry and do not fail when logs cannot be updated
+ * added flags to support simper single node interface
+ * WRKLDS-1316: Remove clusterversions from certificates api group
+ * node-joiner: add the required role to support platform type
+ validation
+ * Separate api group for secrets
+ * upgrade-status: fix a typo in README
+ * Update command description
+ * upgrade status: removes custom nodes from the worker pool (2)
+ * Revert "upgrade status: removes custom nodes from the worker
+ pool"
+ * Remove common.go and incorporate review feedback
+ * Create monitor run test and reuse common code
+ * Revert "OCPBUGS-35994: pkg/cli/admin/upgrade/rollback: Drop
+ this command"
+ * upgarde status: use a table to represent node pools (#1821)
+ * Minor wording tweaks for CLI help
+ * Shared code placed in common.go
+ * WRKLDS-1316: oc adm node-image monitor command
+ * renamed to node-image
+ * add-nodes: define empty commands structure
+ * WRKLDS-1314: create image command (#1819)
+ * upgrade status: removes custom nodes from the worker pool
+ * Extend the kube version check for images/tools/Dockerfile
+ * Remove invalid test cases: empty dockerfiles are no longer
+ allowed
+ * Lower case command value before comparision
+ * bump(k8s.io)=1.30.2
+ * pkg/cli/admin/mustgather: GA since and since-time flags
+ * pkg/cli/admin/prune/renderedmachineconfigs: 'Error dry-run
+ deleting'
+ * pkg/cli/admin/upgrade/rollback: Drop this command
+ * Inject ReleaseArch into openshift-install
+ * `upgrade status`: revert to overestimating remaining time
+ * `upgrade status`: lower estimated node actions to avoid
+ inconsistency with estimation
+ * `upgrade status`: overestimate total duration, not remaining
+ time
+ * `upgrade status`: change how last observed progress is computed
+ * `upgrade status`: get baseline from history when possible
+ * `upgrade status`: stalled or progressing-slow when over
+ estimate
+ * `upgrade status`: show <10m when estimate is lower than 10m
+ * `upgrade status`: overestimate remaining time by 20%
+ * `update status`: Avoid projecting from small values
+ * `upgrade status`: do not show estimate TTC when completed
+ * `upgrade status`: estimate better via last observed progress
+ * `update status`: use timewise completion estimate
+ * `update status`: project estimate duration from elapsed
+ * `update status`: add baseline control plane estimate duration
+ * `update status`: truncate subsecond durations
+ * `update status`: inject ns skew to eliminate input data
+ rounding
+ * Ignore pruning when deployment points to replicationcontroller
+ * Update comment about using OpenFileSequential
+ * `upgrade status`: polish alert insights
+ * pkg/cli/admin/mustgather: don't manually delete cluster role
+ binding
+ * pkg/helpers: remove legacy pkg
+ * pkg/cli/expose: override print flags for cmd
+ * pkg/cli/create,pkg/cli/expose: use custom scheme
+ * pkg/helpers/scheme: stop loading legacy schemes on global
+ scheme
+ * pkg/cli/admin/mustgather: gofumpt file
+ * go 1.22 lint fix
+ * Run make update
+ * Update tools images kube version to 1.30.1
+ * Manually bump indirect dependency runc to v1.1.12 to pull some
+ fixes
+ * Bump aws-sdk-go version to v1.53.12
+ * React to type changes in containers/image/v5 v5.30.1 version
+ * Bump containers/image/v5 to v5.30.1
+ * Go 1.22 changes the escape output of some special characters
+ * Bump go based imports
+ * Bump k8s dependencies to 1.30
+ * Remove already deprecated versions
+ * Bump go version to 1.22
+ * inspectalerts: refactor `getWithBearer` to try all urls in
+ route
+ * inspectalerts: use client-go wrappers for thanos call debugging
+ * OCPBUGS-33896: `status/inspect-alerts`: handle non-200 by
+ Thanos
+ * Updating openshift-enterprise-deployer-container image to be
+ consistent with ART for 4.17 Reconciling with
+ https://github.com/openshift/ocp-build-data/tree/4c1326094222f9209876f06833…
+ * `upgrade status`: upgrade -> update
+ * OCPBUGS-33903: Simplify output when not updating
+ * Updating ose-tools-container image to be consistent with ART
+ for 4.17 Reconciling with
+ https://github.com/openshift/ocp-build-data/tree/0a1310d4df1f00e3e218da6e35…
+ * Updating openshift-enterprise-cli-container image to be
+ consistent with ART for 4.17 Reconciling with
+ https://github.com/openshift/ocp-build-data/tree/0a1310d4df1f00e3e218da6e35…
+ * OCPBUGS-33762: Hardcode resource groups/kinds for now
+ * update status: minor code cleanups
+ * OCPBUGS-33898: `adm update status`: Show information about the
+ upgrade target version (#1767)
+ * add mock tests for alerts in oc adm upgrade status
+ * Add s390x based oc into extraction target
+ * pkg/cli/admin/upgrade/rollback: Gate on
+ OC_ENABLE_CMD_UPGRADE_ROLLBACK
+ * debug: set required-scc annotation to privileged for node debug
+ pods
+ * add alerts to update health in oc adm upgrade status
+
+-------------------------------------------------------------------
Old:
----
oc-4.16.0.obscpio
New:
----
oc-4.17.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ oc.spec ++++++
--- /var/tmp/diff_new_pack.CdY1NC/_old 2024-10-02 21:34:27.185047073 +0200
+++ /var/tmp/diff_new_pack.CdY1NC/_new 2024-10-02 21:34:27.185047073 +0200
@@ -25,7 +25,7 @@
%define OC_COMMIT 0c63f9da
Name: oc
-Version: 4.16.0
+Version: 4.17.0
Release: 0
Summary: Openshift / OKD Client CLI
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.CdY1NC/_old 2024-10-02 21:34:27.229048902 +0200
+++ /var/tmp/diff_new_pack.CdY1NC/_new 2024-10-02 21:34:27.233049068 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/openshift/oc</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">openshift-clients-4.16.0-202406131906</param>
+ <param name="revision">openshift-clients-4.17.0-202409111134</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">openshift-clients-(.*)-20..........</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.CdY1NC/_old 2024-10-02 21:34:27.257050067 +0200
+++ /var/tmp/diff_new_pack.CdY1NC/_new 2024-10-02 21:34:27.261050232 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/openshift/oc</param>
- <param name="changesrevision">a2450418f7b12a71e8f3562a4e9aa8a976bbf85b</param></service></servicedata>
+ <param name="changesrevision">bc58b3a9c70cee7b03d1943e95b48ced9357711b</param></service></servicedata>
(No newline at EOF)
++++++ oc-4.16.0.obscpio -> oc-4.17.0.obscpio ++++++
/work/SRC/openSUSE:Factory/oc/oc-4.16.0.obscpio /work/SRC/openSUSE:Factory/.oc.new.19354/oc-4.17.0.obscpio differ: char 49, line 1
++++++ oc.obsinfo ++++++
--- /var/tmp/diff_new_pack.CdY1NC/_old 2024-10-02 21:34:27.313052394 +0200
+++ /var/tmp/diff_new_pack.CdY1NC/_new 2024-10-02 21:34:27.317052561 +0200
@@ -1,5 +1,5 @@
name: oc
-version: 4.16.0
-mtime: 1717587587
-commit: a2450418f7b12a71e8f3562a4e9aa8a976bbf85b
+version: 4.17.0
+mtime: 1726046203
+commit: bc58b3a9c70cee7b03d1943e95b48ced9357711b
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/oc/vendor.tar.gz /work/SRC/openSUSE:Factory/.oc.new.19354/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ansible-variables for openSUSE:Factory checked in at 2024-10-02 21:33:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-variables (Old)
and /work/SRC/openSUSE:Factory/.ansible-variables.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-variables"
Wed Oct 2 21:33:57 2024 rev:7 rq:1205044 version:0.8.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-variables/ansible-variables.changes 2024-09-23 15:22:09.237272683 +0200
+++ /work/SRC/openSUSE:Factory/.ansible-variables.new.19354/ansible-variables.changes 2024-10-02 21:34:20.980789141 +0200
@@ -1,0 +2,6 @@
+Wed Oct 2 05:50:05 UTC 2024 - Johannes Kastl <opensuse_buildservice(a)ojkastl.de>
+
+- update to 0.8.0:
+ * ansible-core 2.18 (#97) (1ab8f5e)
+
+-------------------------------------------------------------------
Old:
----
ansible-variables-0.7.3.tar.gz
New:
----
ansible-variables-0.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansible-variables.spec ++++++
--- /var/tmp/diff_new_pack.qMaUDg/_old 2024-10-02 21:34:22.532853665 +0200
+++ /var/tmp/diff_new_pack.qMaUDg/_new 2024-10-02 21:34:22.552854497 +0200
@@ -38,7 +38,7 @@
%endif
Name: ansible-variables
-Version: 0.7.3
+Version: 0.8.0
Release: 0
Summary: Tool to show origin of Ansible host context variables
License: GPL-3.0-or-later
++++++ ansible-variables-0.7.3.tar.gz -> ansible-variables-0.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/.github/dependabot.yml new/ansible-variables-0.8.0/.github/dependabot.yml
--- old/ansible-variables-0.7.3/.github/dependabot.yml 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/.github/dependabot.yml 2024-09-30 21:49:35.000000000 +0200
@@ -5,13 +5,13 @@
directory: /
schedule:
day: saturday
- interval: weekly
+ interval: monthly
labels:
- "dependencies"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
day: saturday
- interval: weekly
+ interval: monthly
labels:
- "dependencies"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/.github/workflows/publish.yml new/ansible-variables-0.8.0/.github/workflows/publish.yml
--- old/ansible-variables-0.7.3/.github/workflows/publish.yml 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/.github/workflows/publish.yml 2024-09-30 21:49:35.000000000 +0200
@@ -24,7 +24,7 @@
- uses: actions/checkout@v4
- name: Install uv
- uses: astral-sh/setup-uv@v2
+ uses: astral-sh/setup-uv@v3
with:
version: "0.4.10"
@@ -37,7 +37,7 @@
run: uv build
- name: Publish package
- uses: pypa/gh-action-pypi-publish@0ab0b79471669eb3a4d647e625009c62f9f3b241
+ uses: pypa/gh-action-pypi-publish@897895f1e160c830e369f9779632ebc134688e1b
with:
user: __token__
password: ${{ secrets.PYPI_PASSWORD }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/.github/workflows/tox.yml new/ansible-variables-0.8.0/.github/workflows/tox.yml
--- old/ansible-variables-0.7.3/.github/workflows/tox.yml 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/.github/workflows/tox.yml 2024-09-30 21:49:35.000000000 +0200
@@ -46,9 +46,11 @@
py311-2.15
py311-2.16
py311-2.17
+ py311-2.18
py311-devel
py312-2.16
py312-2.17
+ py312-2.18
py312-devel
build:
@@ -64,7 +66,7 @@
fetch-depth: 0
- name: Install uv
- uses: astral-sh/setup-uv@v2
+ uses: astral-sh/setup-uv@v3
with:
version: "0.4.10"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/.pre-commit-config.yaml new/ansible-variables-0.8.0/.pre-commit-config.yaml
--- old/ansible-variables-0.7.3/.pre-commit-config.yaml 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/.pre-commit-config.yaml 2024-09-30 21:49:35.000000000 +0200
@@ -69,7 +69,3 @@
rev: 0.4.10
hooks:
- id: uv-lock
-
- # as soon as https://github.com/astral-sh/uv-pre-commit/pull/18 gets merged, we can use the following hook
- # - id: uv-export
- # args: ["--frozen", "--no-hashes", "-o=requirements-dev.txt"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/CHANGELOG.md new/ansible-variables-0.8.0/CHANGELOG.md
--- old/ansible-variables-0.7.3/CHANGELOG.md 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/CHANGELOG.md 2024-09-30 21:49:35.000000000 +0200
@@ -1,5 +1,12 @@
# Changelog
+## [0.8.0](https://github.com/hille721/ansible-variables/compare/v0.7.3...v0.8.… (2024-09-30)
+
+
+### Features
+
+* ansible-core 2.18 ([#97](https://github.com/hille721/ansible-variables/issues/97)) ([1ab8f5e](https://github.com/hille721/ansible-variables/commit/1ab8f5e89bf70…)
+
## [0.7.3](https://github.com/hille721/ansible-variables/compare/v0.7.2...v0.7.… (2024-09-17)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/README.md new/ansible-variables-0.8.0/README.md
--- old/ansible-variables-0.7.3/README.md 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/README.md 2024-09-30 21:49:35.000000000 +0200
@@ -20,7 +20,7 @@
Based on one host it will return a list with all variables, values and variable type.
-Tested with `ansible-core` 2.11 - 2.17.
+Tested with `ansible-core` 2.11 - 2.18.
## Installation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/pyproject.toml new/ansible-variables-0.8.0/pyproject.toml
--- old/ansible-variables-0.7.3/pyproject.toml 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/pyproject.toml 2024-09-30 21:49:35.000000000 +0200
@@ -4,7 +4,7 @@
[project]
name = "ansible-variables"
-version = "0.7.3"
+version = "0.8.0"
dependencies = [
"ansible-core >=2.11.0; python_version <= '3.9'",
"ansible-core >=2.12.0,<8; python_version == '3.10'",
@@ -88,7 +88,6 @@
[tool.uv]
dev-dependencies = [
"mdformat>=0.7.17",
- "pre-commit>=3.5.0",
"pylint>=3.2.7",
"pytest >=8.1.1,<9",
"ruff>=0.6.5",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/requirements-dev.txt new/ansible-variables-0.8.0/requirements-dev.txt
--- old/ansible-variables-0.7.3/requirements-dev.txt 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/requirements-dev.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1,48 +0,0 @@
-# This file was autogenerated via `uv export`.
--e .
-ansible-core==2.13.13 ; python_full_version < '3.11'
-ansible-core==2.17.4 ; python_full_version >= '3.11'
-astroid==3.2.4
-cachetools==5.5.0
-cffi==1.17.1 ; platform_python_implementation != 'PyPy'
-cfgv==3.4.0
-chardet==5.2.0
-colorama==0.4.6
-cryptography==43.0.1
-dill==0.3.8
-distlib==0.3.8
-exceptiongroup==1.2.2 ; python_full_version < '3.11'
-filelock==3.16.0
-identify==2.6.1
-importlib-metadata==8.5.0 ; python_full_version < '3.10'
-importlib-resources==6.4.5 ; python_full_version < '3.9'
-iniconfig==2.0.0
-isort==5.13.2
-jinja2==3.1.4
-markdown-it-py==3.0.0
-markupsafe==2.1.5
-mccabe==0.7.0
-mdformat==0.7.17
-mdurl==0.1.2
-nodeenv==1.9.1
-packaging==24.1
-platformdirs==4.3.3
-pluggy==1.5.0
-pre-commit==3.5.0
-pycparser==2.22 ; platform_python_implementation != 'PyPy'
-pygments==2.18.0
-pylint==3.2.7
-pyproject-api==1.7.1
-pytest==8.3.3
-pyyaml==6.0.2
-resolvelib==0.8.1
-rich==13.8.1
-ruff==0.6.5
-tomli==2.0.1 ; python_full_version < '3.11'
-tomlkit==0.13.2
-tox==4.18.1
-tox-uv==1.11.3
-typing-extensions==4.12.2 ; python_full_version < '3.11'
-uv==0.4.10
-virtualenv==20.26.4
-zipp==3.20.2 ; python_full_version < '3.10'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/tox.ini new/ansible-variables-0.8.0/tox.ini
--- old/ansible-variables-0.7.3/tox.ini 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/tox.ini 2024-09-30 21:49:35.000000000 +0200
@@ -4,8 +4,8 @@
py38-{2.11,2.12,2.13}
py39-{2.11,2.12,2.13,2.14,2.15}
py310-{2.12,2.13,2.14,2.15,2.16,2.17}
- py311-{2.14,2.15,2.16,2.17,devel}
- py312-{2.16,2.17,devel}
+ py311-{2.14,2.15,2.16,2.17,2.18,devel}
+ py312-{2.16,2.17,2.18,devel}
minversion = 4.4.11
[testenv]
@@ -21,6 +21,7 @@
2.15: https://github.com/ansible/ansible/archive/stable-2.15.tar.gz
2.16: https://github.com/ansible/ansible/archive/stable-2.16.tar.gz
2.17: https://github.com/ansible/ansible/archive/stable-2.17.tar.gz
+ 2.18: https://github.com/ansible/ansible/archive/stable-2.18.tar.gz
devel: https://github.com/ansible/ansible/archive/devel.tar.gz
commands =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible-variables-0.7.3/uv.lock new/ansible-variables-0.8.0/uv.lock
--- old/ansible-variables-0.7.3/uv.lock 2024-09-17 12:12:50.000000000 +0200
+++ new/ansible-variables-0.8.0/uv.lock 2024-09-30 21:49:35.000000000 +0200
@@ -49,7 +49,7 @@
[[package]]
name = "ansible-variables"
-version = "0.7.2"
+version = "0.7.3"
source = { editable = "." }
dependencies = [
{ name = "ansible-core", version = "2.13.13", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
@@ -60,7 +60,6 @@
[package.dev-dependencies]
dev = [
{ name = "mdformat" },
- { name = "pre-commit" },
{ name = "pylint" },
{ name = "pytest" },
{ name = "ruff" },
@@ -80,7 +79,6 @@
[package.metadata.requires-dev]
dev = [
{ name = "mdformat", specifier = ">=0.7.17" },
- { name = "pre-commit", specifier = ">=3.5.0" },
{ name = "pylint", specifier = ">=3.2.7" },
{ name = "pytest", specifier = ">=8.1.1,<9" },
{ name = "ruff", specifier = ">=0.6.5" },
@@ -187,15 +185,6 @@
]
[[package]]
-name = "cfgv"
-version = "3.4.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cb…", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2…", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 },
-]
-
-[[package]]
name = "chardet"
version = "5.2.0"
source = { registry = "https://pypi.org/simple" }
@@ -252,11 +241,11 @@
[[package]]
name = "dill"
-version = "0.3.8"
+version = "0.3.9"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/17/4d/ac7ffa80c69ea1df30a8aa11b3578…", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca", size = 184847 }
+sdist = { url = "https://files.pythonhosted.org/packages/70/43/86fe3f9e130c4137b0f1b50784dd7…", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c", size = 187000 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa8528…", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7", size = 116252 },
+ { url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95db…", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418 },
]
[[package]]
@@ -279,20 +268,11 @@
[[package]]
name = "filelock"
-version = "3.16.0"
+version = "3.16.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e6/76/3981447fd369539aba35797db99a8…", hash = "sha256:81de9eb8453c769b63369f87f11131a7ab04e367f8d97ad39dc230daa07e3bec", size = 18008 }
+sdist = { url = "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d…", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435", size = 18037 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/2f/95/f9310f35376024e1086c59cbb438d…", hash = "sha256:f6ed4c963184f4c84dd5557ce8fece759a3724b37b80c6c4f20a2f63a4dc6609", size = 16170 },
-]
-
-[[package]]
-name = "identify"
-version = "2.6.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/29/bb/25024dbcc93516c492b75919e76f3…", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98", size = 99097 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/7d/0c/4ef72754c050979fdcc06c744715a…", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0", size = 98972 },
+ { url = "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d99…", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", size = 16163 },
]
[[package]]
@@ -452,15 +432,6 @@
]
[[package]]
-name = "nodeenv"
-version = "1.9.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae…", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc02…", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 },
-]
-
-[[package]]
name = "packaging"
version = "24.1"
source = { registry = "https://pypi.org/simple" }
@@ -471,11 +442,11 @@
[[package]]
name = "platformdirs"
-version = "4.3.3"
+version = "4.3.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f5/19/f7bee3a71decedd8d7bc4d3edb797…", hash = "sha256:d4e0b7d8ec176b341fb03cb11ca12d0276faa8c485f9cd218f613840463fc2c0", size = 21304 }
+sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e…", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/69/e6/7c8e8c326903bd97c6c0c47e0a3c5…", hash = "sha256:50a5450e2e84f44539718293cbb1da0a0885c9d14adf21b77bae4e66fc99d9b5", size = 18437 },
+ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6…", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
]
[[package]]
@@ -488,22 +459,6 @@
]
[[package]]
-name = "pre-commit"
-version = "3.5.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "cfgv" },
- { name = "identify" },
- { name = "nodeenv" },
- { name = "pyyaml" },
- { name = "virtualenv" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/04/b3/4ae08d21eb097162f5aad37f4585f…", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32", size = 177079 }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/6c/75/526915fedf462e05eeb1c75ceaf7e…", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660", size = 203698 },
-]
-
-[[package]]
name = "pycparser"
version = "2.22"
source = { registry = "https://pypi.org/simple" }
@@ -543,15 +498,15 @@
[[package]]
name = "pyproject-api"
-version = "1.7.1"
+version = "1.8.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "packaging" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/41/43/5581b42a96c5ee7bf2b22d3b08b34…", hash = "sha256:7ebc6cd10710f89f4cf2a2731710a98abce37ebff19427116ff2174c9236a827", size = 22271 }
+sdist = { url = "https://files.pythonhosted.org/packages/bb/19/441e0624a8afedd15bbcce96df1b8…", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496", size = 22340 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/de/88/c1451b66664ae596bae93928ff372…", hash = "sha256:2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb", size = 13172 },
+ { url = "https://files.pythonhosted.org/packages/ba/f4/3c4ddfcc0c19c217c6de513842d28…", hash = "sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228", size = 13100 },
]
[[package]]
@@ -656,27 +611,27 @@
[[package]]
name = "ruff"
-version = "0.6.5"
+version = "0.6.8"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/96/3f/29b2d3d90f811f6fb5b90242309f4…", hash = "sha256:4d32d87fab433c0cf285c3683dd4dae63be05fd7a1d65b3f5bf7cdd05a6b96fb", size = 2476127 }
+sdist = { url = "https://files.pythonhosted.org/packages/74/f9/4ce3e765a72ab8fe0f80f48508ea3…", hash = "sha256:a5bf44b1aa0adaf6d9d20f86162b34f7c593bfedabc51239953e446aefc8ce18", size = 3084543 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/64/05/cc62df44b5a0271b29f11d687aa89…", hash = "sha256:7e4e308f16e07c95fc7753fc1aaac690a323b2bb9f4ec5e844a97bb7fbebd748", size = 9770988 },
- { url = "https://files.pythonhosted.org/packages/09/3d/89dac56ab7053d5b7cba723c9cae1…", hash = "sha256:932cd69eefe4daf8c7d92bd6689f7e8182571cb934ea720af218929da7bd7d69", size = 9423303 },
- { url = "https://files.pythonhosted.org/packages/70/76/dc04654d26beace866a3c9e0c8711…", hash = "sha256:3a8d42d11fff8d3143ff4da41742a98f8f233bf8890e9fe23077826818f8d680", size = 9134078 },
- { url = "https://files.pythonhosted.org/packages/da/52/6a492cffcd2c6e243043937ab5281…", hash = "sha256:a50af6e828ee692fb10ff2dfe53f05caecf077f4210fae9677e06a808275754f", size = 10105094 },
- { url = "https://files.pythonhosted.org/packages/59/7c/fd76a583ae59a276537d71921d616…", hash = "sha256:794ada3400a0d0b89e3015f1a7e01f4c97320ac665b7bc3ade24b50b54cb2972", size = 9542751 },
- { url = "https://files.pythonhosted.org/packages/56/5b/4e8928fa11412b16ecf7d7755fe45…", hash = "sha256:381413ec47f71ce1d1c614f7779d88886f406f1fd53d289c77e4e533dc6ea200", size = 10358844 },
- { url = "https://files.pythonhosted.org/packages/bd/a8/315ea8f71b111c8fb2b681c88a3e7…", hash = "sha256:52e75a82bbc9b42e63c08d22ad0ac525117e72aee9729a069d7c4f235fc4d276", size = 11075199 },
- { url = "https://files.pythonhosted.org/packages/d9/1c/3a3728d42db52bfe418d8c913b453…", hash = "sha256:09c72a833fd3551135ceddcba5ebdb68ff89225d30758027280968c9acdc7810", size = 10661186 },
- { url = "https://files.pythonhosted.org/packages/d4/0c/ae25e213461aab274822081923d74…", hash = "sha256:800c50371bdcb99b3c1551d5691e14d16d6f07063a518770254227f7f6e8c178", size = 11747444 },
- { url = "https://files.pythonhosted.org/packages/c4/e3/9d0ff218c7663ab9d53abe02911be…", hash = "sha256:8e25ddd9cd63ba1f3bd51c1f09903904a6adf8429df34f17d728a8fa11174253", size = 10266302 },
- { url = "https://files.pythonhosted.org/packages/ac/03/f158cc24120bf277b0cd7906ba509…", hash = "sha256:7291e64d7129f24d1b0c947ec3ec4c0076e958d1475c61202497c6aced35dd19", size = 10104976 },
- { url = "https://files.pythonhosted.org/packages/91/d0/0bacdffc234e588ec05834186ad11…", hash = "sha256:9ad7dfbd138d09d9a7e6931e6a7e797651ce29becd688be8a0d4d5f8177b4b0c", size = 9625374 },
- { url = "https://files.pythonhosted.org/packages/1a/ad/721003cde8abd9f50bff74acbcb21…", hash = "sha256:005256d977021790cc52aa23d78f06bb5090dc0bfbd42de46d49c201533982ae", size = 9959661 },
- { url = "https://files.pythonhosted.org/packages/37/84/8d70a3eacaacb65b4bb1461fc1a59…", hash = "sha256:482c1e6bfeb615eafc5899127b805d28e387bd87db38b2c0c41d271f5e58d8cc", size = 10327408 },
- { url = "https://files.pythonhosted.org/packages/54/7e/6b0a9ab30428a9e3d9607f6dd2e4f…", hash = "sha256:cf4d3fa53644137f6a4a27a2b397381d16454a1566ae5335855c187fbf67e4f5", size = 8012512 },
- { url = "https://files.pythonhosted.org/packages/d8/88/176f50162a219e3039f21e9e43238…", hash = "sha256:3e42a57b58e3612051a636bc1ac4e6b838679530235520e8f095f7c44f706ff9", size = 8804438 },
- { url = "https://files.pythonhosted.org/packages/67/a0/1b488bbe35a7ff8296fdea1ec1a9c…", hash = "sha256:51935067740773afdf97493ba9b8231279e9beef0f2a8079188c4776c25688e0", size = 8179780 },
+ { url = "https://files.pythonhosted.org/packages/db/07/42ee57e8b76ca585297a663a552b4…", hash = "sha256:77944bca110ff0a43b768f05a529fecd0706aac7bcce36d7f1eeb4cbfca5f0f2", size = 10404327 },
+ { url = "https://files.pythonhosted.org/packages/eb/51/d42571ff8156d65086acb72d39aa6…", hash = "sha256:27b87e1801e786cd6ede4ada3faa5e254ce774de835e6723fd94551464c56b8c", size = 10018797 },
+ { url = "https://files.pythonhosted.org/packages/c1/d7/fa5514a60b03976af972b67fe345d…", hash = "sha256:cd48f945da2a6334f1793d7f701725a76ba93bf3d73c36f6b21fb04d5338dcf5", size = 9691303 },
+ { url = "https://files.pythonhosted.org/packages/d6/c4/d812a74976927e51d0782a4753906…", hash = "sha256:677e03c00f37c66cea033274295a983c7c546edea5043d0c798833adf4cf4c6f", size = 10719452 },
+ { url = "https://files.pythonhosted.org/packages/ec/b6/aa700c4ae6db9b3ee660e23f3c7db…", hash = "sha256:9f1476236b3eacfacfc0f66aa9e6cd39f2a624cb73ea99189556015f27c0bdeb", size = 10161353 },
+ { url = "https://files.pythonhosted.org/packages/ea/39/0b10075ffcd52ff3a581b9b69eac5…", hash = "sha256:6f5a2f17c7d32991169195d52a04c95b256378bbf0de8cb98478351eb70d526f", size = 10980630 },
+ { url = "https://files.pythonhosted.org/packages/c1/af/9eb9efc98334f62652e2f9318f137…", hash = "sha256:5fd0d4b7b1457c49e435ee1e437900ced9b35cb8dc5178921dfb7d98d65a08d0", size = 11768996 },
+ { url = "https://files.pythonhosted.org/packages/e0/59/8b1369cf7878358952b1c0a1559b4…", hash = "sha256:f8034b19b993e9601f2ddf2c517451e17a6ab5cdb1c13fdff50c1442a7171d87", size = 11317469 },
+ { url = "https://files.pythonhosted.org/packages/b9/6d/e252e9b11bbca4114c386ee41ad55…", hash = "sha256:6cfb227b932ba8ef6e56c9f875d987973cd5e35bc5d05f5abf045af78ad8e098", size = 12467185 },
+ { url = "https://files.pythonhosted.org/packages/48/44/7caa223af7d4ea0f0b2bd34acca65…", hash = "sha256:6ef0411eccfc3909269fed47c61ffebdcb84a04504bafa6b6df9b85c27e813b0", size = 10887766 },
+ { url = "https://files.pythonhosted.org/packages/81/ed/394aff3a785f171869158b9d5be61…", hash = "sha256:007dee844738c3d2e6c24ab5bc7d43c99ba3e1943bd2d95d598582e9c1b27750", size = 10711609 },
+ { url = "https://files.pythonhosted.org/packages/47/31/f31d04c842e54699eab7e3b864538…", hash = "sha256:ce60058d3cdd8490e5e5471ef086b3f1e90ab872b548814e35930e21d848c9ce", size = 10237621 },
+ { url = "https://files.pythonhosted.org/packages/20/95/a764e84acf11d425f2f23b8b78b4f…", hash = "sha256:1085c455d1b3fdb8021ad534379c60353b81ba079712bce7a900e834859182fa", size = 10558329 },
+ { url = "https://files.pythonhosted.org/packages/2a/76/d4e38846ac9f6dd62dce858a54583…", hash = "sha256:70edf6a93b19481affd287d696d9e311388d808671bc209fb8907b46a8c3af44", size = 10954102 },
+ { url = "https://files.pythonhosted.org/packages/e7/36/f18c678da6c69f8d022480f3e8ddc…", hash = "sha256:792213f7be25316f9b46b854df80a77e0da87ec66691e8f012f887b4a671ab5a", size = 8511090 },
+ { url = "https://files.pythonhosted.org/packages/4c/c4/0ca7d8ffa358b109db7d7d045a1a0…", hash = "sha256:ec0517dc0f37cad14a5319ba7bba6e7e339d03fbf967a6d69b0907d61be7a263", size = 9350079 },
+ { url = "https://files.pythonhosted.org/packages/d9/bd/a8b0c64945a92eaeeb8d0283f27a7…", hash = "sha256:8d3bb2e3fbb9875172119021a13eed38849e762499e3cfde9588e4b4d70968dc", size = 8669595 },
]
[[package]]
@@ -699,7 +654,7 @@
[[package]]
name = "tox"
-version = "4.18.1"
+version = "4.20.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cachetools" },
@@ -713,14 +668,14 @@
{ name = "tomli", marker = "python_full_version < '3.11'" },
{ name = "virtualenv" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e1/cc/272e73f90be0f6df89efaf82e5d80…", hash = "sha256:3c0c96bc3a568a5c7e66387a4cfcf8c875b52e09f4d47c9f7a277ec82f1a0b11", size = 181159 }
+sdist = { url = "https://files.pythonhosted.org/packages/04/4a/55f9dba99aad874ae54a7fb2310c9…", hash = "sha256:5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5", size = 181364 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/fb/59/a2ae6f32771cd3de2000618d77b8f…", hash = "sha256:35d472032ee1f73fe20c3e0e73d7073a4e85075c86ff02c576f9fc7c6a15a578", size = 156796 },
+ { url = "https://files.pythonhosted.org/packages/cf/ee/6f9bf37f197578f98fb450f1aeebf…", hash = "sha256:21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34", size = 157087 },
]
[[package]]
name = "tox-uv"
-version = "1.11.3"
+version = "1.13.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "importlib-resources", marker = "python_full_version < '3.9'" },
@@ -729,9 +684,9 @@
{ name = "typing-extensions", marker = "python_full_version < '3.10'" },
{ name = "uv" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b8/b2/d441179ca3f5f3180844a647ebf9d…", hash = "sha256:316f559ae5525edec12791d9e1f393e405ded5b7e7d50fbaee4726676951f49a", size = 13666 }
+sdist = { url = "https://files.pythonhosted.org/packages/31/23/752b7bc25013d2958df6adac2bce9…", hash = "sha256:fb087b8b4ff779c72b48fc72ea1995387bb1c0dfb37910c20e46cef8b5f98c15", size = 15643 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/85/88/a6d7ccddb0da225ac636ba24822ea…", hash = "sha256:d434787406ff2854600c1ceaa555519080026208cf7f65bb5d4b2d7c9c4776de", size = 11276 },
+ { url = "https://files.pythonhosted.org/packages/40/93/1b0b0c27177f4816594683cd4e008…", hash = "sha256:1037e4abad15a3b708b5970ed7a17a0765d7249b641a92b155bc3343b8b0145b", size = 13383 },
]
[[package]]
@@ -745,41 +700,41 @@
[[package]]
name = "uv"
-version = "0.4.10"
+version = "0.4.17"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/3b/bf/5b426cfd6c3d0b327d06afc16599e…", hash = "sha256:2ff29a2f55a697e78d787a41ab41d4b26421d200728289b88b6241d3b486c436", size = 1891876 }
+sdist = { url = "https://files.pythonhosted.org/packages/13/2d/0571a664ca452f9c9ee0301909462…", hash = "sha256:01564bd760eff885ad61f44173647a569732934d1a4a558839c8088fbf75e53f", size = 2004305 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/eb/dc/789692a8fda886c6b3fffc354d2af…", hash = "sha256:99954a94dd6c4bff8a9a963c05bc3988214ea39e7511a52fda35112e1a478447", size = 11479241 },
- { url = "https://files.pythonhosted.org/packages/60/5a/6bff6e5ec5831c9470adfa5d4e3de…", hash = "sha256:bc87d6c581cfed0979e0f5ee93383d46006c6d4a5e4eb9f43ef13bce61b50cc2", size = 11709579 },
- { url = "https://files.pythonhosted.org/packages/83/07/95096f172a43151c7a27e9d1a7d94…", hash = "sha256:0f8b9ba4ecfbea343a00e46d509669606e55fe233d800752c4c25650473df358", size = 10862040 },
- { url = "https://files.pythonhosted.org/packages/55/2a/d1b9b1506158ba4dd711cd48d1d6c…", hash = "sha256:a9dc1f8fca5c4a2f73054d9f56c7397e9fc6ba43baefc503d6f0128d72ea662f", size = 11199902 },
- { url = "https://files.pythonhosted.org/packages/49/a0/1210957c6aeeb13b0d4bbc8515969…", hash = "sha256:30d1f8348a2b18e21a35c97ce42528781f242d0303881fc92fbacdcb653c8bca", size = 11269050 },
- { url = "https://files.pythonhosted.org/packages/94/ec/b0a3cb548fd5200ddfc84a46deb28…", hash = "sha256:b89dfd213359a23797155ff8175e5202ed6b84aadeb20df92132127608d46acf", size = 11877390 },
- { url = "https://files.pythonhosted.org/packages/b0/ff/2a72772622f0f24321b137444cb08…", hash = "sha256:e99e3f761875962942e0743b868bd666021d5e14c3df494e820ef8f45fb88578", size = 12664737 },
- { url = "https://files.pythonhosted.org/packages/90/f7/4e771e65250cef43864eb5869fa28…", hash = "sha256:3be73788db9ceacb94a521cf67ca5cc08bac512aef71145b904ab62a3acabdae", size = 12410948 },
- { url = "https://files.pythonhosted.org/packages/42/c2/143e811303447a4452c9897a2013e…", hash = "sha256:6ba1cc3070e5c63ce0a1421fbed28bd1b3ff520671d7badda11a501504c78394", size = 15892011 },
- { url = "https://files.pythonhosted.org/packages/ff/ac/957c277762c47f375c2a1731e5910…", hash = "sha256:1b6b6c6b8cc0c4e54ab25e3b46e49d1e583e26c194572eb42bfeebf71b39cca2", size = 12186373 },
- { url = "https://files.pythonhosted.org/packages/ba/f7/002b5a17e9ab27f2c5f57ef044dbf…", hash = "sha256:bc99e6b45303f0881a8dc199f0b7ea8261dd1779e576e8477a7721ceeeaafcc7", size = 11341756 },
- { url = "https://files.pythonhosted.org/packages/de/d7/8d00dc10f7fe4912b496c054d9102…", hash = "sha256:1ff5130b6f3af79c4e47f63db03215aed15e78cb4f1f51682af6f9949c2bcf00", size = 11129951 },
- { url = "https://files.pythonhosted.org/packages/0b/da/564711d76819bae3cea042ff75c63…", hash = "sha256:8fa510dfbbde4f8ad5cd2769568c7b0c3e867b74deaf4beabcca79e74e7550cc", size = 11686193 },
- { url = "https://files.pythonhosted.org/packages/2d/2c/b3998dd4e4413d44c09dc7acba44b…", hash = "sha256:444e1cdb36d7ef103e52185f918800527c255dc369c9f90eb1f198dfa3f4d5bc", size = 13453677 },
- { url = "https://files.pythonhosted.org/packages/04/8a/3313ce320024da059d7624b7ab392…", hash = "sha256:97a1187e11a9df70d55bc577721ad4a19441cda56e4d69fb2f38d88c7650d2a0", size = 12300196 },
- { url = "https://files.pythonhosted.org/packages/a4/24/8b45f4129fdc3b8072db213418692…", hash = "sha256:0784f75093a75390d8d480cc8a444516e78f08849db9a13c21791a5f651df4a1", size = 11594212 },
- { url = "https://files.pythonhosted.org/packages/1b/93/44be9610ff870127f0500d5b36e98…", hash = "sha256:ff9046a8c5e836e892ac7741e672ee016e92e55c659fa8195595df65a1f3accf", size = 12842773 },
+ { url = "https://files.pythonhosted.org/packages/7d/82/8de3109d9815dacc32aba998e6ed8…", hash = "sha256:0da45ca164ef9701dcc5cac3256f1f3a4e6fabe026860101c3b14208bfbde831", size = 11913399 },
+ { url = "https://files.pythonhosted.org/packages/4e/65/4114106f24c2c64fcc63db5e4ec93…", hash = "sha256:df5dabafa07d9beae719bf4df649cb6d825620f0bb3abf985df99fd0394dbbb6", size = 12133160 },
+ { url = "https://files.pythonhosted.org/packages/61/9b/3a126a8431320c86a41854ba7c52f…", hash = "sha256:e88911392d0eef4019a1db64951eefd1081a6dda72e33ee4b5b77b32f1112a33", size = 11212930 },
+ { url = "https://files.pythonhosted.org/packages/6e/dc/b97c735da94563d9d432f820fa5c9…", hash = "sha256:8844740de53f3997175961c90ff4441e0ea7cb1d11e27b662258f8728f7623b2", size = 11481660 },
+ { url = "https://files.pythonhosted.org/packages/d8/3d/54b0180916f23a812e3329c2b2de7…", hash = "sha256:b3cad9f33c38a891c3adc3cedfa8171e5d1d696d03c850ecd454e16551b1308b", size = 11704743 },
+ { url = "https://files.pythonhosted.org/packages/06/9b/9b5c96d4ba535ac2cae0c0202a237…", hash = "sha256:f727a356e772c3cdc7752d8d9971e614670658f5219eda2449290c5c4a5c91cf", size = 12376328 },
+ { url = "https://files.pythonhosted.org/packages/51/54/f1aaa74e93a933f9e52159bf32ae0…", hash = "sha256:15cfd020ad4a72f17e669d070a1a8ab50f93ce899486a80029cabf87fac3a8ae", size = 12933204 },
+ { url = "https://files.pythonhosted.org/packages/b5/e1/498ef5d9e9626f4b29f10a1baa830…", hash = "sha256:897c5d7d50341023f28b96afd0bf2553d67f3f46c12986d5ee02e517cf7d5c5a", size = 12676231 },
+ { url = "https://files.pythonhosted.org/packages/0a/2f/38c153bec459c2413549b3a22735e…", hash = "sha256:87e4c3b6415e0ce6880023960d7bb7fc08acafc97a4e03c7ce8b6a49ad0c698e", size = 16391712 },
+ { url = "https://files.pythonhosted.org/packages/21/30/c126268c4586166c2695cb343ee85…", hash = "sha256:39c862a5fae944ea89dca5bf77bf636ac26398f96179bca19e4db26121707cd0", size = 12454567 },
+ { url = "https://files.pythonhosted.org/packages/3b/92/01c734e5a742ac9464d42f1977f82…", hash = "sha256:dfe717c980d3206d4810b5121566a1e07114b9dd470b6f9f6ebed3706c21517d", size = 11608090 },
+ { url = "https://files.pythonhosted.org/packages/81/1b/dceab3572d66ad94a04a1dc0e0c46…", hash = "sha256:44360f88b8e67e36fed00976b94d3f1144faa1c5291e8f6f5306c3ded650e9bf", size = 11701498 },
+ { url = "https://files.pythonhosted.org/packages/3c/8a/da60f4aa41aad8ddc2b7ea3416896…", hash = "sha256:489f68441092827fcd590a99f91269d5fb3b5f9cca1da469f7fc3d5ef3bf3e37", size = 12134824 },
+ { url = "https://files.pythonhosted.org/packages/aa/99/e8312976cbd444d6ea8d8d8a71ac1…", hash = "sha256:1a4098128ee54f8b4ca1b083d05f818548cf7182b5b6cbb74fd71235bd105b1d", size = 13789473 },
+ { url = "https://files.pythonhosted.org/packages/2d/f4/511141abcc794a5fecaeb7c62138a…", hash = "sha256:8acb510475dd8dbce71533384b95a8b2ad204f10081c92d9d012d193bd4df884", size = 12620663 },
+ { url = "https://files.pythonhosted.org/packages/18/f5/cb3eed07b1db5fcfbe638132fbde5…", hash = "sha256:7b27e69454d8f65d800bc61a3d05288cacf8e56b9b716b629b2b6977e85ceabe", size = 11956476 },
+ { url = "https://files.pythonhosted.org/packages/a5/25/3f80d90fb147923bbae53973a63e6…", hash = "sha256:6141f08aad242372dff4b529b9d26c814e151e95d1a8c85d645a7eb11b0cb34a", size = 13440345 },
]
[[package]]
name = "virtualenv"
-version = "20.26.4"
+version = "20.26.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "distlib" },
{ name = "filelock" },
{ name = "platformdirs" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/84/8a/134f65c3d6066153b84fc176c5887…", hash = "sha256:c17f4e0f3e6036e9f26700446f85c76ab11df65ff6d8a9cbfad9f71aabfcf23c", size = 9385017 }
+sdist = { url = "https://files.pythonhosted.org/packages/3f/40/abc5a766da6b0b2457f819feab8e9…", hash = "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48", size = 9372482 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5d/ea/12f774a18b55754c730c8383dad8f…", hash = "sha256:48f2695d9809277003f30776d155615ffc11328e6a0a8c1f0ec80188d7874a55", size = 6013327 },
+ { url = "https://files.pythonhosted.org/packages/59/90/57b8ac0c8a231545adc7698c64c5a…", hash = "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2", size = 5999862 },
]
[[package]]
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package nova for openSUSE:Factory checked in at 2024-10-02 21:33:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/nova (Old)
and /work/SRC/openSUSE:Factory/.nova.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nova"
Wed Oct 2 21:33:55 2024 rev:26 rq:1205043 version:3.11
Changes:
--------
--- /work/SRC/openSUSE:Factory/nova/nova.changes 2024-09-29 18:10:56.430380858 +0200
+++ /work/SRC/openSUSE:Factory/.nova.new.19354/nova.changes 2024-10-02 21:34:16.884618849 +0200
@@ -1,0 +2,6 @@
+Wed Oct 02 05:50:20 UTC 2024 - opensuse_buildservice(a)ojkastl.de
+
+- Update to version 3.11:
+ * feat: kubeconfig path flag (#329)
+
+-------------------------------------------------------------------
Old:
----
nova-3.10.2.obscpio
New:
----
nova-3.11.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ nova.spec ++++++
--- /var/tmp/diff_new_pack.Qjv48H/_old 2024-10-02 21:34:19.652733929 +0200
+++ /var/tmp/diff_new_pack.Qjv48H/_new 2024-10-02 21:34:19.664734428 +0200
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: nova
-Version: 3.10.2
+Version: 3.11
Release: 0
Summary: Find outdated or deprecated Helm charts running in your cluster
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Qjv48H/_old 2024-10-02 21:34:19.936745736 +0200
+++ /var/tmp/diff_new_pack.Qjv48H/_new 2024-10-02 21:34:19.964746900 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/FairwindsOps/nova</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v3.10.2</param>
+ <param name="revision">v3.11</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Qjv48H/_old 2024-10-02 21:34:20.136754051 +0200
+++ /var/tmp/diff_new_pack.Qjv48H/_new 2024-10-02 21:34:20.172755549 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/FairwindsOps/nova</param>
- <param name="changesrevision">ac6e83385b7409203a19e8e3747f27fd83108b16</param></service></servicedata>
+ <param name="changesrevision">f4ac782e950599540c7af161ef98b1687050ba2e</param></service></servicedata>
(No newline at EOF)
++++++ nova-3.10.2.obscpio -> nova-3.11.obscpio ++++++
/work/SRC/openSUSE:Factory/nova/nova-3.10.2.obscpio /work/SRC/openSUSE:Factory/.nova.new.19354/nova-3.11.obscpio differ: char 50, line 1
++++++ nova.obsinfo ++++++
--- /var/tmp/diff_new_pack.Qjv48H/_old 2024-10-02 21:34:20.476768187 +0200
+++ /var/tmp/diff_new_pack.Qjv48H/_new 2024-10-02 21:34:20.508769517 +0200
@@ -1,5 +1,5 @@
name: nova
-version: 3.10.2
-mtime: 1727265399
-commit: ac6e83385b7409203a19e8e3747f27fd83108b16
+version: 3.11
+mtime: 1727795938
+commit: f4ac782e950599540c7af161ef98b1687050ba2e
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/nova/vendor.tar.gz /work/SRC/openSUSE:Factory/.nova.new.19354/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package glasskube-cli for openSUSE:Factory checked in at 2024-10-02 21:33:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glasskube-cli (Old)
and /work/SRC/openSUSE:Factory/.glasskube-cli.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "glasskube-cli"
Wed Oct 2 21:33:53 2024 rev:2 rq:1205038 version:0.23.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/glasskube-cli/glasskube-cli.changes 2024-09-30 15:38:07.263322346 +0200
+++ /work/SRC/openSUSE:Factory/.glasskube-cli.new.19354/glasskube-cli.changes 2024-10-02 21:34:14.224508260 +0200
@@ -1,0 +2,88 @@
+Wed Oct 02 05:37:49 UTC 2024 - opensuse_buildservice(a)ojkastl.de
+
+- Update to version 0.23.0:
+ * chore(main): release 0.23.0 (#1285)
+ * fix(package-operator): add auth support for relative manifest
+ urls in package.yaml (#1295)
+ * fix(deps): update module
+ github.com/fluxcd/source-controller/api to v1.4.1 (#1281)
+ * feat: make auto update changeable on UI and show hint (#1291)
+ * fix(deps): update module github.com/fluxcd/helm-controller/api
+ to v1.1.0 (#1287)
+ * chore(deps): update dependency typescript-eslint to v8.8.0
+ (#1293)
+ * docs(website): fix typo in website (#1290)
+ * feat: show conflicts at package update (#1282)
+ * chore(docs): fix architecture diagram in readme (#1289)
+ * chore(deps): update dependency eslint-plugin-react to v7.37.0
+ (#1288)
+ * fix: avoid dependency errors during uninstallation (#1284)
+ * feat: show package components (#1283)
+
+-------------------------------------------------------------------
+Wed Oct 02 05:34:10 UTC 2024 - opensuse_buildservice(a)ojkastl.de
+
+- Update to version 0.22.0:
+ * chore(main): release 0.22.0 (#1230)
+ * feat(ui): improve package detail page (#1253)
+ * chore(website): fix broken links (#1280)
+ * docs: use a mermaid diagram for the dependency management
+ algorithm (#1270)
+ * docs(website): fix link to package configuration design
+ documentation in guides (#1279)
+ * fix: consider metadata when calculating max version (#1276)
+ * fix(ui): add text-break inside toast-body (#1278)
+ * fix(deps): update dependency
+ @getcanary/docusaurus-theme-search-pagefind to ^0.0.15 (#1271)
+ * fix(deps): update module github.com/schollz/progressbar/v3 to
+ v3.16.0 (#1272)
+ * chore(deps): update dependency typescript-eslint to v8.7.0
+ (#1275)
+ * chore(deps): update dependency @eslint/js to v9.11.1 (#1274)
+ * docs(website): fix cert-manager typo (#1273)
+ * chore: add docusaurus config to release please for automatic
+ banner updates (#1268)
+ * chore(deps): update actions/setup-node digest to 0a44ba7
+ (#1255)
+ * fix: dependency manager uses given repository if known (#1259)
+ * chore(deps): update dependency esbuild to v0.24.0 (#1269)
+ * docs(website): improve wording (#1267)
+ * docs(website): rename cta (#1266)
+ * docs(website): improve website wording (#1265)
+ * chore(deps): update dependency @eslint/js to v9.11.0 (#1263)
+ * fix(deps): update dependency @glasskube/theme to v0.1.2 (#1254)
+ * chore(deps): update actions/setup-node action to v4.0.4 (#1256)
+ * fix(ui): reopen strategy for portforwardings (#1248)
+ * fix(ui): use hardcoded giscus backlink (#1252)
+ * fix(ui): error installing clusterpackage (#1247)
+ * fix: increase resilience in case of broken repositories (#1237)
+ * fix(deps): update module github.com/posthog/posthog-go to
+ v1.2.24 (#1244)
+ * feat(ui): create namespace at installation (#1246)
+ * chore(deps): update dependency typescript-eslint to v8.6.0
+ (#1245)
+ * chore(deps): update dependency eslint to v8.57.1 (#1243)
+ * feat(cli): create namespace if necessary when installing a
+ package (#1131)
+ * fix(deps): update module github.com/posthog/posthog-go to
+ v1.2.22 (#1241)
+ * fix(deps): update dependency @getcanary/web to ^0.0.106 (#1239)
+ * fix(deps): update module github.com/schollz/progressbar/v3 to
+ v3.15.0 (#1240)
+ * fix(deps): update dependency
+ @getcanary/docusaurus-theme-search-pagefind to ^0.0.14 (#1238)
+ * docs: fix spelling errors on website and README (#1236)
+ * fix(deps): update fontsource monorepo to v5.1.0 (#1231)
+ * feat(cli): unify value config flags and add support for
+ `--value` with `--use-default` (#1232)
+ * docs(website): added link to package scope section of the
+ launch blog (#1234)
+ * chore(deps): update dependency eslint-plugin-react to v7.36.1
+ (#1233)
+ * docs(website): added package scopes page to docs (#1226)
+ * chore(deps): update dependency eslint-plugin-react to v7.36.0
+ (#1229)
+ * fix(deps): update kubernetes packages to v0.31.1 (#1228)
+ * fix(deps): update dependency @getcanary/web to ^0.0.105 (#1227)
+
+-------------------------------------------------------------------
Old:
----
glasskube-cli-0.21.0.obscpio
New:
----
glasskube-cli-0.23.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ glasskube-cli.spec ++++++
--- /var/tmp/diff_new_pack.hes49o/_old 2024-10-02 21:34:15.280552163 +0200
+++ /var/tmp/diff_new_pack.hes49o/_new 2024-10-02 21:34:15.280552163 +0200
@@ -21,7 +21,7 @@
%define executable_name glasskube
Name: glasskube-cli
-Version: 0.21.0
+Version: 0.23.0
Release: 0
Summary: The next generation Package Manager for Kubernetes
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.hes49o/_old 2024-10-02 21:34:15.308553327 +0200
+++ /var/tmp/diff_new_pack.hes49o/_new 2024-10-02 21:34:15.312553494 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/glasskube/glasskube</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.21.0</param>
+ <param name="revision">v0.23.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.hes49o/_old 2024-10-02 21:34:15.332554324 +0200
+++ /var/tmp/diff_new_pack.hes49o/_new 2024-10-02 21:34:15.336554491 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/glasskube/glasskube</param>
- <param name="changesrevision">8db61a6caa4770ee8065b3f2b9e46044b5d95a6a</param></service></servicedata>
+ <param name="changesrevision">25df8469aedafdd58f66e649f4e8700acb2b0f55</param></service></servicedata>
(No newline at EOF)
++++++ glasskube-cli-0.21.0.obscpio -> glasskube-cli-0.23.0.obscpio ++++++
++++ 8434 lines of diff (skipped)
++++++ glasskube-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.hes49o/_old 2024-10-02 21:34:15.656567795 +0200
+++ /var/tmp/diff_new_pack.hes49o/_new 2024-10-02 21:34:15.660567961 +0200
@@ -1,5 +1,5 @@
name: glasskube-cli
-version: 0.21.0
-mtime: 1726067792
-commit: 8db61a6caa4770ee8065b3f2b9e46044b5d95a6a
+version: 0.23.0
+mtime: 1727797107
+commit: 25df8469aedafdd58f66e649f4e8700acb2b0f55
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/glasskube-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.glasskube-cli.new.19354/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-google-api-core for openSUSE:Factory checked in at 2024-10-02 21:33:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-google-api-core (Old)
and /work/SRC/openSUSE:Factory/.python-google-api-core.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-google-api-core"
Wed Oct 2 21:33:40 2024 rev:35 rq:1205028 version:2.20.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-google-api-core/python-google-api-core.changes 2024-09-04 13:23:38.823313686 +0200
+++ /work/SRC/openSUSE:Factory/.python-google-api-core.new.19354/python-google-api-core.changes 2024-10-02 21:34:03.156048106 +0200
@@ -1,0 +2,15 @@
+Wed Oct 2 04:03:30 UTC 2024 - Steve Kowalik <steven.kowalik(a)suse.com>
+
+- Remove unneeded BuildRequires.
+- Refreshed patches:
+ * python-google-api-core-no-mock.patch
+
+-------------------------------------------------------------------
+Thu Sep 26 13:32:08 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- Update to 2.20.0
+ * Add async unsupported paramater exception (#694)
+ * Add support for asynchronous rest streaming (#686)
+ * Add support for creating exceptions from an asynchronous response (#688)
+
+-------------------------------------------------------------------
Old:
----
google_api_core-2.19.2.tar.gz
New:
----
google_api_core-2.20.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-google-api-core.spec ++++++
--- /var/tmp/diff_new_pack.Ybg4ZR/_old 2024-10-02 21:34:03.796074714 +0200
+++ /var/tmp/diff_new_pack.Ybg4ZR/_new 2024-10-02 21:34:03.796074714 +0200
@@ -26,23 +26,17 @@
%endif
%{?sle15_python_module_pythons}
Name: python-google-api-core
-Version: 2.19.2
+Version: 2.20.0
Release: 0
Summary: Google API client core library
License: Apache-2.0
URL: https://github.com/googleapis/python-api-core
Source: https://files.pythonhosted.org/packages/source/g/google_api_core/google_api…
-# https://github.com/googleapis/python-api-core/issues/377
+# PATCH-FIX-UPSTREAM Based on gh#googleapis/python-api-core#713
Patch0: python-google-api-core-no-mock.patch
-BuildRequires: %{python_module google-auth >= 2.14.1}
+# Needed for python_sitelib/google
BuildRequires: %{python_module googleapis-common-protos >= 1.53.0}
-BuildRequires: %{python_module grpcio >= 1.33.2}
-BuildRequires: %{python_module grpcio-status >= 1.33.2}
BuildRequires: %{python_module pip}
-BuildRequires: %{python_module proto-plus >= 1.22.3 with %python-proto-plus < 2.0.0dev0}
-BuildRequires: %{python_module protobuf >= 3.19.5 with %python-protobuf < 5.0.0.dev0}
-BuildRequires: %{python_module pytz}
-BuildRequires: %{python_module requests >= 2.18.0}
BuildRequires: %{python_module setuptools >= 40.3.0}
BuildRequires: %{python_module wheel}
%if 0%{?sle_version} >= 150400
@@ -50,7 +44,7 @@
%endif
# START TESTING SECTION
%if %{with test}
-BuildRequires: %{python_module google-api-core >= %{version}}
+BuildRequires: %{python_module google-api-core = %{version}}
BuildRequires: %{python_module proto-plus}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module pytest}
@@ -60,11 +54,9 @@
BuildRequires: python-rpm-macros
Requires: python-google-auth >= 2.14.1
Requires: python-googleapis-common-protos >= 1.53.0
-Requires: python-grpcio >= 1.33.2
-Requires: python-grpcio-status >= 1.33.2
-Requires: python-pytz
+Requires: python-grpcio >= 1.49.1
+Requires: python-grpcio-status >= 1.49.1
Requires: python-requests >= 2.18.0
-Requires: python-setuptools >= 40.3.0
Requires: (python-proto-plus >= 1.22.3 with python-proto-plus < 2.0.0dev0)
Requires: (python-protobuf >= 3.19.5 with python-protobuf < 5.0.0.dev0)
BuildArch: noarch
@@ -90,13 +82,11 @@
%pytest
%endif
-%clean
-
%if !%{with test}
%files %{python_files}
%license LICENSE
%doc README.rst
%{python_sitelib}/google/api_core
-%{python_sitelib}/google_api_core-%{version}*-info
+%{python_sitelib}/google_api_core-%{version}.dist-info
%endif
++++++ google_api_core-2.19.2.tar.gz -> google_api_core-2.20.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/PKG-INFO new/google_api_core-2.20.0/PKG-INFO
--- old/google_api_core-2.19.2/PKG-INFO 2024-08-27 22:59:16.198442000 +0200
+++ new/google_api_core-2.20.0/PKG-INFO 2024-09-19 20:22:39.577738800 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.19.2
+Version: 2.20.0
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/_rest_streaming_base.py new/google_api_core-2.20.0/google/api_core/_rest_streaming_base.py
--- old/google_api_core-2.19.2/google/api_core/_rest_streaming_base.py 1970-01-01 01:00:00.000000000 +0100
+++ new/google_api_core-2.20.0/google/api_core/_rest_streaming_base.py 2024-09-19 20:20:48.000000000 +0200
@@ -0,0 +1,118 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Helpers for server-side streaming in REST."""
+
+from collections import deque
+import string
+from typing import Deque, Union
+import types
+
+import proto
+import google.protobuf.message
+from google.protobuf.json_format import Parse
+
+
+class BaseResponseIterator:
+ """Base Iterator over REST API responses. This class should not be used directly.
+
+ Args:
+ response_message_cls (Union[proto.Message, google.protobuf.message.Message]): A response
+ class expected to be returned from an API.
+
+ Raises:
+ ValueError: If `response_message_cls` is not a subclass of `proto.Message` or `google.protobuf.message.Message`.
+ """
+
+ def __init__(
+ self,
+ response_message_cls: Union[proto.Message, google.protobuf.message.Message],
+ ):
+ self._response_message_cls = response_message_cls
+ # Contains a list of JSON responses ready to be sent to user.
+ self._ready_objs: Deque[str] = deque()
+ # Current JSON response being built.
+ self._obj = ""
+ # Keeps track of the nesting level within a JSON object.
+ self._level = 0
+ # Keeps track whether HTTP response is currently sending values
+ # inside of a string value.
+ self._in_string = False
+ # Whether an escape symbol "\" was encountered.
+ self._escape_next = False
+
+ self._grab = types.MethodType(self._create_grab(), self)
+
+ def _process_chunk(self, chunk: str):
+ if self._level == 0:
+ if chunk[0] != "[":
+ raise ValueError(
+ "Can only parse array of JSON objects, instead got %s" % chunk
+ )
+ for char in chunk:
+ if char == "{":
+ if self._level == 1:
+ # Level 1 corresponds to the outermost JSON object
+ # (i.e. the one we care about).
+ self._obj = ""
+ if not self._in_string:
+ self._level += 1
+ self._obj += char
+ elif char == "}":
+ self._obj += char
+ if not self._in_string:
+ self._level -= 1
+ if not self._in_string and self._level == 1:
+ self._ready_objs.append(self._obj)
+ elif char == '"':
+ # Helps to deal with an escaped quotes inside of a string.
+ if not self._escape_next:
+ self._in_string = not self._in_string
+ self._obj += char
+ elif char in string.whitespace:
+ if self._in_string:
+ self._obj += char
+ elif char == "[":
+ if self._level == 0:
+ self._level += 1
+ else:
+ self._obj += char
+ elif char == "]":
+ if self._level == 1:
+ self._level -= 1
+ else:
+ self._obj += char
+ else:
+ self._obj += char
+ self._escape_next = not self._escape_next if char == "\\" else False
+
+ def _create_grab(self):
+ if issubclass(self._response_message_cls, proto.Message):
+
+ def grab(this):
+ return this._response_message_cls.from_json(
+ this._ready_objs.popleft(), ignore_unknown_fields=True
+ )
+
+ return grab
+ elif issubclass(self._response_message_cls, google.protobuf.message.Message):
+
+ def grab(this):
+ return Parse(this._ready_objs.popleft(), this._response_message_cls())
+
+ return grab
+ else:
+ raise ValueError(
+ "Response message class must be a subclass of proto.Message or google.protobuf.message.Message."
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/exceptions.py new/google_api_core-2.20.0/google/api_core/exceptions.py
--- old/google_api_core-2.19.2/google/api_core/exceptions.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/google/api_core/exceptions.py 2024-09-19 20:20:48.000000000 +0200
@@ -22,7 +22,7 @@
from __future__ import unicode_literals
import http.client
-from typing import Dict
+from typing import Optional, Dict
from typing import Union
import warnings
@@ -442,6 +442,12 @@
grpc_status_code = grpc.StatusCode.DEADLINE_EXCEEDED if grpc is not None else None
+class AsyncRestUnsupportedParameterError(NotImplementedError):
+ """Raised when an unsupported parameter is configured against async rest transport."""
+
+ pass
+
+
def exception_class_for_http_status(status_code):
"""Return the exception class for a specific HTTP status code.
@@ -476,22 +482,37 @@
return error
-def from_http_response(response):
- """Create a :class:`GoogleAPICallError` from a :class:`requests.Response`.
+def _format_rest_error_message(error, method, url):
+ method = method.upper() if method else None
+ message = "{method} {url}: {error}".format(
+ method=method,
+ url=url,
+ error=error,
+ )
+ return message
+
+
+# NOTE: We're moving away from `from_http_status` because it expects an aiohttp response compared
+# to `format_http_response_error` which expects a more abstract response from google.auth and is
+# compatible with both sync and async response types.
+# TODO(https://github.com/googleapis/python-api-core/issues/691): Add type hint for response.
+def format_http_response_error(
+ response, method: str, url: str, payload: Optional[Dict] = None
+):
+ """Create a :class:`GoogleAPICallError` from a google auth rest response.
Args:
- response (requests.Response): The HTTP response.
+ response Union[google.auth.transport.Response, google.auth.aio.transport.Response]: The HTTP response.
+ method Optional(str): The HTTP request method.
+ url Optional(str): The HTTP request url.
+ payload Optional(dict): The HTTP response payload. If not passed in, it is read from response for a response type of google.auth.transport.Response.
Returns:
GoogleAPICallError: An instance of the appropriate subclass of
:class:`GoogleAPICallError`, with the message and errors populated
from the response.
"""
- try:
- payload = response.json()
- except ValueError:
- payload = {"error": {"message": response.text or "unknown error"}}
-
+ payload = {} if not payload else payload
error_message = payload.get("error", {}).get("message", "unknown error")
errors = payload.get("error", {}).get("errors", ())
# In JSON, details are already formatted in developer-friendly way.
@@ -504,12 +525,7 @@
)
)
error_info = error_info[0] if error_info else None
-
- message = "{method} {url}: {error}".format(
- method=response.request.method,
- url=response.request.url,
- error=error_message,
- )
+ message = _format_rest_error_message(error_message, method, url)
exception = from_http_status(
response.status_code,
@@ -522,6 +538,26 @@
return exception
+def from_http_response(response):
+ """Create a :class:`GoogleAPICallError` from a :class:`requests.Response`.
+
+ Args:
+ response (requests.Response): The HTTP response.
+
+ Returns:
+ GoogleAPICallError: An instance of the appropriate subclass of
+ :class:`GoogleAPICallError`, with the message and errors populated
+ from the response.
+ """
+ try:
+ payload = response.json()
+ except ValueError:
+ payload = {"error": {"message": response.text or "unknown error"}}
+ return format_http_response_error(
+ response, response.request.method, response.request.url, payload
+ )
+
+
def exception_class_for_grpc_status(status_code):
"""Return the exception class for a specific :class:`grpc.StatusCode`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/gapic_v1/method_async.py new/google_api_core-2.20.0/google/api_core/gapic_v1/method_async.py
--- old/google_api_core-2.19.2/google/api_core/gapic_v1/method_async.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/google/api_core/gapic_v1/method_async.py 2024-09-19 20:20:48.000000000 +0200
@@ -25,6 +25,8 @@
from google.api_core.gapic_v1.method import DEFAULT # noqa: F401
from google.api_core.gapic_v1.method import USE_DEFAULT_METADATA # noqa: F401
+_DEFAULT_ASYNC_TRANSPORT_KIND = "grpc_asyncio"
+
def wrap_method(
func,
@@ -32,6 +34,7 @@
default_timeout=None,
default_compression=None,
client_info=client_info.DEFAULT_CLIENT_INFO,
+ kind=_DEFAULT_ASYNC_TRANSPORT_KIND,
):
"""Wrap an async RPC method with common behavior.
@@ -40,7 +43,8 @@
and ``compression`` arguments and applies the common error mapping,
retry, timeout, metadata, and compression behavior to the low-level RPC method.
"""
- func = grpc_helpers_async.wrap_errors(func)
+ if kind == _DEFAULT_ASYNC_TRANSPORT_KIND:
+ func = grpc_helpers_async.wrap_errors(func)
metadata = [client_info.to_grpc_metadata()] if client_info is not None else None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/rest_streaming.py new/google_api_core-2.20.0/google/api_core/rest_streaming.py
--- old/google_api_core-2.19.2/google/api_core/rest_streaming.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/google/api_core/rest_streaming.py 2024-09-19 20:20:48.000000000 +0200
@@ -14,17 +14,15 @@
"""Helpers for server-side streaming in REST."""
-from collections import deque
-import string
-from typing import Deque, Union
+from typing import Union
import proto
import requests
import google.protobuf.message
-from google.protobuf.json_format import Parse
+from google.api_core._rest_streaming_base import BaseResponseIterator
-class ResponseIterator:
+class ResponseIterator(BaseResponseIterator):
"""Iterator over REST API responses.
Args:
@@ -33,7 +31,8 @@
class expected to be returned from an API.
Raises:
- ValueError: If `response_message_cls` is not a subclass of `proto.Message` or `google.protobuf.message.Message`.
+ ValueError:
+ - If `response_message_cls` is not a subclass of `proto.Message` or `google.protobuf.message.Message`.
"""
def __init__(
@@ -42,68 +41,16 @@
response_message_cls: Union[proto.Message, google.protobuf.message.Message],
):
self._response = response
- self._response_message_cls = response_message_cls
# Inner iterator over HTTP response's content.
self._response_itr = self._response.iter_content(decode_unicode=True)
- # Contains a list of JSON responses ready to be sent to user.
- self._ready_objs: Deque[str] = deque()
- # Current JSON response being built.
- self._obj = ""
- # Keeps track of the nesting level within a JSON object.
- self._level = 0
- # Keeps track whether HTTP response is currently sending values
- # inside of a string value.
- self._in_string = False
- # Whether an escape symbol "\" was encountered.
- self._escape_next = False
+ super(ResponseIterator, self).__init__(
+ response_message_cls=response_message_cls
+ )
def cancel(self):
"""Cancel existing streaming operation."""
self._response.close()
- def _process_chunk(self, chunk: str):
- if self._level == 0:
- if chunk[0] != "[":
- raise ValueError(
- "Can only parse array of JSON objects, instead got %s" % chunk
- )
- for char in chunk:
- if char == "{":
- if self._level == 1:
- # Level 1 corresponds to the outermost JSON object
- # (i.e. the one we care about).
- self._obj = ""
- if not self._in_string:
- self._level += 1
- self._obj += char
- elif char == "}":
- self._obj += char
- if not self._in_string:
- self._level -= 1
- if not self._in_string and self._level == 1:
- self._ready_objs.append(self._obj)
- elif char == '"':
- # Helps to deal with an escaped quotes inside of a string.
- if not self._escape_next:
- self._in_string = not self._in_string
- self._obj += char
- elif char in string.whitespace:
- if self._in_string:
- self._obj += char
- elif char == "[":
- if self._level == 0:
- self._level += 1
- else:
- self._obj += char
- elif char == "]":
- if self._level == 1:
- self._level -= 1
- else:
- self._obj += char
- else:
- self._obj += char
- self._escape_next = not self._escape_next if char == "\\" else False
-
def __next__(self):
while not self._ready_objs:
try:
@@ -115,18 +62,5 @@
raise e
return self._grab()
- def _grab(self):
- # Add extra quotes to make json.loads happy.
- if issubclass(self._response_message_cls, proto.Message):
- return self._response_message_cls.from_json(
- self._ready_objs.popleft(), ignore_unknown_fields=True
- )
- elif issubclass(self._response_message_cls, google.protobuf.message.Message):
- return Parse(self._ready_objs.popleft(), self._response_message_cls())
- else:
- raise ValueError(
- "Response message class must be a subclass of proto.Message or google.protobuf.message.Message."
- )
-
def __iter__(self):
return self
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/rest_streaming_async.py new/google_api_core-2.20.0/google/api_core/rest_streaming_async.py
--- old/google_api_core-2.19.2/google/api_core/rest_streaming_async.py 1970-01-01 01:00:00.000000000 +0100
+++ new/google_api_core-2.20.0/google/api_core/rest_streaming_async.py 2024-09-19 20:20:48.000000000 +0200
@@ -0,0 +1,83 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Helpers for asynchronous server-side streaming in REST."""
+
+from typing import Union
+
+import proto
+
+try:
+ import google.auth.aio.transport
+except ImportError as e: # pragma: NO COVER
+ raise ImportError(
+ "google-auth>=2.35.0 is required to use asynchronous rest streaming."
+ ) from e
+
+import google.protobuf.message
+from google.api_core._rest_streaming_base import BaseResponseIterator
+
+
+class AsyncResponseIterator(BaseResponseIterator):
+ """Asynchronous Iterator over REST API responses.
+
+ Args:
+ response (google.auth.aio.transport.Response): An API response object.
+ response_message_cls (Union[proto.Message, google.protobuf.message.Message]): A response
+ class expected to be returned from an API.
+
+ Raises:
+ ValueError:
+ - If `response_message_cls` is not a subclass of `proto.Message` or `google.protobuf.message.Message`.
+ """
+
+ def __init__(
+ self,
+ response: google.auth.aio.transport.Response,
+ response_message_cls: Union[proto.Message, google.protobuf.message.Message],
+ ):
+ self._response = response
+ self._chunk_size = 1024
+ self._response_itr = self._response.content().__aiter__()
+ super(AsyncResponseIterator, self).__init__(
+ response_message_cls=response_message_cls
+ )
+
+ async def __aenter__(self):
+ return self
+
+ async def cancel(self):
+ """Cancel existing streaming operation."""
+ await self._response.close()
+
+ async def __anext__(self):
+ while not self._ready_objs:
+ try:
+ chunk = await self._response_itr.__anext__()
+ chunk = chunk.decode("utf-8")
+ self._process_chunk(chunk)
+ except StopAsyncIteration as e:
+ if self._level > 0:
+ raise ValueError("i Unfinished stream: %s" % self._obj)
+ raise e
+ except ValueError as e:
+ raise e
+ return self._grab()
+
+ def __aiter__(self):
+ return self
+
+ async def __aexit__(self, exc_type, exc, tb):
+ """Cancel existing async streaming operation."""
+ await self._response.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google/api_core/version.py new/google_api_core-2.20.0/google/api_core/version.py
--- old/google_api_core-2.19.2/google/api_core/version.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/google/api_core/version.py 2024-09-19 20:20:48.000000000 +0200
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.19.2"
+__version__ = "2.20.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google_api_core.egg-info/PKG-INFO new/google_api_core-2.20.0/google_api_core.egg-info/PKG-INFO
--- old/google_api_core-2.19.2/google_api_core.egg-info/PKG-INFO 2024-08-27 22:59:16.000000000 +0200
+++ new/google_api_core-2.20.0/google_api_core.egg-info/PKG-INFO 2024-09-19 20:22:39.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.19.2
+Version: 2.20.0
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/google_api_core.egg-info/SOURCES.txt new/google_api_core-2.20.0/google_api_core.egg-info/SOURCES.txt
--- old/google_api_core-2.19.2/google_api_core.egg-info/SOURCES.txt 2024-08-27 22:59:16.000000000 +0200
+++ new/google_api_core-2.20.0/google_api_core.egg-info/SOURCES.txt 2024-09-19 20:22:39.000000000 +0200
@@ -4,6 +4,7 @@
setup.cfg
setup.py
google/api_core/__init__.py
+google/api_core/_rest_streaming_base.py
google/api_core/bidi.py
google/api_core/client_info.py
google/api_core/client_options.py
@@ -23,6 +24,7 @@
google/api_core/py.typed
google/api_core/rest_helpers.py
google/api_core/rest_streaming.py
+google/api_core/rest_streaming_async.py
google/api_core/retry_async.py
google/api_core/timeout.py
google/api_core/universe.py
@@ -62,10 +64,12 @@
google_api_core.egg-info/requires.txt
google_api_core.egg-info/top_level.txt
tests/__init__.py
+tests/helpers.py
tests/asyncio/__init__.py
tests/asyncio/test_grpc_helpers_async.py
tests/asyncio/test_operation_async.py
tests/asyncio/test_page_iterator_async.py
+tests/asyncio/test_rest_streaming_async.py
tests/asyncio/future/__init__.py
tests/asyncio/future/test_async_future.py
tests/asyncio/gapic/test_config_async.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/tests/asyncio/gapic/test_method_async.py new/google_api_core-2.20.0/tests/asyncio/gapic/test_method_async.py
--- old/google_api_core-2.19.2/tests/asyncio/gapic/test_method_async.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/tests/asyncio/gapic/test_method_async.py 2024-09-19 20:20:48.000000000 +0200
@@ -252,3 +252,14 @@
assert result == 42
method.assert_called_once_with(timeout=22, metadata=mock.ANY)
+
+
+(a)pytest.mark.asyncio
+async def test_wrap_method_without_wrap_errors():
+ fake_call = mock.AsyncMock()
+
+ wrapped_method = gapic_v1.method_async.wrap_method(fake_call, kind="rest")
+ with mock.patch("google.api_core.grpc_helpers_async.wrap_errors") as method:
+ await wrapped_method()
+
+ method.assert_not_called()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/tests/asyncio/test_rest_streaming_async.py new/google_api_core-2.20.0/tests/asyncio/test_rest_streaming_async.py
--- old/google_api_core-2.19.2/tests/asyncio/test_rest_streaming_async.py 1970-01-01 01:00:00.000000000 +0100
+++ new/google_api_core-2.20.0/tests/asyncio/test_rest_streaming_async.py 2024-09-19 20:20:48.000000000 +0200
@@ -0,0 +1,378 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# TODO: set random.seed explicitly in each test function.
+# See related issue: https://github.com/googleapis/python-api-core/issues/689.
+
+import pytest # noqa: I202
+import mock
+
+import datetime
+import logging
+import random
+import time
+from typing import List, AsyncIterator
+
+import proto
+
+try:
+ from google.auth.aio.transport import Response
+
+ AUTH_AIO_INSTALLED = True
+except ImportError:
+ AUTH_AIO_INSTALLED = False
+
+if not AUTH_AIO_INSTALLED: # pragma: NO COVER
+ pytest.skip(
+ "google-auth>=2.35.0 is required to use asynchronous rest streaming.",
+ allow_module_level=True,
+ )
+
+from google.api_core import rest_streaming_async
+from google.api import http_pb2
+from google.api import httpbody_pb2
+
+
+from ..helpers import Composer, Song, EchoResponse, parse_responses
+
+
+__protobuf__ = proto.module(package=__name__)
+SEED = int(time.time())
+logging.info(f"Starting async rest streaming tests with random seed: {SEED}")
+random.seed(SEED)
+
+
+async def mock_async_gen(data, chunk_size=1):
+ for i in range(0, len(data)): # pragma: NO COVER
+ chunk = data[i : i + chunk_size]
+ yield chunk.encode("utf-8")
+
+
+class ResponseMock(Response):
+ class _ResponseItr(AsyncIterator[bytes]):
+ def __init__(self, _response_bytes: bytes, random_split=False):
+ self._responses_bytes = _response_bytes
+ self._idx = 0
+ self._random_split = random_split
+
+ def __aiter__(self):
+ return self
+
+ async def __anext__(self):
+ if self._idx >= len(self._responses_bytes):
+ raise StopAsyncIteration
+ if self._random_split:
+ n = random.randint(1, len(self._responses_bytes[self._idx :]))
+ else:
+ n = 1
+ x = self._responses_bytes[self._idx : self._idx + n]
+ self._idx += n
+ return x
+
+ def __init__(
+ self,
+ responses: List[proto.Message],
+ response_cls,
+ random_split=False,
+ ):
+ self._responses = responses
+ self._random_split = random_split
+ self._response_message_cls = response_cls
+
+ def _parse_responses(self):
+ return parse_responses(self._response_message_cls, self._responses)
+
+ @property
+ async def headers(self):
+ raise NotImplementedError()
+
+ @property
+ async def status_code(self):
+ raise NotImplementedError()
+
+ async def close(self):
+ raise NotImplementedError()
+
+ async def content(self, chunk_size=None):
+ itr = self._ResponseItr(
+ self._parse_responses(), random_split=self._random_split
+ )
+ async for chunk in itr:
+ yield chunk
+
+ async def read(self):
+ raise NotImplementedError()
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "random_split,resp_message_is_proto_plus",
+ [(False, True), (False, False)],
+)
+async def test_next_simple(random_split, resp_message_is_proto_plus):
+ if resp_message_is_proto_plus:
+ response_type = EchoResponse
+ responses = [EchoResponse(content="hello world"), EchoResponse(content="yes")]
+ else:
+ response_type = httpbody_pb2.HttpBody
+ responses = [
+ httpbody_pb2.HttpBody(content_type="hello world"),
+ httpbody_pb2.HttpBody(content_type="yes"),
+ ]
+
+ resp = ResponseMock(
+ responses=responses, random_split=random_split, response_cls=response_type
+ )
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ idx = 0
+ async for response in itr:
+ assert response == responses[idx]
+ idx += 1
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "random_split,resp_message_is_proto_plus",
+ [
+ (True, True),
+ (False, True),
+ (True, False),
+ (False, False),
+ ],
+)
+async def test_next_nested(random_split, resp_message_is_proto_plus):
+ if resp_message_is_proto_plus:
+ response_type = Song
+ responses = [
+ Song(title="some song", composer=Composer(given_name="some name")),
+ Song(title="another song", date_added=datetime.datetime(2021, 12, 17)),
+ ]
+ else:
+ # Although `http_pb2.HttpRule`` is used in the response, any response message
+ # can be used which meets this criteria for the test of having a nested field.
+ response_type = http_pb2.HttpRule
+ responses = [
+ http_pb2.HttpRule(
+ selector="some selector",
+ custom=http_pb2.CustomHttpPattern(kind="some kind"),
+ ),
+ http_pb2.HttpRule(
+ selector="another selector",
+ custom=http_pb2.CustomHttpPattern(path="some path"),
+ ),
+ ]
+ resp = ResponseMock(
+ responses=responses, random_split=random_split, response_cls=response_type
+ )
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ idx = 0
+ async for response in itr:
+ assert response == responses[idx]
+ idx += 1
+ assert idx == len(responses)
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "random_split,resp_message_is_proto_plus",
+ [
+ (True, True),
+ (False, True),
+ (True, False),
+ (False, False),
+ ],
+)
+async def test_next_stress(random_split, resp_message_is_proto_plus):
+ n = 50
+ if resp_message_is_proto_plus:
+ response_type = Song
+ responses = [
+ Song(title="title_%d" % i, composer=Composer(given_name="name_%d" % i))
+ for i in range(n)
+ ]
+ else:
+ response_type = http_pb2.HttpRule
+ responses = [
+ http_pb2.HttpRule(
+ selector="selector_%d" % i,
+ custom=http_pb2.CustomHttpPattern(path="path_%d" % i),
+ )
+ for i in range(n)
+ ]
+ resp = ResponseMock(
+ responses=responses, random_split=random_split, response_cls=response_type
+ )
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ idx = 0
+ async for response in itr:
+ assert response == responses[idx]
+ idx += 1
+ assert idx == n
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "random_split,resp_message_is_proto_plus",
+ [
+ (True, True),
+ (False, True),
+ (True, False),
+ (False, False),
+ ],
+)
+async def test_next_escaped_characters_in_string(
+ random_split, resp_message_is_proto_plus
+):
+ if resp_message_is_proto_plus:
+ response_type = Song
+ composer_with_relateds = Composer()
+ relateds = ["Artist A", "Artist B"]
+ composer_with_relateds.relateds = relateds
+
+ responses = [
+ Song(
+ title='ti"tle\nfoo\tbar{}', composer=Composer(given_name="name\n\n\n")
+ ),
+ Song(
+ title='{"this is weird": "totally"}',
+ composer=Composer(given_name="\\{}\\"),
+ ),
+ Song(title='\\{"key": ["value",]}\\', composer=composer_with_relateds),
+ ]
+ else:
+ response_type = http_pb2.Http
+ responses = [
+ http_pb2.Http(
+ rules=[
+ http_pb2.HttpRule(
+ selector='ti"tle\nfoo\tbar{}',
+ custom=http_pb2.CustomHttpPattern(kind="name\n\n\n"),
+ )
+ ]
+ ),
+ http_pb2.Http(
+ rules=[
+ http_pb2.HttpRule(
+ selector='{"this is weird": "totally"}',
+ custom=http_pb2.CustomHttpPattern(kind="\\{}\\"),
+ )
+ ]
+ ),
+ http_pb2.Http(
+ rules=[
+ http_pb2.HttpRule(
+ selector='\\{"key": ["value",]}\\',
+ custom=http_pb2.CustomHttpPattern(kind="\\{}\\"),
+ )
+ ]
+ ),
+ ]
+ resp = ResponseMock(
+ responses=responses, random_split=random_split, response_cls=response_type
+ )
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ idx = 0
+ async for response in itr:
+ assert response == responses[idx]
+ idx += 1
+ assert idx == len(responses)
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize("response_type", [EchoResponse, httpbody_pb2.HttpBody])
+async def test_next_not_array(response_type):
+
+ data = '{"hello": 0}'
+ with mock.patch.object(
+ ResponseMock, "content", return_value=mock_async_gen(data)
+ ) as mock_method:
+ resp = ResponseMock(responses=[], response_cls=response_type)
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ with pytest.raises(ValueError):
+ await itr.__anext__()
+ mock_method.assert_called_once()
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize("response_type", [EchoResponse, httpbody_pb2.HttpBody])
+async def test_cancel(response_type):
+ with mock.patch.object(
+ ResponseMock, "close", new_callable=mock.AsyncMock
+ ) as mock_method:
+ resp = ResponseMock(responses=[], response_cls=response_type)
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ await itr.cancel()
+ mock_method.assert_called_once()
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize("response_type", [EchoResponse, httpbody_pb2.HttpBody])
+async def test_iterator_as_context_manager(response_type):
+ with mock.patch.object(
+ ResponseMock, "close", new_callable=mock.AsyncMock
+ ) as mock_method:
+ resp = ResponseMock(responses=[], response_cls=response_type)
+ async with rest_streaming_async.AsyncResponseIterator(resp, response_type):
+ pass
+ mock_method.assert_called_once()
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "response_type,return_value",
+ [
+ (EchoResponse, bytes('[{"content": "hello"}, {', "utf-8")),
+ (httpbody_pb2.HttpBody, bytes('[{"content_type": "hello"}, {', "utf-8")),
+ ],
+)
+async def test_check_buffer(response_type, return_value):
+ with mock.patch.object(
+ ResponseMock,
+ "_parse_responses",
+ return_value=return_value,
+ ):
+ resp = ResponseMock(responses=[], response_cls=response_type)
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ with pytest.raises(ValueError):
+ await itr.__anext__()
+ await itr.__anext__()
+
+
+(a)pytest.mark.asyncio
+(a)pytest.mark.parametrize("response_type", [EchoResponse, httpbody_pb2.HttpBody])
+async def test_next_html(response_type):
+
+ data = "<!DOCTYPE html><html></html>"
+ with mock.patch.object(
+ ResponseMock, "content", return_value=mock_async_gen(data)
+ ) as mock_method:
+ resp = ResponseMock(responses=[], response_cls=response_type)
+
+ itr = rest_streaming_async.AsyncResponseIterator(resp, response_type)
+ with pytest.raises(ValueError):
+ await itr.__anext__()
+ mock_method.assert_called_once()
+
+
+(a)pytest.mark.asyncio
+async def test_invalid_response_class():
+ class SomeClass:
+ pass
+
+ resp = ResponseMock(responses=[], response_cls=SomeClass)
+ with pytest.raises(
+ ValueError,
+ match="Response message class must be a subclass of proto.Message or google.protobuf.message.Message",
+ ):
+ rest_streaming_async.AsyncResponseIterator(resp, SomeClass)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/tests/helpers.py new/google_api_core-2.20.0/tests/helpers.py
--- old/google_api_core-2.19.2/tests/helpers.py 1970-01-01 01:00:00.000000000 +0100
+++ new/google_api_core-2.20.0/tests/helpers.py 2024-09-19 20:20:48.000000000 +0200
@@ -0,0 +1,71 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Helpers for tests"""
+
+import logging
+from typing import List
+
+import proto
+
+from google.protobuf import duration_pb2
+from google.protobuf import timestamp_pb2
+from google.protobuf.json_format import MessageToJson
+
+
+class Genre(proto.Enum):
+ GENRE_UNSPECIFIED = 0
+ CLASSICAL = 1
+ JAZZ = 2
+ ROCK = 3
+
+
+class Composer(proto.Message):
+ given_name = proto.Field(proto.STRING, number=1)
+ family_name = proto.Field(proto.STRING, number=2)
+ relateds = proto.RepeatedField(proto.STRING, number=3)
+ indices = proto.MapField(proto.STRING, proto.STRING, number=4)
+
+
+class Song(proto.Message):
+ composer = proto.Field(Composer, number=1)
+ title = proto.Field(proto.STRING, number=2)
+ lyrics = proto.Field(proto.STRING, number=3)
+ year = proto.Field(proto.INT32, number=4)
+ genre = proto.Field(Genre, number=5)
+ is_five_mins_longer = proto.Field(proto.BOOL, number=6)
+ score = proto.Field(proto.DOUBLE, number=7)
+ likes = proto.Field(proto.INT64, number=8)
+ duration = proto.Field(duration_pb2.Duration, number=9)
+ date_added = proto.Field(timestamp_pb2.Timestamp, number=10)
+
+
+class EchoResponse(proto.Message):
+ content = proto.Field(proto.STRING, number=1)
+
+
+def parse_responses(response_message_cls, all_responses: List[proto.Message]) -> bytes:
+ # json.dumps returns a string surrounded with quotes that need to be stripped
+ # in order to be an actual JSON.
+ json_responses = [
+ (
+ response_message_cls.to_json(response).strip('"')
+ if issubclass(response_message_cls, proto.Message)
+ else MessageToJson(response).strip('"')
+ )
+ for response in all_responses
+ ]
+ logging.info(f"Sending JSON stream: {json_responses}")
+ ret_val = "[{}]".format(",".join(json_responses))
+ return bytes(ret_val, "utf-8")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google_api_core-2.19.2/tests/unit/test_rest_streaming.py new/google_api_core-2.20.0/tests/unit/test_rest_streaming.py
--- old/google_api_core-2.19.2/tests/unit/test_rest_streaming.py 2024-08-27 22:57:23.000000000 +0200
+++ new/google_api_core-2.20.0/tests/unit/test_rest_streaming.py 2024-09-19 20:20:48.000000000 +0200
@@ -26,48 +26,16 @@
from google.api_core import rest_streaming
from google.api import http_pb2
from google.api import httpbody_pb2
-from google.protobuf import duration_pb2
-from google.protobuf import timestamp_pb2
-from google.protobuf.json_format import MessageToJson
+
+from ..helpers import Composer, Song, EchoResponse, parse_responses
__protobuf__ = proto.module(package=__name__)
SEED = int(time.time())
-logging.info(f"Starting rest streaming tests with random seed: {SEED}")
+logging.info(f"Starting sync rest streaming tests with random seed: {SEED}")
random.seed(SEED)
-class Genre(proto.Enum):
- GENRE_UNSPECIFIED = 0
- CLASSICAL = 1
- JAZZ = 2
- ROCK = 3
-
-
-class Composer(proto.Message):
- given_name = proto.Field(proto.STRING, number=1)
- family_name = proto.Field(proto.STRING, number=2)
- relateds = proto.RepeatedField(proto.STRING, number=3)
- indices = proto.MapField(proto.STRING, proto.STRING, number=4)
-
-
-class Song(proto.Message):
- composer = proto.Field(Composer, number=1)
- title = proto.Field(proto.STRING, number=2)
- lyrics = proto.Field(proto.STRING, number=3)
- year = proto.Field(proto.INT32, number=4)
- genre = proto.Field(Genre, number=5)
- is_five_mins_longer = proto.Field(proto.BOOL, number=6)
- score = proto.Field(proto.DOUBLE, number=7)
- likes = proto.Field(proto.INT64, number=8)
- duration = proto.Field(duration_pb2.Duration, number=9)
- date_added = proto.Field(timestamp_pb2.Timestamp, number=10)
-
-
-class EchoResponse(proto.Message):
- content = proto.Field(proto.STRING, number=1)
-
-
class ResponseMock(requests.Response):
class _ResponseItr:
def __init__(self, _response_bytes: bytes, random_split=False):
@@ -97,27 +65,15 @@
self._random_split = random_split
self._response_message_cls = response_cls
- def _parse_responses(self, responses: List[proto.Message]) -> bytes:
- # json.dumps returns a string surrounded with quotes that need to be stripped
- # in order to be an actual JSON.
- json_responses = [
- (
- self._response_message_cls.to_json(r).strip('"')
- if issubclass(self._response_message_cls, proto.Message)
- else MessageToJson(r).strip('"')
- )
- for r in responses
- ]
- logging.info(f"Sending JSON stream: {json_responses}")
- ret_val = "[{}]".format(",".join(json_responses))
- return bytes(ret_val, "utf-8")
+ def _parse_responses(self):
+ return parse_responses(self._response_message_cls, self._responses)
def close(self):
raise NotImplementedError()
def iter_content(self, *args, **kwargs):
return self._ResponseItr(
- self._parse_responses(self._responses),
+ self._parse_responses(),
random_split=self._random_split,
)
@@ -333,9 +289,8 @@
pass
resp = ResponseMock(responses=[], response_cls=SomeClass)
- response_iterator = rest_streaming.ResponseIterator(resp, SomeClass)
with pytest.raises(
ValueError,
match="Response message class must be a subclass of proto.Message or google.protobuf.message.Message",
):
- response_iterator._grab()
+ rest_streaming.ResponseIterator(resp, SomeClass)
++++++ python-google-api-core-no-mock.patch ++++++
--- /var/tmp/diff_new_pack.Ybg4ZR/_old 2024-10-02 21:34:03.916079703 +0200
+++ /var/tmp/diff_new_pack.Ybg4ZR/_new 2024-10-02 21:34:03.920079869 +0200
@@ -1,102 +1,183 @@
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/future/test_async_future.py google-api-core-2.19.0/tests/asyncio/future/test_async_future.py
---- google-api-core-2.19.0.orig/tests/asyncio/future/test_async_future.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/future/test_async_future.py 2024-05-16 16:03:34.320181259 +0200
-@@ -14,7 +14,7 @@
+From 5f28e210306de47ff5a9fa3b4bf48ac6ceb13e85 Mon Sep 17 00:00:00 2001
+From: Steve Kowalik <steven(a)wedontsleep.org>
+Date: Wed, 2 Oct 2024 13:50:33 +1000
+Subject: [PATCH] test: Switch to unittest.mock from mock
+
+Now that the minimum supported version of Python is 3.7, we can stop
+using the external mock requirement, and import it from unittest. I have
+also attempted to keep imports ordered.
+
+Fixes #377
+---
+ noxfile.py | 2 --
+ tests/asyncio/future/test_async_future.py | 2 +-
+ tests/asyncio/gapic/test_method_async.py | 2 +-
+ tests/asyncio/operations_v1/test_operations_async_client.py | 3 ++-
+ tests/asyncio/retry/test_retry_streaming_async.py | 4 ++--
+ tests/asyncio/retry/test_retry_unary_async.py | 2 +-
+ tests/asyncio/test_grpc_helpers_async.py | 3 ++-
+ tests/asyncio/test_operation_async.py | 3 ++-
+ tests/asyncio/test_page_iterator_async.py | 2 +-
+ tests/asyncio/test_rest_streaming_async.py | 6 +++---
+ tests/unit/future/test__helpers.py | 2 +-
+ tests/unit/future/test_polling.py | 2 +-
+ tests/unit/gapic/test_method.py | 2 +-
+ tests/unit/operations_v1/test_operations_rest_client.py | 2 +-
+ tests/unit/retry/test_retry_base.py | 2 +-
+ tests/unit/retry/test_retry_streaming.py | 2 +-
+ tests/unit/retry/test_retry_unary.py | 2 +-
+ tests/unit/test_bidi.py | 2 +-
+ tests/unit/test_exceptions.py | 2 +-
+ tests/unit/test_extended_operation.py | 2 +-
+ tests/unit/test_grpc_helpers.py | 3 ++-
+ tests/unit/test_operation.py | 3 ++-
+ tests/unit/test_page_iterator.py | 2 +-
+ tests/unit/test_path_template.py | 2 +-
+ tests/unit/test_timeout.py | 3 +--
+ 25 files changed, 32 insertions(+), 30 deletions(-)
+
+diff --git a/tests/asyncio/future/test_async_future.py b/tests/asyncio/future/test_async_future.py
+index 0cfe6773..659f41cf 100644
+--- a/tests/asyncio/future/test_async_future.py
++++ b/tests/asyncio/future/test_async_future.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
import asyncio
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/gapic/test_method_async.py google-api-core-2.19.0/tests/asyncio/gapic/test_method_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/gapic/test_method_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/gapic/test_method_async.py 2024-05-16 16:03:34.310181235 +0200
-@@ -14,7 +14,7 @@
+diff --git a/tests/asyncio/gapic/test_method_async.py b/tests/asyncio/gapic/test_method_async.py
+index f64157b4..026993e2 100644
+--- a/tests/asyncio/gapic/test_method_async.py
++++ b/tests/asyncio/gapic/test_method_async.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
import datetime
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/operations_v1/test_operations_async_client.py google-api-core-2.19.0/tests/asyncio/operations_v1/test_operations_async_client.py
---- google-api-core-2.19.0.orig/tests/asyncio/operations_v1/test_operations_async_client.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/operations_v1/test_operations_async_client.py 2024-05-16 16:03:34.300181212 +0200
-@@ -12,7 +12,7 @@
+diff --git a/tests/asyncio/operations_v1/test_operations_async_client.py b/tests/asyncio/operations_v1/test_operations_async_client.py
+index 19ac9b56..e5b20dcd 100644
+--- a/tests/asyncio/operations_v1/test_operations_async_client.py
++++ b/tests/asyncio/operations_v1/test_operations_async_client.py
+@@ -12,7 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import mock
+from unittest import mock
++
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/retry/test_retry_streaming_async.py google-api-core-2.19.0/tests/asyncio/retry/test_retry_streaming_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/retry/test_retry_streaming_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/retry/test_retry_streaming_async.py 2024-05-16 16:03:34.296847871 +0200
-@@ -16,7 +16,7 @@
+diff --git a/tests/asyncio/retry/test_retry_streaming_async.py b/tests/asyncio/retry/test_retry_streaming_async.py
+index 28ae6ff1..a54fc125 100644
+--- a/tests/asyncio/retry/test_retry_streaming_async.py
++++ b/tests/asyncio/retry/test_retry_streaming_async.py
+@@ -12,11 +12,11 @@
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
++import asyncio
+ import datetime
import re
- import asyncio
+-import asyncio
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/retry/test_retry_unary_async.py google-api-core-2.19.0/tests/asyncio/retry/test_retry_unary_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/retry/test_retry_unary_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/retry/test_retry_unary_async.py 2024-05-16 16:03:34.293514530 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/asyncio/retry/test_retry_unary_async.py b/tests/asyncio/retry/test_retry_unary_async.py
+index fc2f572b..032bab75 100644
+--- a/tests/asyncio/retry/test_retry_unary_async.py
++++ b/tests/asyncio/retry/test_retry_unary_async.py
+@@ -14,8 +14,8 @@
+
import datetime
import re
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/test_grpc_helpers_async.py google-api-core-2.19.0/tests/asyncio/test_grpc_helpers_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/test_grpc_helpers_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/test_grpc_helpers_async.py 2024-05-16 16:03:34.286847847 +0200
-@@ -12,7 +12,7 @@
+diff --git a/tests/asyncio/test_grpc_helpers_async.py b/tests/asyncio/test_grpc_helpers_async.py
+index 1a408ccd..a53de083 100644
+--- a/tests/asyncio/test_grpc_helpers_async.py
++++ b/tests/asyncio/test_grpc_helpers_async.py
+@@ -12,7 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import mock
+from unittest import mock
++
import pytest # noqa: I202
try:
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/test_operation_async.py google-api-core-2.19.0/tests/asyncio/test_operation_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/test_operation_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/test_operation_async.py 2024-05-16 16:03:34.316847918 +0200
-@@ -13,7 +13,7 @@
+diff --git a/tests/asyncio/test_operation_async.py b/tests/asyncio/test_operation_async.py
+index 127ba634..f7ebad8a 100644
+--- a/tests/asyncio/test_operation_async.py
++++ b/tests/asyncio/test_operation_async.py
+@@ -13,7 +13,8 @@
# limitations under the License.
-import mock
+from unittest import mock
++
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/asyncio/test_page_iterator_async.py google-api-core-2.19.0/tests/asyncio/test_page_iterator_async.py
---- google-api-core-2.19.0.orig/tests/asyncio/test_page_iterator_async.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/asyncio/test_page_iterator_async.py 2024-05-16 16:03:34.283514506 +0200
-@@ -14,7 +14,7 @@
+diff --git a/tests/asyncio/test_page_iterator_async.py b/tests/asyncio/test_page_iterator_async.py
+index 75f9e1cf..e661bd26 100644
+--- a/tests/asyncio/test_page_iterator_async.py
++++ b/tests/asyncio/test_page_iterator_async.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
import inspect
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import page_iterator_async
-diff -Nru google-api-core-2.19.0.orig/tests/unit/future/test__helpers.py google-api-core-2.19.0/tests/unit/future/test__helpers.py
---- google-api-core-2.19.0.orig/tests/unit/future/test__helpers.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/future/test__helpers.py 2024-05-16 16:03:34.433514858 +0200
+diff --git a/tests/asyncio/test_rest_streaming_async.py b/tests/asyncio/test_rest_streaming_async.py
+index da5b1c8d..f726cbee 100644
+--- a/tests/asyncio/test_rest_streaming_async.py
++++ b/tests/asyncio/test_rest_streaming_async.py
+@@ -15,14 +15,14 @@
+ # TODO: set random.seed explicitly in each test function.
+ # See related issue: https://github.com/googleapis/python-api-core/issues/689.
+
+-import pytest # noqa: I202
+-import mock
+-
+ import datetime
+ import logging
+ import random
+ import time
+ from typing import List, AsyncIterator
++from unittest import mock
++
++import pytest # noqa: I202
+
+ import proto
+
+diff --git a/tests/unit/future/test__helpers.py b/tests/unit/future/test__helpers.py
+index 98afc599..a37efdd4 100644
+--- a/tests/unit/future/test__helpers.py
++++ b/tests/unit/future/test__helpers.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
@@ -106,169 +187,197 @@
from google.api_core.future import _helpers
-diff -Nru google-api-core-2.19.0.orig/tests/unit/future/test_polling.py google-api-core-2.19.0/tests/unit/future/test_polling.py
---- google-api-core-2.19.0.orig/tests/unit/future/test_polling.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/future/test_polling.py 2024-05-16 16:03:34.433514858 +0200
-@@ -16,7 +16,7 @@
+diff --git a/tests/unit/future/test_polling.py b/tests/unit/future/test_polling.py
+index f5d9b4f1..2f66f230 100644
+--- a/tests/unit/future/test_polling.py
++++ b/tests/unit/future/test_polling.py
+@@ -15,8 +15,8 @@
+ import concurrent.futures
import threading
import time
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions, retry
-diff -Nru google-api-core-2.19.0.orig/tests/unit/gapic/test_method.py google-api-core-2.19.0/tests/unit/gapic/test_method.py
---- google-api-core-2.19.0.orig/tests/unit/gapic/test_method.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/gapic/test_method.py 2024-05-16 16:03:34.413514811 +0200
-@@ -14,7 +14,7 @@
+diff --git a/tests/unit/gapic/test_method.py b/tests/unit/gapic/test_method.py
+index d966f478..87aa6390 100644
+--- a/tests/unit/gapic/test_method.py
++++ b/tests/unit/gapic/test_method.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
import datetime
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/unit/operations_v1/test_operations_rest_client.py google-api-core-2.19.0/tests/unit/operations_v1/test_operations_rest_client.py
---- google-api-core-2.19.0.orig/tests/unit/operations_v1/test_operations_rest_client.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/operations_v1/test_operations_rest_client.py 2024-05-16 16:03:34.393514764 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/operations_v1/test_operations_rest_client.py b/tests/unit/operations_v1/test_operations_rest_client.py
+index 4ab4f1f7..26f34c40 100644
+--- a/tests/unit/operations_v1/test_operations_rest_client.py
++++ b/tests/unit/operations_v1/test_operations_rest_client.py
+@@ -14,8 +14,8 @@
+ # limitations under the License.
#
import os
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/unit/retry/test_retry_base.py google-api-core-2.19.0/tests/unit/retry/test_retry_base.py
---- google-api-core-2.19.0.orig/tests/unit/retry/test_retry_base.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/retry/test_retry_base.py 2024-05-16 16:03:34.380181399 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/retry/test_retry_base.py b/tests/unit/retry/test_retry_base.py
+index a0c6776b..212c4293 100644
+--- a/tests/unit/retry/test_retry_base.py
++++ b/tests/unit/retry/test_retry_base.py
+@@ -14,8 +14,8 @@
+
import itertools
import re
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
import requests.exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/unit/retry/test_retry_streaming.py google-api-core-2.19.0/tests/unit/retry/test_retry_streaming.py
---- google-api-core-2.19.0.orig/tests/unit/retry/test_retry_streaming.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/retry/test_retry_streaming.py 2024-05-16 16:03:34.376848059 +0200
-@@ -14,7 +14,7 @@
+diff --git a/tests/unit/retry/test_retry_streaming.py b/tests/unit/retry/test_retry_streaming.py
+index 01f35327..82b60b05 100644
+--- a/tests/unit/retry/test_retry_streaming.py
++++ b/tests/unit/retry/test_retry_streaming.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
import re
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/unit/retry/test_retry_unary.py google-api-core-2.19.0/tests/unit/retry/test_retry_unary.py
---- google-api-core-2.19.0.orig/tests/unit/retry/test_retry_unary.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/retry/test_retry_unary.py 2024-05-16 16:03:34.386848082 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/retry/test_retry_unary.py b/tests/unit/retry/test_retry_unary.py
+index 7dcd8dd6..b018fa96 100644
+--- a/tests/unit/retry/test_retry_unary.py
++++ b/tests/unit/retry/test_retry_unary.py
+@@ -14,8 +14,8 @@
+
import datetime
import re
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_bidi.py google-api-core-2.19.0/tests/unit/test_bidi.py
---- google-api-core-2.19.0.orig/tests/unit/test_bidi.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_bidi.py 2024-05-16 16:03:34.326847941 +0200
-@@ -17,7 +17,7 @@
+diff --git a/tests/unit/test_bidi.py b/tests/unit/test_bidi.py
+index 84ac9dc5..08e80afd 100644
+--- a/tests/unit/test_bidi.py
++++ b/tests/unit/test_bidi.py
+@@ -16,8 +16,8 @@
+ import logging
import queue
import threading
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_exceptions.py google-api-core-2.19.0/tests/unit/test_exceptions.py
---- google-api-core-2.19.0.orig/tests/unit/test_exceptions.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_exceptions.py 2024-05-16 16:03:34.403514788 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/test_exceptions.py b/tests/unit/test_exceptions.py
+index 07a36817..e3f8f909 100644
+--- a/tests/unit/test_exceptions.py
++++ b/tests/unit/test_exceptions.py
+@@ -14,8 +14,8 @@
+
import http.client
import json
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
import requests
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_extended_operation.py google-api-core-2.19.0/tests/unit/test_extended_operation.py
---- google-api-core-2.19.0.orig/tests/unit/test_extended_operation.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_extended_operation.py 2024-05-16 16:03:34.353514670 +0200
-@@ -16,7 +16,7 @@
+diff --git a/tests/unit/test_extended_operation.py b/tests/unit/test_extended_operation.py
+index 53af5204..ab550662 100644
+--- a/tests/unit/test_extended_operation.py
++++ b/tests/unit/test_extended_operation.py
+@@ -15,8 +15,8 @@
+ import dataclasses
import enum
import typing
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import exceptions
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_grpc_helpers.py google-api-core-2.19.0/tests/unit/test_grpc_helpers.py
---- google-api-core-2.19.0.orig/tests/unit/test_grpc_helpers.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_grpc_helpers.py 2024-05-16 16:03:34.373514717 +0200
-@@ -12,7 +12,7 @@
+diff --git a/tests/unit/test_grpc_helpers.py b/tests/unit/test_grpc_helpers.py
+index 59442d43..8de9d8c0 100644
+--- a/tests/unit/test_grpc_helpers.py
++++ b/tests/unit/test_grpc_helpers.py
+@@ -12,7 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import mock
+from unittest import mock
++
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_operation.py google-api-core-2.19.0/tests/unit/test_operation.py
---- google-api-core-2.19.0.orig/tests/unit/test_operation.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_operation.py 2024-05-16 16:03:34.340181306 +0200
-@@ -13,7 +13,7 @@
+diff --git a/tests/unit/test_operation.py b/tests/unit/test_operation.py
+index f029866c..80680720 100644
+--- a/tests/unit/test_operation.py
++++ b/tests/unit/test_operation.py
+@@ -13,7 +13,8 @@
# limitations under the License.
-import mock
+from unittest import mock
++
import pytest
try:
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_page_iterator.py google-api-core-2.19.0/tests/unit/test_page_iterator.py
---- google-api-core-2.19.0.orig/tests/unit/test_page_iterator.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_page_iterator.py 2024-05-16 16:03:34.333514624 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/test_page_iterator.py b/tests/unit/test_page_iterator.py
+index cf43aedf..560722c5 100644
+--- a/tests/unit/test_page_iterator.py
++++ b/tests/unit/test_page_iterator.py
+@@ -14,8 +14,8 @@
+
import math
import types
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api_core import page_iterator
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_path_template.py google-api-core-2.19.0/tests/unit/test_path_template.py
---- google-api-core-2.19.0.orig/tests/unit/test_path_template.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_path_template.py 2024-05-16 16:03:34.333514624 +0200
-@@ -14,7 +14,7 @@
+diff --git a/tests/unit/test_path_template.py b/tests/unit/test_path_template.py
+index 808b36f3..c34dd0f3 100644
+--- a/tests/unit/test_path_template.py
++++ b/tests/unit/test_path_template.py
+@@ -13,8 +13,8 @@
+ # limitations under the License.
from __future__ import unicode_literals
++from unittest import mock
-import mock
-+from unittest import mock
import pytest
from google.api import auth_pb2
-diff -Nru google-api-core-2.19.0.orig/tests/unit/test_timeout.py google-api-core-2.19.0/tests/unit/test_timeout.py
---- google-api-core-2.19.0.orig/tests/unit/test_timeout.py 2024-04-30 19:00:19.000000000 +0200
-+++ google-api-core-2.19.0/tests/unit/test_timeout.py 2024-05-16 16:03:34.426848175 +0200
-@@ -15,7 +15,7 @@
+diff --git a/tests/unit/test_timeout.py b/tests/unit/test_timeout.py
+index 0bcf07f0..60a2e65d 100644
+--- a/tests/unit/test_timeout.py
++++ b/tests/unit/test_timeout.py
+@@ -14,8 +14,7 @@
+
import datetime
import itertools
-
+-
-import mock
+from unittest import mock
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package krita for openSUSE:Factory checked in at 2024-10-02 21:33:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/krita (Old)
and /work/SRC/openSUSE:Factory/.krita.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "krita"
Wed Oct 2 21:33:34 2024 rev:80 rq:1205003 version:5.2.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/krita/krita.changes 2024-09-30 15:40:02.260113404 +0200
+++ /work/SRC/openSUSE:Factory/.krita.new.19354/krita.changes 2024-10-02 21:34:00.755948326 +0200
@@ -1,0 +2,6 @@
+Tue Oct 1 21:38:05 UTC 2024 - Christophe Marin <christophe(a)krop.fr>
+
+- Update to 5.2.6:
+ * Fix a critical error with pass-through group layers (kde#493774)
+
+-------------------------------------------------------------------
Old:
----
krita-5.2.5.tar.xz
krita-5.2.5.tar.xz.sig
New:
----
krita-5.2.6.tar.xz
krita-5.2.6.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ krita.spec ++++++
--- /var/tmp/diff_new_pack.m7f1zq/_old 2024-10-02 21:34:02.636026487 +0200
+++ /var/tmp/diff_new_pack.m7f1zq/_new 2024-10-02 21:34:02.640026654 +0200
@@ -29,7 +29,7 @@
%define pyver python311
%endif
Name: krita
-Version: 5.2.5
+Version: 5.2.6
Release: 0
Summary: Digital Painting Application
License: BSD-2-Clause AND GPL-2.0-or-later AND LGPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later AND CC0-1.0 AND LGPL-2.0-only
++++++ krita-5.2.5.tar.xz -> krita-5.2.6.tar.xz ++++++
/work/SRC/openSUSE:Factory/krita/krita-5.2.5.tar.xz /work/SRC/openSUSE:Factory/.krita.new.19354/krita-5.2.6.tar.xz differ: char 26, line 1
++++++ krita.keyring ++++++
Binary files /var/tmp/diff_new_pack.m7f1zq/_old and /var/tmp/diff_new_pack.m7f1zq/_new differ
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gromox for openSUSE:Factory checked in at 2024-10-02 21:33:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gromox (Old)
and /work/SRC/openSUSE:Factory/.gromox.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gromox"
Wed Oct 2 21:33:27 2024 rev:35 rq:1204987 version:2.33
Changes:
--------
--- /work/SRC/openSUSE:Factory/gromox/gromox.changes 2024-09-05 16:04:12.326694787 +0200
+++ /work/SRC/openSUSE:Factory/.gromox.new.19354/gromox.changes 2024-10-02 21:33:51.143548704 +0200
@@ -1,0 +2,13 @@
+Tue Oct 1 14:13:21 UTC 2024 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to release 2.33
+ * oxcmail: Implement MIME fragment joining for the construction
+ of the contents of PR_HTML.
+ * dscli: add --ac option to test Mail Autoconfig (what
+ Thunderbird uses in leu of AutoDiscover)
+ * http: credential caching for HTTP Basic (config directive
+ ``http_basic_auth_cred_caching``, defaulting to 60s)
+ * oxcical: revert commit which evaluates different MAPI
+ timezone properties to generate DTSTART/DTEND's TZID value
+
+-------------------------------------------------------------------
Old:
----
gromox-2.32.tar.asc
gromox-2.32.tar.zst
New:
----
gromox-2.33.tar.asc
gromox-2.33.tar.zst
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gromox.spec ++++++
--- /var/tmp/diff_new_pack.tsWtqU/_old 2024-10-02 21:33:51.767574646 +0200
+++ /var/tmp/diff_new_pack.tsWtqU/_new 2024-10-02 21:33:51.767574646 +0200
@@ -19,7 +19,7 @@
%define _libexecdir %_prefix/libexec
Name: gromox
-Version: 2.32
+Version: 2.33
Release: 0
Summary: Groupware server backend with RPC, IMAP,POP3, PHP-MAPI support
License: AGPL-3.0-or-later AND GPL-2.0-only AND GPL-3.0-or-later
@@ -92,6 +92,7 @@
Requires(pre): group(gromox)
Provides: php-mapi-gromox = %version-%release
Conflicts: grommunio-admin-api < 1.10.7
+Recommends: mapitags
%{?systemd_ordering}
%if !0%{?_pamdir:1}
%define _pamdir /%_lib/security
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.tsWtqU/_old 2024-10-02 21:33:51.799575977 +0200
+++ /var/tmp/diff_new_pack.tsWtqU/_new 2024-10-02 21:33:51.799575977 +0200
@@ -1,5 +1,5 @@
-mtime: 1725477224
-commit: c94e92d8218929aa5790d2451b98defac6c3a6e889cd573dc62e11dbecfb4f6d
+mtime: 1727813761
+commit: 3493ed7aa4f92b3a927f3c0f660daf92e70be4732dc0da77f4b9bb8f05ef0a2f
url: https://src.opensuse.org/jengelh/gromox
revision: master
++++++ build.specials.obscpio ++++++
diff: old/*: No such file or directory
diff: new/*: No such file or directory
++++++ debian.changelog ++++++
--- /var/tmp/diff_new_pack.tsWtqU/_old 2024-10-02 21:33:51.891579802 +0200
+++ /var/tmp/diff_new_pack.tsWtqU/_new 2024-10-02 21:33:51.895579968 +0200
@@ -1,6 +1,9 @@
-gromox (2.32-0) unstable; urgency=low
+gromox (2.33-0) unstable; urgency=low
- * Update.
+ * The build process is supposed to replace the entries here
+ automatically from data present in gromox.changes.
+ But if you see this message in installed systems,
+ that would indicate a problem in debtransform(1).
- -- Gromox <null(a)gromox.com> Wed, 04 Sep 2024 09:49:00 +0200
+ -- Gromox <null(a)gromox.com> Tue, 01 Oct 2024 16:10:00 +0200
++++++ gromox-2.32.tar.zst -> gromox-2.33.tar.zst ++++++
++++ 10374 lines of diff (skipped)
++++++ gromox.dsc ++++++
--- /var/tmp/diff_new_pack.tsWtqU/_old 2024-10-02 21:33:52.651611401 +0200
+++ /var/tmp/diff_new_pack.tsWtqU/_new 2024-10-02 21:33:52.655611568 +0200
@@ -1,7 +1,7 @@
Format: 1.0
Source: gromox
Architecture: any
-Version: 2.30
+Version: 2.33
DEBTRANSFORM-RELEASE: 1
Maintainer: Gromox <null(a)gromox.com>
Homepage: https://gromox.com
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package frr for openSUSE:Factory checked in at 2024-10-02 21:33:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/frr (Old)
and /work/SRC/openSUSE:Factory/.frr.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "frr"
Wed Oct 2 21:33:24 2024 rev:37 rq:1204981 version:10.0.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/frr/frr.changes 2024-09-17 18:18:20.383344163 +0200
+++ /work/SRC/openSUSE:Factory/.frr.new.19354/frr.changes 2024-10-02 21:33:48.695446928 +0200
@@ -1,0 +2,8 @@
+Mon Sep 30 09:49:59 UTC 2024 - Marius Tomaschewski <mt(a)suse.com>
+
+- Update to frr 10.0.2 release providing fix for CVE-2024-44070
+ and other issues, see https://frrouting.org/release/10.0.2/
+- Removed patch included in the sources:
+ [- 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch]
+
+-------------------------------------------------------------------
Old:
----
0002-bgpd-Check-the-actual-remaining-stream-length-before.patch
frr-10.0.1.tar.gz
New:
----
frr-10.0.2.tar.gz
BETA DEBUG BEGIN:
Old:- Removed patch included in the sources:
[- 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch]
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ frr.spec ++++++
--- /var/tmp/diff_new_pack.HjONGA/_old 2024-10-02 21:33:49.395476030 +0200
+++ /var/tmp/diff_new_pack.HjONGA/_new 2024-10-02 21:33:49.395476030 +0200
@@ -30,7 +30,7 @@
%define frr_daemondir %{_prefix}/lib/frr
Name: frr
-Version: 10.0.1
+Version: 10.0.2
Release: 0
Summary: The FRRouting Protocol Suite
License: GPL-2.0-or-later AND LGPL-2.1-or-later
@@ -41,7 +41,6 @@
Source1: %{name}-tmpfiles.d
Patch0: harden_frr.service.patch
Patch1: 0001-disable-zmq-test.patch
-Patch2: 0002-bgpd-Check-the-actual-remaining-stream-length-before.patch
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bison >= 2.7
++++++ frr-10.0.1.tar.gz -> frr-10.0.2.tar.gz ++++++
/work/SRC/openSUSE:Factory/frr/frr-10.0.1.tar.gz /work/SRC/openSUSE:Factory/.frr.new.19354/frr-10.0.2.tar.gz differ: char 13, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package trufflehog for openSUSE:Factory checked in at 2024-10-02 21:33:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/trufflehog (Old)
and /work/SRC/openSUSE:Factory/.trufflehog.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "trufflehog"
Wed Oct 2 21:33:21 2024 rev:49 rq:1204979 version:3.82.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/trufflehog/trufflehog.changes 2024-09-27 17:10:54.437190334 +0200
+++ /work/SRC/openSUSE:Factory/.trufflehog.new.19354/trufflehog.changes 2024-10-02 21:33:45.607318544 +0200
@@ -1,0 +2,16 @@
+Tue Oct 01 08:05:06 UTC 2024 - felix.niederwanger(a)suse.de
+
+- Update to version 3.82.6:
+ * [feat] - Add SizedLRU Cache (#3344)
+ * [bug] - Recover From Panic During Archive Handling (#3348)
+ * [fix] - Use Parent Context in Azure Detector (#3346)
+ * [chore] - update Go version to 1.23.0 (#3340)
+ * disable secret scans for community PRs (#3343)
+ * Enhanced the eraser detector to handle new status code from verification API (#3342)
+ * [feat] - Add Generic Hasher Interface with Blake2b Implementation (#3337)
+ * [fix] Move detector initialization to DefaultDetectors function (#3341)
+ * Improve process cleanup (#3339)
+ * fix(decoder): prevent race (#3031)
+ * Add named params to interface methods (#3335)
+
+-------------------------------------------------------------------
Old:
----
trufflehog-3.82.5.obscpio
New:
----
trufflehog-3.82.6.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ trufflehog.spec ++++++
--- /var/tmp/diff_new_pack.uNnxoe/_old 2024-10-02 21:33:48.231427637 +0200
+++ /var/tmp/diff_new_pack.uNnxoe/_new 2024-10-02 21:33:48.231427637 +0200
@@ -17,7 +17,7 @@
Name: trufflehog
-Version: 3.82.5
+Version: 3.82.6
Release: 0
Summary: CLI tool to find exposed secrets in source and archives
License: AGPL-3.0-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.uNnxoe/_old 2024-10-02 21:33:48.267429134 +0200
+++ /var/tmp/diff_new_pack.uNnxoe/_new 2024-10-02 21:33:48.267429134 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/trufflesecurity/trufflehog.git</param>
<param name="scm">git</param>
<param name="revision">main</param>
- <param name="version">v3.82.5</param>
+ <param name="version">v3.82.6</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="changesgenerate">enable</param>
</service>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.uNnxoe/_old 2024-10-02 21:33:48.291430131 +0200
+++ /var/tmp/diff_new_pack.uNnxoe/_new 2024-10-02 21:33:48.295430298 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/trufflesecurity/trufflehog.git</param>
- <param name="changesrevision">c57b6b02f39379e3ff568a0ef7f6ee41d04bf8e2</param></service></servicedata>
+ <param name="changesrevision">a5b09951c1eaf6834730dd10db67cf5d8b71fffa</param></service></servicedata>
(No newline at EOF)
++++++ trufflehog-3.82.5.obscpio -> trufflehog-3.82.6.obscpio ++++++
/work/SRC/openSUSE:Factory/trufflehog/trufflehog-3.82.5.obscpio /work/SRC/openSUSE:Factory/.trufflehog.new.19354/trufflehog-3.82.6.obscpio differ: char 50, line 1
++++++ trufflehog.obsinfo ++++++
--- /var/tmp/diff_new_pack.uNnxoe/_old 2024-10-02 21:33:48.339432127 +0200
+++ /var/tmp/diff_new_pack.uNnxoe/_new 2024-10-02 21:33:48.339432127 +0200
@@ -1,5 +1,5 @@
name: trufflehog
-version: 3.82.5
-mtime: 1727318313
-commit: c57b6b02f39379e3ff568a0ef7f6ee41d04bf8e2
+version: 3.82.6
+mtime: 1727727495
+commit: a5b09951c1eaf6834730dd10db67cf5d8b71fffa
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/trufflehog/vendor.tar.gz /work/SRC/openSUSE:Factory/.trufflehog.new.19354/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package vhostmd for openSUSE:Factory checked in at 2024-10-02 21:33:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/vhostmd (Old)
and /work/SRC/openSUSE:Factory/.vhostmd.new.19354 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vhostmd"
Wed Oct 2 21:33:18 2024 rev:35 rq:1204975 version:1.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/vhostmd/vhostmd.changes 2024-09-23 15:19:33.314806485 +0200
+++ /work/SRC/openSUSE:Factory/.vhostmd.new.19354/vhostmd.changes 2024-10-02 21:33:41.831161556 +0200
@@ -1,0 +2,10 @@
+Tue Oct 1 17:55:04 UTC 2024 - James Fehlig <jfehlig(a)suse.com>
+
+- Fix virtio transport to work with libvirt >= 9.7.0
+ Added patches:
+ 5a04b594-Add-channel_path-setting.patch,
+ 176fcda4-Support-new-channel-path-naming.patch,
+ 9d282891-Fix-parsing-of-vmstat-output.patch
+ bsc#1230961
+
+-------------------------------------------------------------------
New:
----
176fcda4-Support-new-channel-path-naming.patch
5a04b594-Add-channel_path-setting.patch
9d282891-Fix-parsing-of-vmstat-output.patch
BETA DEBUG BEGIN:
New: 5a04b594-Add-channel_path-setting.patch,
176fcda4-Support-new-channel-path-naming.patch,
9d282891-Fix-parsing-of-vmstat-output.patch
New: Added patches:
5a04b594-Add-channel_path-setting.patch,
176fcda4-Support-new-channel-path-naming.patch,
New: 176fcda4-Support-new-channel-path-naming.patch,
9d282891-Fix-parsing-of-vmstat-output.patch
bsc#1230961
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ vhostmd.spec ++++++
--- /var/tmp/diff_new_pack.IXuOUl/_old 2024-10-02 21:33:42.567192156 +0200
+++ /var/tmp/diff_new_pack.IXuOUl/_new 2024-10-02 21:33:42.567192156 +0200
@@ -37,6 +37,9 @@
Patch2: value-newline.patch
Patch3: libmetrics-link.patch
Patch4: harden_vhostmd.service.patch
+Patch5: 5a04b594-Add-channel_path-setting.patch
+Patch6: 176fcda4-Support-new-channel-path-naming.patch
+Patch7: 9d282891-Fix-parsing-of-vmstat-output.patch
BuildRequires: libtool
BuildRequires: libvirt-devel
BuildRequires: libxml2
++++++ 176fcda4-Support-new-channel-path-naming.patch ++++++
From 176fcda44caca807b4bec9fd613991afd9d5a70b Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig(a)suse.com>
Date: Fri, 27 Sep 2024 10:48:41 -0600
Subject: [PATCH 2/3] Support libvirt's new channel path naming scheme
libvirt commit 8abc979bb0 changed the channel path naming scheme from
domain-<id>-<name> to <id>-<name>. Change the logic searching for channels
to work with either scheme.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
vhostmd/virtio.c | 49 +++++++++++++++++++++++++-----------------------
1 file changed, 26 insertions(+), 23 deletions(-)
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
index d2d07bf..4516b1f 100644
--- a/vhostmd/virtio.c
+++ b/vhostmd/virtio.c
@@ -277,34 +277,37 @@ static int vio_readdir(const char * path)
}
while ((ent = readdir(dir)) != NULL) {
- int rc, id;
+ char tmp[SUN_PATH_LEN + 8];
+ struct stat st;
+ char *name = NULL;
+ int id = -1;
+ int rc;
+ channel_t *c = NULL;
- if (sscanf(ent->d_name, "domain-%d-", &id) == 1) {
+ if (sscanf(ent->d_name, "domain-%d-", &id) == 1)
+ name = strchr(&(ent->d_name[strlen("domain-")]), '-');
+ else if (sscanf(ent->d_name, "%d-", &id) == 1)
+ name = strchr(ent->d_name, '-');
+ else
+ continue;
- char tmp[SUN_PATH_LEN + 8];
- struct stat st;
+ rc = snprintf(tmp, sizeof(tmp), "%s/%s/%s", path, ent->d_name, channel_name);
- rc = snprintf(tmp, sizeof(tmp), "%s/%s/%s", path, ent->d_name, channel_name);
+ if (rc > 0 && rc < (int) sizeof(tmp) &&
+ strlen(tmp) < SUN_PATH_LEN &&
+ stat(tmp, &st) == 0 &&
+ S_ISSOCK(st.st_mode)) {
- if (rc > 0 && rc < (int) sizeof(tmp) &&
- strlen(tmp) < SUN_PATH_LEN &&
- stat(tmp, &st) == 0 &&
- S_ISSOCK(st.st_mode)) {
+ pthread_mutex_lock(&channel_mtx);
+ c = vio_channel_find(id, name, 0);
+ pthread_mutex_unlock(&channel_mtx);
- channel_t *c = NULL;
- const char *name = strchr(&(ent->d_name[strlen("domain-")]), '-');
-
- pthread_mutex_lock(&channel_mtx);
- c = vio_channel_find(id, name, 0);
- pthread_mutex_unlock(&channel_mtx);
-
- if (c && c->fd == FREE) {
- c->uds_name = strdup(tmp);
- if (c->uds_name == NULL)
- goto error;
- if (vio_channel_open(c))
- goto error;
- }
+ if (c && c->fd == FREE) {
+ c->uds_name = strdup(tmp);
+ if (c->uds_name == NULL)
+ goto error;
+ if (vio_channel_open(c))
+ goto error;
}
}
}
--
2.35.3
++++++ 5a04b594-Add-channel_path-setting.patch ++++++
From 5a04b59495490bf921c661ff95754ea9955e7cd4 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig(a)suse.com>
Date: Fri, 27 Sep 2024 09:20:52 -0600
Subject: [PATCH 1/3] Add channel_path setting to daemon config file
libvirt commit 8abc979b moved the target path for channel devices.
To accommodate libvirt deployments with and without that commit,
allow specifying the path in the daemon configuration file.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
README | 3 +++
include/virtio.h | 2 +-
vhostmd.dtd | 3 ++-
vhostmd.xml | 1 +
vhostmd/vhostmd.c | 12 ++++++++++--
vhostmd/virtio.c | 5 +++--
6 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/README b/README
index 579acd5..2ff7e8b 100644
--- a/README
+++ b/README
@@ -51,6 +51,7 @@ includes a few examples of user-defined metrics, which provide a
<size unit="k">256</size>
</disk>
<virtio>
+ <channel_path>/var/run/libvirt/qemu/channel</channel_path>
<max_channels>1024</max_channels>
<expiration_time>15</expiration_time>
</virtio>
@@ -300,6 +301,8 @@ between the host and VMs. Basically for a virtio serial device, QEMU creates
- 'connects' both to a 'communication channel'
It can be configured in the virtio section of the vhostmd configuration file.
+<channel_path> defines a path on the host where QEMU creates the unix domain
+sockets.
<max_channels> defines the maximum number of virtio channels/VMs supported
by the vhostmd instance with a default value of 1024.
<expiration_time> is the time after which the virtio serial channel of a VM
diff --git a/include/virtio.h b/include/virtio.h
index 1ff31a2..962adea 100644
--- a/include/virtio.h
+++ b/include/virtio.h
@@ -24,7 +24,7 @@
/*
* Initialize virtio layer
*/
-int virtio_init(int max_channel, int expiration_period);
+int virtio_init(char *channel_path, int max_channel, int expiration_period);
/*
* Main virtio function
diff --git a/vhostmd.dtd b/vhostmd.dtd
index 6c159dd..045860d 100644
--- a/vhostmd.dtd
+++ b/vhostmd.dtd
@@ -20,7 +20,8 @@ Virtual Host Metrics Daemon (vhostmd). Configuration file DTD
<!ELEMENT update_period (#PCDATA)>
<!ELEMENT transport (#PCDATA)>
-<!ELEMENT virtio (max_channels,expiration_time)>
+<!ELEMENT virtio (channel_path,max_channels,expiration_time)>
+<!ELEMENT channel_path (#PCDATA)>
<!ELEMENT max_channels (#PCDATA)>
<!ELEMENT expiration_time (#PCDATA)>
diff --git a/vhostmd.xml b/vhostmd.xml
index 5c88d8c..0dff85d 100644
--- a/vhostmd.xml
+++ b/vhostmd.xml
@@ -34,6 +34,7 @@ the logical && operator must be replaced with "&&".
<size unit="k">256</size>
</disk>
<virtio>
+ <channel_path>/var/run/libvirt/qemu/channel</channel_path>
<max_channels>1024</max_channels>
<expiration_time>15</expiration_time>
</virtio>
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 4426faf..88e89ac 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -105,6 +105,7 @@ static mdisk_header md_header =
};
static char *search_path = NULL;
static int transports = 0;
+static char *virtio_channel_path = NULL;
static int virtio_max_channels = 1024;
static int virtio_expiration_time = 15;
@@ -623,7 +624,14 @@ static int parse_config_file(const char *filename)
}
if (transports & VIRTIO) {
- if (vu_xpath_long("string(./globals/virtio/max_channels[1])", ctxt, &l) == 0)
+ virtio_channel_path = vu_xpath_string("string(./globals/virtio/channel_path[1])", ctxt);
+ if (virtio_channel_path == NULL) {
+ virtio_channel_path = strdup("/var/lib/libvirt/qemu/channel/target");
+ if (virtio_channel_path == NULL)
+ goto out;
+ }
+
+ if (vu_xpath_long("string(./globals/virtio/max_channels[1])", ctxt, &l) == 0)
virtio_max_channels = (int)l;
if (vu_xpath_long("string(./globals/virtio/expiration_time[1])", ctxt, &l) == 0)
@@ -980,7 +988,7 @@ static int vhostmd_run(int diskfd)
if (virtio_expiration_time < (update_period * 3))
virtio_expiration_time = update_period * 3;
- if (virtio_init(virtio_max_channels, virtio_expiration_time)) {
+ if (virtio_init(virtio_channel_path, virtio_max_channels, virtio_expiration_time)) {
vu_buffer_delete(buf);
return -1;
}
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
index 98340ce..d2d07bf 100644
--- a/vhostmd/virtio.c
+++ b/vhostmd/virtio.c
@@ -68,7 +68,7 @@ static channel_t *channel = NULL;
static id_map_t *id_map = NULL;
static time_t exp_period = 0;
-static const char *channel_path = "/var/lib/libvirt/qemu/channel/target";
+static const char *channel_path = NULL;
static const char *channel_name = "org.github.vhostmd.1";
static int channel_max = 0;
static volatile int channel_count = 0;
@@ -572,13 +572,14 @@ static void vio_handle_io(unsigned epoll_wait_ms)
* Once the channel is added to epoll the vu_buffer can be accessed
* by the epoll_event.data.ptr.
*/
-int virtio_init(int _max_channel, int _expiration_period)
+int virtio_init(char *_channel_path, int _max_channel, int _expiration_period)
{
int i;
if (virtio_status == VIRTIO_INIT) {
pthread_mutex_init(&channel_mtx, NULL);
+ channel_path = _channel_path;
channel_max = _max_channel;
exp_period = _expiration_period;
channel_count = 0;
--
2.35.3
++++++ 9d282891-Fix-parsing-of-vmstat-output.patch ++++++
From 9d282891eaaeebf1b94c67314d97e55a0b58d9c2 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig(a)suse.com>
Date: Fri, 27 Sep 2024 13:25:58 -0600
Subject: [PATCH 3/3] Fix parsing of vmstat output
The output of `vmstat -s`, which is used to calculate the Paged{In,Out}Memory
metrics, changed from "pages paged {in,out}" to "K paged {in,out}" in procps4.
Change the associated actions to match against the new output.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
vhostmd.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/vhostmd.xml b/vhostmd.xml
index 0dff85d..c957d1d 100644
--- a/vhostmd.xml
+++ b/vhostmd.xml
@@ -98,13 +98,13 @@ the logical && operator must be replaced with "&&".
<metric type="uint64" context="host">
<name>PagedInMemory</name>
<action>
- vmstat -s | awk '/pages paged in/ {printf "%d\n", $1 / 1024 * $(getconf PAGESIZE) / 1024;}'
+ vmstat -s | awk '/K paged in/ {printf "%d\n", $1;}'
</action>
</metric>
<metric type="uint64" context="host">
<name>PagedOutMemory</name>
<action>
- vmstat -s | awk '/pages paged out/ {printf "%d\n", $1 / 1024 * $(getconf PAGESIZE) / 1024;}'
+ vmstat -s | awk '/K paged out/ {printf "%d\n", $1;}'
</action>
</metric>
<metric type="group" context="host">
--
2.35.3
1
0