Passed
Pull Request — master (#161)
by Vinicius
05:56
created

build.proxy_port   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 31
dl 0
loc 55
ccs 22
cts 22
cp 1
rs 10
c 0
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
B ProxyPort.destination() 0 18 6
A ProxyPort.status() 0 10 4
A ProxyPort.__init__() 0 3 1
A ProxyPort.__repr__() 0 3 1
1
""" This class helps to handle multi-home physical loops (two ports). """
2
3 1
from typing import Optional
4
5 1
from kytos.core.common import EntityStatus
6 1
from kytos.core.interface import Interface
7
8
9 1
class ProxyPort:
10
    """This class helps to handle multi-home physical loops (two ports).
11
12
    source interface is where the loop starts
13
    destination interface is where the loop ends
14
    evc_ids are which evc ids this proxy port is being used by
15
16
    """
17
18 1
    def __init__(self, source: Interface):
19 1
        self.source = source
20 1
        self.evc_ids: set[str] = set()
21
22 1
    @property
23 1
    def destination(self) -> Optional[Interface]:
24
        """Destination interface of the loop."""
25 1
        if (
26
            "looped" not in self.source.metadata
27
            or "port_numbers" not in self.source.metadata["looped"]
28
            or not self.source.metadata["looped"]["port_numbers"]
29
            or len(self.source.metadata["looped"]["port_numbers"]) < 2
30
        ):
31 1
            return None
32
33 1
        destination = self.source.switch.get_interface_by_port_no(
34
            self.source.metadata["looped"]["port_numbers"][1]
35
        )
36 1
        if not destination:
37 1
            return None
38
39 1
        return destination
40
41 1
    @property
42 1
    def status(self) -> EntityStatus:
43
        """ProxyPort status."""
44 1
        if (
45
            self.source.status == EntityStatus.UP
46
            and self.destination
47
            and self.destination.status == EntityStatus.UP
48
        ):
49 1
            return EntityStatus.UP
50 1
        return EntityStatus.DOWN
51
52 1
    def __repr__(self) -> str:
53
        """Repr method."""
54
        return f"ProxyPort({self.source}, {self.destination}, {self.status})"
55