fixing flake8 tests
[osm/RO.git] / RO-SDN-odl_openflow / osm_rosdn_odlof / odl_of.py
index 329cb66..ed1bca4 100644 (file)
@@ -32,12 +32,12 @@ import json
 import requests
 import base64
 import logging
-from osm_ro_plugin.openflow_conn import OpenflowConn, OpenflowConnException, OpenflowConnConnectionException, \
-    OpenflowConnUnexpectedResponse, OpenflowConnAuthException, OpenflowConnNotFoundException, \
-    OpenflowConnConflictException, OpenflowConnNotSupportedException, OpenflowConnNotImplemented
+from osm_ro_plugin.openflow_conn import OpenflowConn, OpenflowConnConnectionException, OpenflowConnUnexpectedResponse
+# OpenflowConnException, OpenflowConnAuthException, OpenflowConnNotFoundException,
+# OpenflowConnConflictException, OpenflowConnNotSupportedException, OpenflowConnNotImplemented
 
 __author__ = "Pablo Montes, Alfonso Tierno"
-__date__  = "$28-oct-2014 12:07:15$"
+__date__ = "$28-oct-2014 12:07:15$"
 
 
 class OfConnOdl(OpenflowConn):
@@ -77,7 +77,7 @@ class OfConnOdl(OpenflowConn):
         self.dpid = str(params["of_dpid"])
         self.id = 'openflow:'+str(int(self.dpid.replace(':', ''), 16))
         if params and params.get("of_user"):
-            of_password=params.get("of_password", "")
+            of_password = params.get("of_password", "")
             self.auth = base64.b64encode(bytes(params["of_user"] + ":" + of_password, "utf-8"))
             self.auth = self.auth.decode()
             self.headers['authorization'] = 'Basic ' + self.auth
@@ -90,7 +90,7 @@ class OfConnOdl(OpenflowConn):
         """
         Obtain a a list of switches or DPID detected by this controller
         :return: list length, and a list where each element a tuple pair (DPID, IP address)
-                 Raise an OpenflowconnConnectionException exception if fails with text_error
+                 Raise an OpenflowConnConnectionException exception if fails with text_error
         """
         try:
             of_response = requests.get(self.url + "restconf/operational/opendaylight-inventory:nodes",
@@ -98,27 +98,27 @@ class OfConnOdl(OpenflowConn):
             error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text)
             if of_response.status_code != 200:
                 self.logger.warning("get_of_switches " + error_text)
-                raise OpenflowconnUnexpectedResponse("Error get_of_switches " + error_text)
+                raise OpenflowConnUnexpectedResponse("Error get_of_switches " + error_text)
 
             self.logger.debug("get_of_switches " + error_text)
             info = of_response.json()
 
             if not isinstance(info, dict):
                 self.logger.error("get_of_switches. Unexpected response, not a dict: %s", str(info))
