Passed
Pull Request — master (#252)
by Vinicius
09:43 queued 03:57
created

kytos.core.id.LinkID.__getnewargs__()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.125

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 3
ccs 1
cts 2
cp 0.5
crap 1.125
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 1
    def __getnewargs__(self):
32
        """To make sure it's pickleable"""
33 1
        return (self.switch, self.port)
34
35
36 1
class LinkID(str):
37
    """Link Identifier"""
38
39 1
    def __new__(cls, interface_a: InterfaceID, interface_b: InterfaceID):
40 1
        raw_str = ":".join(sorted((interface_a, interface_b)))
41 1
        digest = hashlib.sha256(raw_str.encode('utf-8')).hexdigest()
42 1
        return super().__new__(cls, digest)
43
44 1
    def __init__(self, interface_a: InterfaceID, interface_b: InterfaceID):
45 1
        self.interfaces = (interface_a, interface_b)
46 1
        super().__init__()
47
48 1
    def __getnewargs__(self):
49
        """To make sure it's pickleable"""
50
        return self.interfaces
51