Conversation
The setuptools-scm 10.0.2 sdist contains a pyproject.toml with a backend-path entry (../vcs-versioning/src) that points outside its own source tree — a developer's local monorepo path that was accidentally shipped in the release. pip 25.2 now validates that backend-path entries stay inside the source tree and rejects it. The wheel is fine since it bypasses pyproject.toml processing entirely.
`lxml` → requirements/base.txt: added lxml>=5.0.0; sys_platform != 'win32' (no cp312 wheels before 5.0.0)
`ncclient` → requirements/static/ci/common.in: added ncclient>=0.6.16; sys_platform != 'win32' (SafeConfigParser removed in Python 3.12)
`pygit2` → requirements/static/ci/{linux,darwin,windows}.in: bumped >=1.10.1 → >=1.14.0 (no cp312 wheels before 1.14.0)
…distutils, utcnow Agent-Logs-Url: https://github.com/saltstack/salt/sessions/8d432548-1f18-44b2-9fea-496226ca1f79 Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
…Subset, distutils, and utcnow Agent-Logs-Url: https://github.com/saltstack/salt/sessions/8d432548-1f18-44b2-9fea-496226ca1f79 Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
…ls, utcnow Agent-Logs-Url: https://github.com/saltstack/salt/sessions/2589ab85-0b14-4b58-a74b-0e3c226cb53d Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
…ypp_plugins.py, test_pip.py) Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
…d-pip test cases Agent-Logs-Url: https://github.com/saltstack/salt/sessions/ac7d00ce-330f-49d8-83c6-e7fcd6f5ed69 Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/saltstack/salt/sessions/186b30f6-8024-4036-af58-06e11835d7bb Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
- tests/unit/test_zypp_plugins.py: replace `import imp` (removed in Python 3.12) with `importlib.util`, and replace `imp.load_source()` with `spec_from_file_location` + `module_from_spec` + `exec_module` - salt/modules/virtualenv_mod.py: fix `get_distribution_path` to use `importlib.metadata` instead of `pkg_resources`; old setuptools references `pkgutil.ImpImporter` which was removed in Python 3.12 - salt/utils/versions.py: replace `datetime.utcnow()` (deprecated in Python 3.12) with `datetime.now(datetime.timezone.utc)` to eliminate the DeprecationWarning that breaks test_deprecation_warnings[env0-False] Agent-Logs-Url: https://github.com/saltstack/salt/sessions/80a13379-dae2-4c51-bff3-d9e06c170f4b Co-authored-by: dwoz <1527763+dwoz@users.noreply.github.com>
Replace deprecated datetime.utcnow() calls with a compatibility function that uses datetime.now(timezone.utc) for Python 3.12+ and falls back to datetime.utcnow() for older versions. Also fix zeromq test that failed due to accessing uninitialized socket object by calling _init_socket() before socket access. Changes: - Add salt.utils.timeutil.utcnow() compatibility function - Replace all datetime.utcnow() calls across salt modules - Fix test_request_client_send_recv_loop_closed socket initialization
Use named argument format to avoid duplicate 'distribution' parameter in string formatting.
Replace datetime.datetime.utcnow() calls in transport_ssl.py test fixtures with salt.utils.timeutil.utcnow() to avoid deprecation warnings in Python 3.12+.
Replace remaining datetime.utcnow() calls in test files with salt.utils.timeutil.utcnow() to avoid deprecation errors when RAISE_DEPRECATIONS_RUNTIME_ERRORS=1 in Python 3.12+. Fixed files: - tests/pytests/functional/modules/test_system.py (8 occurrences) - tests/pytests/unit/test_fileserver.py (1 occurrence) - tests/pytests/unit/utils/test_aws.py (7 occurrences) - tests/unit/modules/test_x509.py (3 occurrences)
In Python 3.12, importlib.util.spec_from_file_location() returns None for files without .py extension when it cannot infer the loader. The zyppnotify file lacks a .py extension, causing the spec to be None and resulting in AttributeError when trying to access spec.loader. Fix by explicitly using importlib.machinery.SourceFileLoader to create the spec, which works regardless of file extension.
1. Fix datetime.utcnow() to return naive datetime
- pytz.localize() requires naive datetime objects
- Updated utcnow() wrapper to strip timezone info for compatibility
2. Add datetime.utcfromtimestamp() wrapper
- Deprecated in Python 3.12
- Created utcfromtimestamp() in salt.utils.timeutil
- Replaced all usages in salt/modules/: status, rpm_lowpkg, dpkg_lowpkg, aptpkg
- Fixed test file: tests/pytests/unit/states/file/test_tidied.py
- Removed unused datetime imports
3. Fix boto3 test collection error on Windows
- tests/unit/utils/test_boto3mod.py was accessing boto3.__version__
even when boto3 not installed, causing NameError
- Added HAS_BOTO3 check to version comparison skipif decorator
Use grains.get() with default value of 0 instead of direct dictionary access to handle cases where osmajorrelease grain is not available. Fixes test_owner and test_which failures on systems without osmajorrelease.
Ensure VirtualEnv test helper uses pip>=23.2 on Python 3.12+ to avoid distutils import errors. Old pip versions try to import the distutils module which was removed in Python 3.12. This fixes test_pip_installed_pkgs_test_mode and other virtualenv-based tests that were failing with "ModuleNotFoundError: No module named 'distutils'".
The legacy git code path in winrepo.update_git_repos() was storing result["result"] (a boolean) instead of the target directory path. This caused tests to fail with AttributeError when calling .endswith() on the boolean value. Changed to store gittarget (the actual path) to match the behavior of the non-legacy gitfs code and what tests expect. Fixes test_update_git_repos when GitPython/Pygit2 are not installed.
The backports module is not available in Python 3.12+ environments, even though sys.version_info < (3, 13) evaluates to True. The test was expecting backports to be included in thin.get_tops() output based solely on Python version, but salt/utils/thin.py correctly sets backports=None when the import fails. Fixed by checking salt.utils.thin.backports is not None instead of sys.version_info < (3, 13), matching the pattern used for has_immutables. Fixes test_get_tops, test_get_tops_extra_mods, and test_get_tops_so_mods on Python 3.12.
- Update noxfile and requirements for Python 3.12 (multidict, timelib) - Patch TestAccount and sshd_server to skip when privileges/binaries are missing - Fix masterapi KeyError in minion_publish - Resolve test environment crashes in test_config.py and test_saltcheck.py - Align multidict version across all static requirement files
- Update test_pip.py to handle dynamic extras paths (extras-3.12) - Fix path-list handling in extras_pypath fixture - Add skipif for setproctitle check when C-extension is non-functional
| not_after = salt.utils.timeutil.utcnow() | ||
| # And set the UTC timezone to the naive datetime resulting from parsing | ||
| not_after = not_after.replace(tzinfo=M2Crypto.ASN1.UTC) |
There was a problem hiding this comment.
I think these 2 lines should be update to be just
not_after = datetime.now(tzinfo=M2Crypto.ASN1.UTC)and appears to be the case in other 2 places in this file.
| .not_valid_before(salt.utils.timeutil.utcnow()) | ||
| .not_valid_after(salt.utils.timeutil.utcnow() + datetime.timedelta(days=365)) |
There was a problem hiding this comment.
The utcnow calls in this file look like they have no need to use a zoneless datetime and can be replaced with datetime.now(timezone.utc)
| now = salt.utils.timeutil.utcnow() | ||
| future = now + datetime.timedelta(days=365) |
There was a problem hiding this comment.
This looks safe to use datetime.now(timezone.utc)
| secret_access_key = "mock_SecretAccessKey" | ||
| token = "mock_Token" | ||
| expiration = (datetime.utcnow() + timedelta(seconds=900)).strftime( | ||
| expiration = (salt.utils.timeutil.utcnow() + timedelta(seconds=900)).strftime( |
There was a problem hiding this comment.
All the changed usages in this class look safe to use datetime.now(timezone.utc).
| if not __Expiration__ or __Expiration__ < salt.utils.timeutil.utcnow().strftime( | ||
| "%Y-%m-%dT%H:%M:%SZ" | ||
| ): |
There was a problem hiding this comment.
All utcnow changes in this file look like they can safely use datetime.now(timezone.utc)
| formula_def["version"], | ||
| formula_def["release"], | ||
| datetime.datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT"), | ||
| salt.utils.timeutil.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT"), |
There was a problem hiding this comment.
Can safely use datetime.now(timezone.utc)
| time_now = utcnow() | ||
| time_at = time_now + dt |
There was a problem hiding this comment.
This can safely use datetime.now(timezone.utc)
… pip output for Windows debugging
What does this PR do?
What issues does this PR fix or reference?
Fixes
Previous Behavior
Remove this section if not relevant
New Behavior
Remove this section if not relevant
Merge requirements satisfied?
[NOTICE] Bug fixes or features added to Salt require tests.
Commits signed with GPG?
Yes/No