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 ( b34662...456cb1 )
by Benjamin
01:12
created

SpeedAndCadenceProfileMessage.speed()   A

Complexity

Conditions 4

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 12
rs 9.2
cc 4
1
from libAnt.core import lazyproperty
2
from libAnt.profiles.profile import ProfileMessage
3
4
5
class SpeedAndCadenceProfileMessage(ProfileMessage):
6
    """ Message from Speed & Cadence sensor """
7
8
    def __init__(self, msg, previous):
9
        super().__init__(msg, previous)
10
        self.staleSpeedCounter = previous.staleSpeedCounter if previous is not None else 0
11
        self.staleCadenceCounter = previous.staleCadenceCounter if previous is not None else 0
12
13
        if self.previous is not None:
14
            if self.speedEventTime == self.previous.speedEventTime:
15
                self.staleSpeedCounter += 1
16
            else:
17
                self.staleSpeedCounter = 0
18
19
            if self.cadenceEventTime == self.previous.cadenceEventTime:
20
                self.staleCadenceCounter += 1
21
            else:
22
                self.staleCadenceCounter = 0
23
24
    maxCadenceEventTime = 65536
25
    maxSpeedEventTime = 65536
26
    maxSpeedRevCount = 65536
27
    maxCadenceRevCount = 65536
28
    maxstaleSpeedCounter = 7
29
    maxstaleCadenceCounter = 7
30
31
    def __str__(self):
32
        return super().__str__() + ' Speed: ' + str(self.speed(2096)) + ' Cadence: ' + str(self.cadence)
33
34
    @lazyproperty
35
    def cadenceEventTime(self):
36
        """ Represents the time of the last valid bike cadence event (1/1024 sec) """
37
        return (self.msg.content[1] << 8) | self.msg.content[0]
38
39
    @lazyproperty
40
    def cumulativeCadenceRevolutionCount(self):
41
        """ Represents the total number of pedal revolutions """
42
        return (self.msg.content[3] << 8) | self.msg.content[2]
43
44
    @lazyproperty
45
    def speedEventTime(self):
46
        """ Represents the time of the last valid bike speed event (1/1024 sec) """
47
        return (self.msg.content[5] << 8) | self.msg.content[4]
48
49
    @lazyproperty
50
    def cumulativeSpeedRevolutionCount(self):
51
        """ Represents the total number of wheel revolutions """
52
        return (self.msg.content[7] << 8) | self.msg.content[6]
53
54
    @lazyproperty
55
    def speedEventTimeDiff(self):
56
        if self.previous is None:
57
            return 0
58
        elif self.speedEventTime < self.previous.speedEventTime:
59
            # Rollover
60
            return (self.speedEventTime - self.previous.speedEventTime) + self.maxSpeedEventTime
61
        else:
62
            return self.speedEventTime - self.previous.speedEventTime
63
64
    @lazyproperty
65
    def cadenceEventTimeDiff(self):
66
        if self.previous is None:
67
            return 0
68
        elif self.cadenceEventTime < self.previous.cadenceEventTime:
69
            # Rollover
70
            return (self.cadenceEventTime - self.previous.cadenceEventTime) + self.maxCadenceEventTime
71
        else:
72
            return self.cadenceEventTime - self.previous.cadenceEventTime
73
74
    @lazyproperty
75
    def speedRevCountDiff(self):
76
        if self.previous is None:
77
            return None
78
        elif self.cumulativeSpeedRevolutionCount < self.previous.cumulativeSpeedRevolutionCount:
79
            # Rollover
80
            return (
81
                       self.cumulativeSpeedRevolutionCount - self.previous.cumulativeSpeedRevolutionCount) + self.maxSpeedRevCount
82
        else:
83
            return self.cumulativeSpeedRevolutionCount - self.previous.cumulativeSpeedRevolutionCount
84
85
    @lazyproperty
86
    def cadenceRevCountDiff(self):
87
        if self.previous is None:
88
            return None
89
        elif self.cumulativeCadenceRevolutionCount < self.previous.cumulativeCadenceRevolutionCount:
90
            # Rollover
91
            return (
92
                       self.cumulativeCadenceRevolutionCount - self.previous.cumulativeCadenceRevolutionCount) + self.maxCadenceRevCount
93
        else:
94
            return self.cumulativeCadenceRevolutionCount - self.previous.cumulativeCadenceRevolutionCount
95
96
    def speed(self, c):
97
        """
98
        :param c: circumference of the wheel (mm)
99
        :return: The current speed (m/sec)
100
        """
101
        if self.previous is None:
102
            return 0
103
        if self.speedEventTime == self.previous.speedEventTime:
104
            if self.staleSpeedCounter > self.maxstaleSpeedCounter:
105
                return 0
106
            return self.previous.speed(c)
107
        return self.speedRevCountDiff * 1.024 * c / self.speedEventTimeDiff
108
109
    @lazyproperty
110
    def cadence(self):
111
        """
112
        :return: RPM
113
        """
114
        if self.previous is None:
115
            return 0
116
        if self.cadenceEventTime == self.previous.cadenceEventTime:
117
            if self.staleCadenceCounter > self.maxstaleCadenceCounter:
118
                return 0
119
            return self.previous.cadence
120
        return self.cadenceRevCountDiff * 1024 * 60 / self.cadenceEventTimeDiff
121