Passed
Push — master ( 588637...c917b7 )
by Vinicius
04:24 queued 14s
created

kytos.core.id.InterfaceID.__new__()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 3
dl 0
loc 2
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
"""Module with identifier types for Links and Interfaces"""
2
3 1
import hashlib
4
5
6 1
class InterfaceID(str):
7
    """Interface Identifier"""
8
9 1
    __slots__ = ("switch", "port")
10
11 1
    def __new__(cls, switch: str, port: int):
12 1
        return super().__new__(cls, f"{switch}:{port}")
13
14 1
    def __init__(self, switch: str, port: int):
15
        # Used for sorting, but can be accessed
16 1
        self.switch = switch
17 1
        self.port = port
18 1
        super().__init__()
19
20 1
    def __lt__(self, other):
21
        # Ensures that instances are sortable in a way that maintains backwards
22
        # compatibility when creating instances of LinkID
23 1
        dpid_a = self.switch
24 1
        port_a = self.port
25 1
        dpid_b = other.switch
26 1
        port_b = other.port
27 1
        if dpid_a < dpid_b:
28 1
            return True
29 1
        return dpid_a == dpid_b and port_a < port_b
30
31
32 1
class LinkID(str):
33
    """Link Identifier"""
34
35 1
    def __new__(cls, interface_1: InterfaceID, interface_2: InterfaceID):
36 1
        raw_str = ":".join(sorted((interface_1, interface_2)))
37 1
        digest = hashlib.sha256(raw_str.encode('utf-8')).hexdigest()
38
        return super().__new__(cls, digest)
39