GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( e49d52...ed28a0 )
by Benjamin
01:07
created

Pump.stop()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 2
rs 10
cc 1
1
import threading
2
from queue import Queue, Empty
3
4
from libAnt.driver import Driver, DriverException
5
from libAnt.message import *
6
7
8
class Network:
9
    def __init__(self, key: bytes = b'\x00' * 8, name: str = None):
10
        self.key = key
11
        self.name = name
12
        self.number = 0
13
14
    def __str__(self):
15
        return self.name
16
17
18
class Pump(threading.Thread):
19
    def __init__(self, driver: Driver, out: Queue, onSucces, onFailure):
20
        super().__init__()
21
        self._stopper = threading.Event()
22
        self._driver = driver
23
        self._out = out
24
        self._waiters = []
25
        self._onSuccess = onSucces
26
        self._onFailure = onFailure
27
28
    def stop(self):
29
        self._stopper.set()
30
31
    def stopped(self):
32
        return self._stopper.isSet()
33
34
    def run(self):
35
        with self._driver as d:
36
            while not self._stopper.is_set():
37
                #  Write
38
                try:
39
                    outMsg = self._out.get(block=False)
40
                    self._waiters.append(outMsg)
41
                    d.write(outMsg)
42
                except Empty:
43
                    pass
44
                except DriverException:
45
                    self._stopper.set()
46
                    break
47
48
                # Read
49
                try:
50
                    msg = d.read()  # TODO: add timeout to driver
51
                    if msg.type == MESSAGE_CHANNEL_EVENT:
52
                        # This is a response to our outgoing message
53
                        for w in self._waiters:
54
                            if w.type == msg.content[1]:  # ACK
55
                                self._waiters.remove(w)
56
                                #  TODO: Call waiter callback from tuple (waiter, callback)
57
                                break
58
                    elif msg.type == MESSAGE_CHANNEL_BROADCAST_DATA:
59
                        bmsg = BroadcastMessage(msg.type, msg.content).build(msg.content)
60
                        try:
61
                            self._onSuccess(bmsg)
62
                        except Exception as e:
63
                            self._onFailure(e)
64
65
                except DriverException as e:
66
                    self._stopper.set()
67
                    self._onFailure(e)
68
                    break
69
70
71
class Node:
72
    def __init__(self, driver, name=None):
73
        self._driver = driver
74
        self._name = name
75
        self._out = Queue()
76
        self._pump = None
77
        self._configMessages = Queue()
78
79
    def __enter__(self):
80
        return self
81
82
    def __exit__(self, exc_type, exc_val, exc_tb):
83
        self.stop()
84
85
    def start(self, onSuccess, onFailure):
86
        if not self.isRunning():
87
            self._pump = Pump(self._driver, self._out, onSuccess, onFailure)
88
            self._pump.start()
89
90
    def stop(self):
91
        if self.isRunning():
92
            self._pump.stop()
93
            self._pump.join()
94
95
    def isRunning(self):
96
        if self._pump is None:
97
            return False
98
        return self._pump.is_alive()
99
100
    def getCapabilities(self):
101
        pass
102