Skip to content

Commit 9934b2f

Browse files
Merge pull request #369 from networktocode/release-2.3.0
Release 2.3.0
2 parents 6aaeaaf + 5a65c5d commit 9934b2f

19 files changed

Lines changed: 2473 additions & 51 deletions
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
# v2.3 Release Notes
3+
4+
This document describes all new features and changes in the release. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5+
6+
## Release Overview
7+
8+
- Added the ability to for remote file copy on Cisco NXOS, Cisco ASA, and Arista EOS operating systems.
9+
10+
## [v2.3.0 (2026-04-14)](https://github.com/networktocode/pyntc/releases/tag/v2.3.0)
11+
12+
### Added
13+
14+
- [#365](https://github.com/networktocode/pyntc/issues/365) - Added the remote file copy feature to Arista EOS devices.
15+
- [#365](https://github.com/networktocode/pyntc/issues/365) - Added unittests for remote file copy on Arista EOS devices.
16+
- [#366](https://github.com/networktocode/pyntc/issues/366) - Added ``remote_file_copy``, ``check_file_exists``, ``get_remote_checksum``, and ``verify_file`` support for ``ASADevice`` (FTP, TFTP, SCP, HTTP, HTTPS).
17+
- [#367](https://github.com/networktocode/pyntc/issues/367) - Added remote file copy feature to Cisco NXOS devices.
18+
- [#367](https://github.com/networktocode/pyntc/issues/367) - Added unittests for remote file copy for Cisco NXOS devices.
19+
20+
### Changed
21+
22+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Improved EOS remote file copy to validate scheme and query strings before connecting, use `clean_url` to prevent credential leakage, and simplify credential routing.
23+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Changed copy command builders to include the source file path in the URL and use `flash:` as the destination, matching EOS CLI conventions.
24+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Fixed `_uptime_to_string` to use integer division, preventing `ValueError` on format specifiers.
25+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Fixed `check_file_exists` and `get_remote_checksum` to open the SSH connection before use, preventing `AttributeError` when called standalone.
26+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Fixed password-prompt handling in `remote_file_copy` to wait for the transfer to complete before proceeding to verification.
27+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Simplified checksum parsing in `get_remote_checksum` to use string splitting instead of regex.
28+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Changed `verify_file` to return early when file does not exist and use case-insensitive checksum comparison.
29+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Removed `include_username` parameter from `remote_file_copy` in favor of automatic credential routing based on scheme and username presence.
30+
31+
### Removed
32+
33+
- [#364](https://github.com/networktocode/pyntc/issues/364) - Removed log.init from iosxewlc device.
34+
- [#364](https://github.com/networktocode/pyntc/issues/364) - Removed warning filter for logging.
35+
36+
### Fixed
37+
38+
- [#366](https://github.com/networktocode/pyntc/issues/366) - Fixed ``ASADevice._get_file_system`` to use ``re.search`` instead of ``re.match`` so the filesystem label is correctly parsed regardless of leading whitespace in ``dir`` output.
39+
- [#366](https://github.com/networktocode/pyntc/issues/366) - Fixed ``ASADevice._send_command`` to anchor the ``%`` error pattern to the start of a line (``^% ``) to prevent false-positive ``CommandError`` raises during file copy operations.
40+
- [#366](https://github.com/networktocode/pyntc/issues/366) - Fixed ``ASADevice.active_redundancy_states`` to include ``"disabled"`` so standalone (non-failover) units are correctly treated as active.
41+
42+
### Housekeeping
43+
44+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Converted EOS remote file copy tests from hypothesis/pytest standalone functions to unittest TestCase with `self.assertRaises` and `subTest` for consistency with the rest of the codebase.
45+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Removed duplicate test class `TestRemoteFileCopyCommandExecution` and consolidated into `TestRemoteFileCopy`.
46+
- [#368](https://github.com/networktocode/pyntc/issues/368) - Added integration tests for EOS device connectivity and remote file copy across FTP, TFTP, SCP, HTTP, HTTPS, and SFTP protocols.

docs/user/lib_getting_started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ interface GigabitEthernet1
252252

253253
#### Remote File Copy (Download to Device)
254254

255-
Some devices support copying files directly from a URL to the device. This is useful for larger files like OS images. To do this, you need to use the `FileCopyModel` data model to specify the source file information and then pass that to the `remote_file_copy` method. Currently only supported on Cisco IOS and Juniper Junos devices. Tested with ftp, http, https, sftp, and tftp urls.
255+
Some devices support copying files directly from a URL to the device. This is useful for large files like OS images. To do this, you need to use the `FileCopyModel` data model to specify the source file information and then pass that to the `remote_file_copy` method. The model is currently supported on Arista EOS, Cisco ASA, Cisco IOS, Cisco NXOS, and Juniper Junos devices. It has been tested with ftp, http, https, sftp, and tftp urls.
256256

257257
- `remote_file_copy` method
258258

mkdocs.yml

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,19 @@ nav:
132132
- Uninstall: "admin/uninstall.md"
133133
- Release Notes:
134134
- "admin/release_notes/index.md"
135-
- v0.0: "admin/release_notes/version_0.0.md"
136-
- v0.14: "admin/release_notes/version_0.14.md"
137-
- v0.15: "admin/release_notes/version_0.15.md"
138-
- v0.16: "admin/release_notes/version_0.16.md"
139-
- v0.17: "admin/release_notes/version_0.17.md"
140-
- v0.18: "admin/release_notes/version_0.18.md"
141-
- v0.19: "admin/release_notes/version_0.19.md"
142-
- v0.20: "admin/release_notes/version_0.20.md"
143-
- v1.0: "admin/release_notes/version_1.0.md"
144-
- v2.0: "admin/release_notes/version_2.0.md"
145-
- v2.1: "admin/release_notes/version_2.1.md"
135+
- v2.3: "admin/release_notes/version_2.3.md"
146136
- v2.2: "admin/release_notes/version_2.2.md"
137+
- v2.1: "admin/release_notes/version_2.1.md"
138+
- v2.0: "admin/release_notes/version_2.0.md"
139+
- v1.0: "admin/release_notes/version_1.0.md"
140+
- v0.20: "admin/release_notes/version_0.20.md"
141+
- v0.19: "admin/release_notes/version_0.19.md"
142+
- v0.18: "admin/release_notes/version_0.18.md"
143+
- v0.17: "admin/release_notes/version_0.17.md"
144+
- v0.16: "admin/release_notes/version_0.16.md"
145+
- v0.15: "admin/release_notes/version_0.15.md"
146+
- v0.14: "admin/release_notes/version_0.14.md"
147+
- v0.0: "admin/release_notes/version_0.0.md"
147148
- Developer Guide:
148149
- Extending the Library: "dev/extending.md"
149150
- Contributing to the Library: "dev/contributing.md"

poetry.lock

Lines changed: 49 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyntc/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"""Kickoff functions for getting instance of device objects."""
22

33
import os
4-
import warnings
54
from importlib import metadata
65

76
from .devices import supported_devices
@@ -23,9 +22,6 @@
2322
LIB_PATH_DEFAULT = "~/.ntc.conf"
2423

2524

26-
warnings.simplefilter("default")
27-
28-
2925
def ntc_device(device_type, *args, **kwargs):
3026
"""
3127
Instantiate an instance of a ``pyntc.devices.BaseDevice`` by ``device_type``.

0 commit comments

Comments
 (0)