From 938b7421c4f055e6dbcf466d6297f545672daa95 Mon Sep 17 00:00:00 2001 From: Remington Campbell Date: Fri, 17 Jul 2020 15:47:45 -0700 Subject: [PATCH 1/4] Revert "Revert "Release v1.0.12"" --- src/cisco_gnmi/__init__.py | 2 +- src/cisco_gnmi/cli.py | 8 ++++++++ src/cisco_gnmi/client.py | 3 ++- src/cisco_gnmi/nx.py | 3 ++- src/cisco_gnmi/xe.py | 5 +++-- src/cisco_gnmi/xr.py | 8 +++++--- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/cisco_gnmi/__init__.py b/src/cisco_gnmi/__init__.py index e0105ed..cb511de 100644 --- a/src/cisco_gnmi/__init__.py +++ b/src/cisco_gnmi/__init__.py @@ -30,4 +30,4 @@ from .xe import XEClient from .builder import ClientBuilder -__version__ = "1.0.11" +__version__ = "1.0.12" diff --git a/src/cisco_gnmi/cli.py b/src/cisco_gnmi/cli.py index bacfa8d..0ef42ab 100644 --- a/src/cisco_gnmi/cli.py +++ b/src/cisco_gnmi/cli.py @@ -113,6 +113,12 @@ def gnmi_subscribe(): default="SAMPLE", choices=proto.gnmi_pb2.SubscriptionMode.keys(), ) + parser.add_argument( + "-req_mode", + help="SubscriptionList.Mode mode for Subscriptions. Defaults to STREAM.", + default="STREAM", + choices=proto.gnmi_pb2.SubscriptionList.Mode.keys(), + ) parser.add_argument( "-suppress_redundant", help="Suppress redundant information in Subscription.", @@ -159,6 +165,8 @@ def gnmi_subscribe(): kwargs["sample_interval"] = args.interval * int(1e9) if args.mode: kwargs["sub_mode"] = args.mode + if args.req_mode: + kwargs["request_mode"] = args.req_mode if args.suppress_redundant: kwargs["suppress_redundant"] = args.suppress_redundant if args.heartbeat_interval: diff --git a/src/cisco_gnmi/client.py b/src/cisco_gnmi/client.py index 97949c0..add0b50 100755 --- a/src/cisco_gnmi/client.py +++ b/src/cisco_gnmi/client.py @@ -408,7 +408,8 @@ def subscribe_xpaths( subscription_list.subscription.extend(subscriptions) return self.subscribe([subscription_list]) - def parse_xpath_to_gnmi_path(self, xpath, origin=None): + @classmethod + def parse_xpath_to_gnmi_path(cls, xpath, origin=None): """Parses an XPath to proto.gnmi_pb2.Path. This function should be overridden by any child classes for origin logic. diff --git a/src/cisco_gnmi/nx.py b/src/cisco_gnmi/nx.py index 182b31e..1bd7271 100644 --- a/src/cisco_gnmi/nx.py +++ b/src/cisco_gnmi/nx.py @@ -289,7 +289,8 @@ def subscribe_xpaths( heartbeat_interval, ) - def parse_xpath_to_gnmi_path(self, xpath, origin=None): + @classmethod + def parse_xpath_to_gnmi_path(cls, xpath, origin=None): """Attempts to determine whether origin should be YANG (device) or DME. """ if origin is None: diff --git a/src/cisco_gnmi/xe.py b/src/cisco_gnmi/xe.py index 139f9cd..5b06d74 100644 --- a/src/cisco_gnmi/xe.py +++ b/src/cisco_gnmi/xe.py @@ -312,7 +312,8 @@ def subscribe_xpaths( prefix ) - def parse_xpath_to_gnmi_path(self, xpath, origin=None): + @classmethod + def parse_xpath_to_gnmi_path(cls, xpath, origin=None): """Naively tries to intelligently (non-sequitur!) origin Otherwise assume rfc7951 legacy is not considered @@ -323,4 +324,4 @@ def parse_xpath_to_gnmi_path(self, xpath, origin=None): origin = "openconfig" else: origin = "rfc7951" - return super(XEClient, self).parse_xpath_to_gnmi_path(xpath, origin) + return super(XEClient, cls).parse_xpath_to_gnmi_path(xpath, origin) diff --git a/src/cisco_gnmi/xr.py b/src/cisco_gnmi/xr.py index e7cfb4d..c55d6e4 100644 --- a/src/cisco_gnmi/xr.py +++ b/src/cisco_gnmi/xr.py @@ -338,7 +338,8 @@ def subscribe_xpaths( heartbeat_interval, ) - def parse_xpath_to_gnmi_path(self, xpath, origin=None): + @classmethod + def parse_xpath_to_gnmi_path(cls, xpath, origin=None): """No origin specified implies openconfig Otherwise origin is expected to be the module name """ @@ -351,9 +352,10 @@ def parse_xpath_to_gnmi_path(self, xpath, origin=None): # module name origin, xpath = xpath.split(":", 1) origin = origin.strip("/") - return super(XRClient, self).parse_xpath_to_gnmi_path(xpath, origin) + return super(XRClient, cls).parse_xpath_to_gnmi_path(xpath, origin) - def parse_cli_to_gnmi_path(self, command): + @classmethod + def parse_cli_to_gnmi_path(cls, command): """Parses a CLI command to proto.gnmi_pb2.Path. IOS XR appears to be the only OS with this functionality. From b3182a2f2a0546f7045b974d9dff4a3c776daf27 Mon Sep 17 00:00:00 2001 From: Remington Campbell Date: Fri, 17 Jul 2020 15:50:29 -0700 Subject: [PATCH 2/4] NX wrapper use classmethod appropriately --- src/cisco_gnmi/nx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cisco_gnmi/nx.py b/src/cisco_gnmi/nx.py index 1bd7271..d86b879 100644 --- a/src/cisco_gnmi/nx.py +++ b/src/cisco_gnmi/nx.py @@ -306,4 +306,4 @@ def parse_xpath_to_gnmi_path(cls, xpath, origin=None): xpath = xpath.split(":", 1)[1] else: origin = "openconfig" - return super(NXClient, self).parse_xpath_to_gnmi_path(xpath, origin) + return super(NXClient, cls).parse_xpath_to_gnmi_path(xpath, origin) From 0a8100608326c6c91fddd4d824ef1145a95d7c94 Mon Sep 17 00:00:00 2001 From: Remington Campbell Date: Fri, 17 Jul 2020 15:50:56 -0700 Subject: [PATCH 3/4] Formatting hygiene --- src/cisco_gnmi/client.py | 2 +- src/cisco_gnmi/nx.py | 23 +++++++++++++++++------ src/cisco_gnmi/xe.py | 4 ++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/cisco_gnmi/client.py b/src/cisco_gnmi/client.py index add0b50..8a32b3c 100755 --- a/src/cisco_gnmi/client.py +++ b/src/cisco_gnmi/client.py @@ -277,7 +277,7 @@ def subscribe_xpaths( sample_interval=_NS_IN_S * 10, suppress_redundant=False, heartbeat_interval=None, - prefix=None + prefix=None, ): """A convenience wrapper of subscribe() which aids in building of SubscriptionRequest with request as subscribe SubscriptionList. This method accepts an iterable of simply xpath strings, diff --git a/src/cisco_gnmi/nx.py b/src/cisco_gnmi/nx.py index d86b879..7aa3655 100644 --- a/src/cisco_gnmi/nx.py +++ b/src/cisco_gnmi/nx.py @@ -56,6 +56,7 @@ class NXClient(Client): >>> capabilities = client.capabilities() >>> print(capabilities) """ + def delete_xpaths(self, xpaths, prefix=None): """A convenience wrapper for set() which constructs Paths from supplied xpaths to be passed to set() as the delete parameter. @@ -90,7 +91,13 @@ def delete_xpaths(self, xpaths, prefix=None): paths.append(self.parse_xpath_to_gnmi_path(xpath)) return self.set(deletes=paths) - def set_json(self, update_json_configs=None, replace_json_configs=None, ietf=False, prefix=None): + def set_json( + self, + update_json_configs=None, + replace_json_configs=None, + ietf=False, + prefix=None, + ): """A convenience wrapper for set() which assumes JSON payloads and constructs desired messages. All parameters are optional, but at least one must be present. @@ -295,11 +302,15 @@ def parse_xpath_to_gnmi_path(cls, xpath, origin=None): """ if origin is None: if any( - map(xpath.startswith, [ - "Cisco-NX-OS-device", - "/Cisco-NX-OS-device", - "cisco-nx-os-device", - "/cisco-nx-os-device"]) + map( + xpath.startswith, + [ + "Cisco-NX-OS-device", + "/Cisco-NX-OS-device", + "cisco-nx-os-device", + "/cisco-nx-os-device", + ], + ) ): origin = "device" # Remove the module diff --git a/src/cisco_gnmi/xe.py b/src/cisco_gnmi/xe.py index 5b06d74..3f63077 100644 --- a/src/cisco_gnmi/xe.py +++ b/src/cisco_gnmi/xe.py @@ -230,7 +230,7 @@ def subscribe_xpaths( sample_interval=Client._NS_IN_S * 10, suppress_redundant=False, heartbeat_interval=None, - prefix=None + prefix=None, ): """A convenience wrapper of subscribe() which aids in building of SubscriptionRequest with request as subscribe SubscriptionList. This method accepts an iterable of simply xpath strings, @@ -309,7 +309,7 @@ def subscribe_xpaths( sample_interval, suppress_redundant, heartbeat_interval, - prefix + prefix, ) @classmethod From a8f59bf0f02466bd3b03efc44124dc1ad1de9e77 Mon Sep 17 00:00:00 2001 From: Remington Campbell Date: Fri, 17 Jul 2020 15:55:44 -0700 Subject: [PATCH 4/4] v1.0.13 --- src/cisco_gnmi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cisco_gnmi/__init__.py b/src/cisco_gnmi/__init__.py index cb511de..aa9fe07 100644 --- a/src/cisco_gnmi/__init__.py +++ b/src/cisco_gnmi/__init__.py @@ -30,4 +30,4 @@ from .xe import XEClient from .builder import ClientBuilder -__version__ = "1.0.12" +__version__ = "1.0.13"