2 # -*- coding: utf-8 -*-
10 from linkpair.linkpair import LinkPair
11 from linkpair.device import Device
12 from linkpair.port import Port
15 class BaseFormatter(object):
22 NOT_CONNECTED_STYLE = ''
24 DEFAULT_FORMAT = '[ %s ] %s -- { label: "%s %s"; } [ %s ] %s'
25 NAMESPACE_FORMAT = '[ %s ] %s --> { label: %s %s; } [ %s ] %'
26 PATCH_FORMAT = '[ %s ] %s <==> { label: %s : %s; } [ %s ] %s'
27 VETH_FORMAT = '[ %s ] %s <--> { label: %s \| %s; } [ %s ] %s'
31 formatter_name = "base"
33 def __init__(self, title=""):
39 def format_linkpair(cls, linkpair):
42 formatted_lp = linkpair.format % (
44 cls.get_device_style(linkpair.device1.type),
48 cls.get_device_style(linkpair.device2.type))
51 def format_linkpairs(self):
53 formatted_lps.append(self.get_header())
54 print self.get_header()
55 for lp in self._linkpairs:
56 formatted_lps.append(self.format_linkpair(lp))
57 formatted_lps.append(self.get_footer())
61 header = self.HEADER_FORMAT
65 footer = self.FOOTER_FORMAT
69 def get_device_style(cls, type=Device.DEFAULT_TYPE):
70 if type == Device.DEFAULT_TYPE:
71 return cls.DEFAULT_STYLE
72 elif type == Device.VM_TYPE:
74 elif type == Device.BR_TYPE:
76 elif type == Device.OS_ROUTE_TYPE:
77 return cls.OS_ROUTE_STYLE
78 elif type == Device.PHYNET_TYPE:
79 return cls.PHYNET_STYLE
80 elif type == Device.NAMESPACE_TYPE:
81 return cls.NAMESPACE_STYLE
82 elif type == Device.NOT_CONNECTED_TYPE:
83 return cls.NOT_CONNECTED_STYLE
85 return cls.DEFAULT_STYLE
88 def get_port_style(cls, type=Port.DEFAULT_TYPE):
89 return cls.DEFAULT_STYLE
92 def get_all_devices(cls, lps):
96 if str(lp.device1) not in devices_str and str(lp.device1) != "":
97 devices_str.append(str(lp.device1))
98 devices.append(lp.device1)
99 if str(lp.device2) not in devices_str and str(lp.device2) != "":
100 devices_str.append(str(lp.device2))
101 devices.append(lp.device2)
102 devices = sorted(set(devices), key=devices.index)
108 return self._linkpairs
110 def set(self, linkpairs):
111 self._linkpairs = linkpairs
113 def set_linkpairs(self, linkpairs):
114 self._linkpairs = linkpairs
121 def set(self, format):
122 self._format = format
129 def set(self, title):
133 return self.formatter_name