def test_cscript_conf_return_none(self, dev_handler): dev_handler.side_effects = ValueError op = cscript_conf(self._read_file('get-configuration.xml')) self.assertTrue(op is None)
def test_cscript_conf(self): op = cscript_conf(self._read_file('get-configuration.xml')) self.assertTrue(isinstance(op, etree._Element))
def get(self, *vargs, **kvargs): """ Retrieve configuration data for this table. By default all child keys of the table are loaded. This behavior can be overridden by with kvargs['nameonly']=True :param str vargs[0]: identifies a unique item in the table, same as calling with :kvargs['key']: value :param str namesonly: *OPTIONAL* True/False*, when set to True will cause only the the name-keys to be retrieved. :param str key: *OPTIONAL* identifies a unique item in the table :param dict options: *OPTIONAL* options to pass to get-configuration. By default {'inherit': 'inherit', 'groups': 'groups'} is sent. """ if self._lxml is not None: return self if self._path is not None: # for loading from local file-path self.xml = etree.parse(self._path).getroot() return self if self.keys_required is True and not len(kvargs): raise ValueError("This table has required-keys\n", self.required_keys) self._clearkeys() # determine if we need to get only the names of keys, or all of the # hierarchical data from the config. The caller can explicitly set # :namesonly: in the call. if "namesonly" in kvargs: namesonly = kvargs.get("namesonly") else: namesonly = False get_cmd = self._buildxml(namesonly=namesonly) # if this table requires additional keys, for the hierarchical # use-cases then make sure these are provided by the caller. Then # encode them into the 'get-cmd' XML if self.keys_required is True: self._encode_requiredkeys(get_cmd, kvargs) try: # see if the caller provided a named item. this must # be an actual name of a thing, and not an index number. # ... at least for now ... named_item = kvargs.get("key") or vargs[0] dot = get_cmd.find(self._data_dict[self._type]) self._encode_namekey(get_cmd, dot, named_item) if "get_fields" in self._data_dict: self._encode_getfields(get_cmd, dot) except: # caller not requesting a specific table item pass # Check for options in get if "options" in kvargs: options = kvargs.get("options") or {} else: if self._options is not None: options = self._options else: options = jxml.INHERIT_GROUPS # for debug purposes self._get_cmd = get_cmd self._get_opt = options # retrieve the XML configuration # Check to see if running on box if self._dev.ON_JUNOS: try: from junos import Junos_Configuration # If part of commit script use the context if Junos_Configuration is not None: # Convert the onbox XML to ncclient reply config = jxml.conf_transform( deepcopy(jxml.cscript_conf(Junos_Configuration)), subSelectionXPath=self._get_xpath, ) self.xml = config.getroot() else: self.xml = self.RPC.get_config(get_cmd, options=options) # If onbox import missing fallback to RPC - possibly raise # exception in future except ImportError: self.xml = self.RPC.get_config(get_cmd, options=options) else: self.xml = self.RPC.get_config(get_cmd, options=options) # return self for call-chaining, yo! return self
def get(self, *vargs, **kvargs): """ Retrieve configuration data for this table. By default all child keys of the table are loaded. This behavior can be overridden by with kvargs['nameonly']=True :param str vargs[0]: identifies a unique item in the table, same as calling with :kvargs['key']: value :param str namesonly: *OPTIONAL* True/False*, when set to True will cause only the the name-keys to be retrieved. :param str key: *OPTIONAL* identifies a unique item in the table :param dict options: *OPTIONAL* options to pass to get-configuration. By default {'inherit': 'inherit', 'groups': 'groups'} is sent. """ if self._lxml is not None: return self if self._path is not None: # for loading from local file-path self.xml = etree.parse(self._path).getroot() return self if self.keys_required is True and not len(kvargs): raise ValueError( "This table has required-keys\n", self.required_keys) self._clearkeys() # determine if we need to get only the names of keys, or all of the # hierarchical data from the config. The caller can explicitly set # :namesonly: in the call. if 'namesonly' in kvargs: namesonly = kvargs.get('namesonly') else: namesonly = False get_cmd = self._buildxml(namesonly=namesonly) # if this table requires additional keys, for the hierarchical # use-cases then make sure these are provided by the caller. Then # encode them into the 'get-cmd' XML if self.keys_required is True: self._encode_requiredkeys(get_cmd, kvargs) try: # see if the caller provided a named item. this must # be an actual name of a thing, and not an index number. # ... at least for now ... named_item = kvargs.get('key') or vargs[0] dot = get_cmd.find(self._data_dict[self._type]) self._encode_namekey(get_cmd, dot, named_item) if 'get_fields' in self._data_dict: self._encode_getfields(get_cmd, dot) except: # caller not requesting a specific table item pass # Check for options in get if 'options' in kvargs: options = kvargs.get('options') or {} else: if self._options is not None: options = self._options else: options = jxml.INHERIT_GROUPS # for debug purposes self._get_cmd = get_cmd self._get_opt = options # retrieve the XML configuration # Check to see if running on box if self._dev.ON_JUNOS: try: from junos import Junos_Configuration # If part of commit script use the context if Junos_Configuration is not None: # Convert the onbox XML to ncclient reply config = jxml.conf_transform( deepcopy(jxml.cscript_conf(Junos_Configuration)), subSelectionXPath=self._get_xpath ) self.xml = config.getroot() else: self.xml = self.RPC.get_config(get_cmd, options=options) # If onbox import missing fallback to RPC - possibly raise # exception in future except ImportError: self.xml = self.RPC.get_config(get_cmd, options=options) else: self.xml = self.RPC.get_config(get_cmd, options=options) # return self for call-chaining, yo! return self