OSDN Git Service

f05d53a0395e38f236264728ac9487aaf31617ae
[ti2/ti2.git] / linkpair / formatter / baseformatter.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4
5 __version__ = '1.1'
6
7 import sys
8 import os
9 import re
10 from linkpair.linkpair import LinkPair
11 from linkpair.device import Device
12 from linkpair.port import Port
13
14
15 class BaseFormatter(object):
16     DEFAULT_STYLE = ''
17     VM_STYLE = ''
18     BR_STYLE = ''
19     OS_ROUTE_STYLE = ''
20     PHYNET_STYLE = ''
21     NAMESPACE_STYLE = ''
22     NOT_CONNECTED_STYLE = ''
23
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'
28
29     HEADER_FORMAT = ""
30     FOOTER_FORMAT = ""
31     formatter_name = "base"
32
33     def __init__(self, title=""):
34         self._linkpairs = []
35         self._title = title
36         self._groupid = 1
37
38     @classmethod
39     def format_linkpair(cls, linkpair):
40         formatted_lp = ""
41
42         formatted_lp = linkpair.format % (
43             linkpair.device1,
44             cls.get_device_style(linkpair.device1.type),
45             linkpair.port1,
46             linkpair.port2,
47             linkpair.device2,
48             cls.get_device_style(linkpair.device2.type))
49         return formatted_lp
50
51     def format_linkpairs(self):
52         formatted_lps = []
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())
58         return formatted_lps
59
60     def get_header(self):
61         header = self.HEADER_FORMAT
62         return header
63
64     def get_footer(self):
65         footer = self.FOOTER_FORMAT
66         return footer
67
68     @classmethod
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:
73             return cls.VM_STYLE
74         elif type == Device.BR_TYPE:
75             return cls.BR_STYLE
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
84         else:
85             return cls.DEFAULT_STYLE
86
87     @classmethod
88     def get_port_style(cls, type=Port.DEFAULT_TYPE):
89         return cls.DEFAULT_STYLE
90
91     @classmethod
92     def get_all_devices(cls, lps):
93         devices = []
94         devices_str = []
95         for lp in 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)
103         return devices
104
105     @apply
106     def linkpairs():
107         def get(self):
108             return self._linkpairs
109
110         def set(self, linkpairs):
111             self._linkpairs = linkpairs
112
113     def set_linkpairs(self, linkpairs):
114         self._linkpairs = linkpairs
115
116     @apply
117     def format():
118         def get(self):
119             return self._format
120
121         def set(self, format):
122             self._format = format
123
124     @apply
125     def title():
126         def get(self):
127             return self._title
128
129         def set(self, title):
130             self._title = title
131
132     def __repr__(self):
133         return self.formatter_name