-                raise OpenflowconnUnexpectedResponse("Unexpected response, not a dict. Wrong version?")
+                raise OpenflowConnUnexpectedResponse("Unexpected response, not a dict. Wrong version?")
 
             nodes = info.get('nodes')
             if type(nodes) is not dict:
                 self.logger.error("get_of_switches. Unexpected response at 'nodes', not found or not a dict: %s",
                                   str(type(info)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes', not found or not a dict."
+                raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes', not found or not a dict."
                                                      " Wrong version?")
 
             node_list = nodes.get('node')
             if type(node_list) is not list:
                 self.logger.error("get_of_switches. Unexpected response, at 'nodes':'node', "
                                   "not found or not a list: %s", str(type(node_list)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response, at 'nodes':'node', not found "
+                raise OpenflowConnUnexpectedResponse("Unexpected response, at 'nodes':'node', not found "
                                                      "or not a list. Wrong version?")
 
             switch_list = []
@@ -127,7 +127,7 @@ class OfConnOdl(OpenflowConn):
                 if node_id is None:
                     self.logger.error("get_of_switches. Unexpected response at 'nodes':'node'[]:'id', not found: %s",
                                       str(node))
-                    raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'id', not found. "
+                    raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'id', not found. "
                                                          "Wrong version?")
 
                 if node_id == 'controller-config':
@@ -137,28 +137,29 @@ class OfConnOdl(OpenflowConn):
                 if node_ip_address is None:
                     self.logger.error("get_of_switches. Unexpected response at 'nodes':'node'[]:'flow-node-inventory:"
                                       "ip-address', not found: %s", str(node))
-                    raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:"
+                    raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:"
                                                          "'flow-node-inventory:ip-address', not found. Wrong version?")
 
                 node_id_hex = hex(int(node_id.split(':')[1])).split('x')[1].zfill(16)
-                switch_list.append((':'.join(a+b for a,b in zip(node_id_hex[::2], node_id_hex[1::2])), node_ip_address))
+                switch_list.append((':'.join(a+b for a, b in zip(node_id_hex[::2], node_id_hex[1::2])),
+                                    node_ip_address))
             return switch_list
 
         except requests.exceptions.RequestException as e:
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("get_of_switches " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)
         except ValueError as e:
             # ValueError in the case that JSON can not be decoded
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("get_of_switches " + error_text)
-            raise OpenflowconnUnexpectedResponse(error_text)
+            raise OpenflowConnUnexpectedResponse(error_text)
 
     def obtain_port_correspondence(self):
         """
         Obtain the correspondence between physical and openflow port names
         :return: dictionary: with physical name as key, openflow name as value,
-                 Raise a OpenflowconnConnectionException expection in case of failure
+                 Raise a OpenflowConnConnectionException expection in case of failure
         """
         try:
             of_response = requests.get(self.url + "restconf/operational/opendaylight-inventory:nodes",
@@ -166,26 +167,26 @@ class OfConnOdl(OpenflowConn):
             error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text)
             if of_response.status_code != 200:
                 self.logger.warning("obtain_port_correspondence " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
             self.logger.debug("obtain_port_correspondence " + error_text)
             info = of_response.json()
 
             if not isinstance(info, dict):
                 self.logger.error("obtain_port_correspondence. Unexpected response not a dict: %s", str(info))
-                raise OpenflowconnUnexpectedResponse("Unexpected openflow response, not a dict. Wrong version?")
+                raise OpenflowConnUnexpectedResponse("Unexpected openflow response, not a dict. Wrong version?")
 
             nodes = info.get('nodes')
             if not isinstance(nodes, dict):
                 self.logger.error("obtain_port_correspondence. Unexpected response at 'nodes', "
                                   "not found or not a dict: %s", str(type(nodes)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes',not found or not a dict. "
+                raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes',not found or not a dict. "
                                                      "Wrong version?")
 
             node_list = nodes.get('node')
             if not isinstance(node_list, list):
                 self.logger.error("obtain_port_correspondence. Unexpected response, at 'nodes':'node', "
                                   "not found or not a list: %s", str(type(node_list)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response, at 'nodes':'node', not found or not a list."
+                raise OpenflowConnUnexpectedResponse("Unexpected response, at 'nodes':'node', not found or not a list."
                                                      " Wrong version?")
 
             for node in node_list:
@@ -193,7 +194,7 @@ class OfConnOdl(OpenflowConn):
                 if node_id is None:
                     self.logger.error("obtain_port_correspondence. Unexpected response at 'nodes':'node'[]:'id', "
                                       "not found: %s", str(node))
-                    raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'id', not found. "
+                    raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'id', not found. "
                                                          "Wrong version?")
 
                 if node_id == 'controller-config':
@@ -209,7 +210,7 @@ class OfConnOdl(OpenflowConn):
                 if not isinstance(node_connector_list, list):
                     self.logger.error("obtain_port_correspondence. Unexpected response at "
                                       "'nodes':'node'[]:'node-connector', not found or not a list: %s", str(node))
-                    raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'node-connector', "
+                    raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:'node-connector', "
                                                          "not found  or not a list. Wrong version?")
 
                 for node_connector in node_connector_list:
@@ -220,7 +221,7 @@ class OfConnOdl(OpenflowConn):
                 if node_ip_address is None:
                     self.logger.error("obtain_port_correspondence. Unexpected response at 'nodes':'node'[]:"
                                       "'flow-node-inventory:ip-address', not found: %s", str(node))
-                    raise OpenflowconnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:"
+                    raise OpenflowConnUnexpectedResponse("Unexpected response at 'nodes':'node'[]:"
                                                          "'flow-node-inventory:ip-address', not found. Wrong version?")
 
                 # If we found the appropriate dpid no need to continue in the for loop
@@ -231,12 +232,12 @@ class OfConnOdl(OpenflowConn):
         except requests.exceptions.RequestException as e:
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("obtain_port_correspondence " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)
         except ValueError as e:
             # ValueError in the case that JSON can not be decoded
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("obtain_port_correspondence " + error_text)
-            raise OpenflowconnUnexpectedResponse(error_text)
+            raise OpenflowConnUnexpectedResponse(error_text)
 
     def get_of_rules(self, translate_of_ports=True):
         """
@@ -252,7 +253,7 @@ class OfConnOdl(OpenflowConn):
                         (vlan, None/int): for stripping/setting a vlan tag
                         (out, port):      send to this port
                     switch:       DPID, all
-            Raise a OpenflowconnConnectionException exception in case of failure
+            Raise a OpenflowConnConnectionException exception in case of failure
 
         """
 
@@ -271,7 +272,7 @@ class OfConnOdl(OpenflowConn):
 
             elif of_response.status_code != 200:
                 self.logger.warning("get_of_rules " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
 
             self.logger.debug("get_of_rules " + error_text)
 
@@ -279,13 +280,13 @@ class OfConnOdl(OpenflowConn):
 
             if not isinstance(info, dict):
                 self.logger.error("get_of_rules. Unexpected response not a dict: %s", str(info))
-                raise OpenflowconnUnexpectedResponse("Unexpected openflow response, not a dict. Wrong version?")
+                raise OpenflowConnUnexpectedResponse("Unexpected openflow response, not a dict. Wrong version?")
 
             table = info.get('flow-node-inventory:table')
             if not isinstance(table, list):
                 self.logger.error("get_of_rules. Unexpected response at 'flow-node-inventory:table', "
                                   "not a list: %s", str(type(table)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response at 'flow-node-inventory:table', not a list. "
+                raise OpenflowConnUnexpectedResponse("Unexpected response at 'flow-node-inventory:table', not a list. "
                                                      "Wrong version?")
 
             flow_list = table[0].get('flow')
@@ -295,7 +296,7 @@ class OfConnOdl(OpenflowConn):
             if not isinstance(flow_list, list):
                 self.logger.error("get_of_rules. Unexpected response at 'flow-node-inventory:table'[0]:'flow', not a "
                                   "list: %s", str(type(flow_list)))
-                raise OpenflowconnUnexpectedResponse("Unexpected response at 'flow-node-inventory:table'[0]:'flow', "
+                raise OpenflowConnUnexpectedResponse("Unexpected response at 'flow-node-inventory:table'[0]:'flow', "
                                                      "not a list. Wrong version?")
 
             # TODO translate ports according to translate_of_ports parameter
@@ -303,10 +304,10 @@ class OfConnOdl(OpenflowConn):
             rules = []  # Response list
             for flow in flow_list:
                 if not ('id' in flow and 'match' in flow and 'instructions' in flow and
-                                'instruction' in flow['instructions'] and
-                                'apply-actions' in flow['instructions']['instruction'][0] and
-                                'action' in flow['instructions']['instruction'][0]['apply-actions']):
-                    raise OpenflowconnUnexpectedResponse("unexpected openflow response, one or more elements are "
+                        'instruction' in flow['instructions'] and
+                        'apply-actions' in flow['instructions']['instruction'][0] and
+                        'action' in flow['instructions']['instruction'][0]['apply-actions']):
+                    raise OpenflowConnUnexpectedResponse("unexpected openflow response, one or more elements are "
                                                          "missing. Wrong version?")
 
                 flow['instructions']['instruction'][0]['apply-actions']['action']
@@ -319,7 +320,7 @@ class OfConnOdl(OpenflowConn):
                 if 'in-port' in flow['match']:
                     in_port = flow['match']['in-port']
                     if in_port not in self.ofi2pp:
-                        raise OpenflowconnUnexpectedResponse("Error: Ingress port {} is not in switch port list".
+                        raise OpenflowConnUnexpectedResponse("Error: Ingress port {} is not in switch port list".
                                                              format(in_port))
 
                     if translate_of_ports:
@@ -330,7 +331,7 @@ class OfConnOdl(OpenflowConn):
                     if 'vlan-match' in flow['match'] and 'vlan-id' in flow['match']['vlan-match'] and \
                             'vlan-id' in flow['match']['vlan-match']['vlan-id'] and \
                             'vlan-id-present' in flow['match']['vlan-match']['vlan-id'] and \
-                            flow['match']['vlan-match']['vlan-id']['vlan-id-present'] == True:
+                            flow['match']['vlan-match']['vlan-id']['vlan-id-present'] is True:
                         rule['vlan_id'] = flow['match']['vlan-match']['vlan-id']['vlan-id']
 
                     if 'ethernet-match' in flow['match'] and 'ethernet-destination' in flow['match']['ethernet-match'] \
@@ -348,12 +349,12 @@ class OfConnOdl(OpenflowConn):
                 for instruction in instructions:
                     if 'output-action' in instruction:
                         if 'output-node-connector' not in instruction['output-action']:
-                            raise OpenflowconnUnexpectedResponse("unexpected openflow response, one or more elementa "
+                            raise OpenflowConnUnexpectedResponse("unexpected openflow response, one or more elementa "
                                                                  "are missing. Wrong version?")
 
                         out_port = instruction['output-action']['output-node-connector']
                         if out_port not in self.ofi2pp:
-                            raise OpenflowconnUnexpectedResponse("Error: Output port {} is not in switch port list".
+                            raise OpenflowConnUnexpectedResponse("Error: Output port {} is not in switch port list".
                                                                  format(out_port))
 
                         if translate_of_ports:
@@ -368,7 +369,7 @@ class OfConnOdl(OpenflowConn):
                         if not ('vlan-match' in instruction['set-field'] and
                                 'vlan-id' in instruction['set-field']['vlan-match'] and
                                 'vlan-id' in instruction['set-field']['vlan-match']['vlan-id']):
-                            raise OpenflowconnUnexpectedResponse("unexpected openflow response, one or more elements "
+                            raise OpenflowConnUnexpectedResponse("unexpected openflow response, one or more elements "
                                                                  "are missing. Wrong version?")
 
                         actions[instruction['order']] = ('vlan',
@@ -383,18 +384,18 @@ class OfConnOdl(OpenflowConn):
         except requests.exceptions.RequestException as e:
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("get_of_rules " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)
         except ValueError as e:
             # ValueError in the case that JSON can not be decoded
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("get_of_rules " + error_text)
-            raise OpenflowconnUnexpectedResponse(error_text)
+            raise OpenflowConnUnexpectedResponse(error_text)
 
     def del_flow(self, flow_name):
         """
         Delete an existing rule
         :param flow_name: flow_name, this is the rule name
-        :return: Raise a OpenflowconnConnectionException expection in case of failure
+        :return: Raise a OpenflowConnConnectionException expection in case of failure
         """
 
         try:
@@ -403,14 +404,14 @@ class OfConnOdl(OpenflowConn):
             error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text)
             if of_response.status_code != 200:
                 self.logger.warning("del_flow " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
             self.logger.debug("del_flow OK " + error_text)
             return None
         except requests.exceptions.RequestException as e:
             # raise an exception in case of contection error
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("del_flow " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)
 
     def new_flow(self, data):
         """
@@ -424,7 +425,7 @@ class OfConnOdl(OpenflowConn):
                 actions:      list of actions, composed by a pair tuples with these posibilities:
                     ('vlan', None/int): for stripping/setting a vlan tag
                     ('out', port):      send to this port
-        :return: Raise a OpenflowconnConnectionException exception in case of failure
+        :return: Raise a OpenflowConnConnectionException exception in case of failure
         """
 
         try:
@@ -446,7 +447,7 @@ class OfConnOdl(OpenflowConn):
             if not data['ingress_port'] in self.pp2ofi:
                 error_text = 'Error. Port ' + data['ingress_port'] + ' is not present in the switch'
                 self.logger.warning("new_flow " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
             flow['match']['in-port'] = self.pp2ofi[data['ingress_port']]
             if data.get('dst_mac'):
                 flow['match']['ethernet-match'] = {
@@ -487,13 +488,13 @@ class OfConnOdl(OpenflowConn):
                     new_action['output-action'] = {}
                     if not action[1] in self.pp2ofi:
                         error_msg = 'Port ' + action[1] + ' is not present in the switch'
-                        raise OpenflowconnUnexpectedResponse(error_msg)
+                        raise OpenflowConnUnexpectedResponse(error_msg)
 
                     new_action['output-action']['output-node-connector'] = self.pp2ofi[action[1]]
                 else:
-                    error_msg = "Unknown item '%s' in action list".format(action[0])
+                    error_msg = "Unknown item '{}' in action list".format(action[0])
                     self.logger.error("new_flow " + error_msg)
-                    raise OpenflowconnUnexpectedResponse(error_msg)
+                    raise OpenflowConnUnexpectedResponse(error_msg)
 
                 actions.append(new_action)
                 order += 1
@@ -504,7 +505,7 @@ class OfConnOdl(OpenflowConn):
             error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text)
             if of_response.status_code != 200:
                 self.logger.warning("new_flow " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
             self.logger.debug("new_flow OK " + error_text)
             return None
 
@@ -512,12 +513,12 @@ class OfConnOdl(OpenflowConn):
             # raise an exception in case of contection error
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("new_flow " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)
 
     def clear_all_flows(self):
         """
         Delete all existing rules
-        :return: Raise a OpenflowconnConnectionException expection in case of failure
+        :return: Raise a OpenflowConnConnectionException expection in case of failure
         """
         try:
             of_response = requests.delete(self.url + "restconf/config/opendaylight-inventory:nodes/node/" + self.id +
@@ -525,10 +526,10 @@ class OfConnOdl(OpenflowConn):
             error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text)
             if of_response.status_code != 200 and of_response.status_code != 404:   # HTTP_Not_Found
                 self.logger.warning("clear_all_flows " + error_text)
-                raise OpenflowconnUnexpectedResponse(error_text)
+                raise OpenflowConnUnexpectedResponse(error_text)
             self.logger.debug("clear_all_flows OK " + error_text)
             return None
         except requests.exceptions.RequestException as e:
             error_text = type(e).__name__ + ": " + str(e)
             self.logger.error("clear_all_flows " + error_text)
-            raise OpenflowconnConnectionException(error_text)
+            raise OpenflowConnConnectionException(error_text)