~awuerl/blitzortung-python/master

« back to all changes in this revision

Viewing changes to blitzortung/data.py

  • Committer: Andreas Wuerl
  • Date: 2019-06-24 19:32:25 UTC
  • mto: This revision was merged to the branch mainline in revision 394.
  • Revision ID: git-v1:29d4be282c05035bdff8d4828573537ed6d8ceea
update tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
"""
20
20
 
21
 
from __future__ import unicode_literals, generators
22
 
 
23
21
import datetime
 
22
import math
24
23
 
25
24
import pytz
26
25
import six
27
26
 
 
27
from blitzortung.geom import GridElement
28
28
from . import types
29
 
import math
30
 
from blitzortung.geom import GridElement
31
29
 
32
30
 
33
31
class Timestamp(types.EqualityAndHash):
37
35
    __slots__ = ['datetime', 'nanosecond']
38
36
 
39
37
    def __init__(self, date_time=datetime.datetime.utcnow().replace(tzinfo=pytz.UTC), nanosecond=0):
40
 
        if type(date_time) == str or type(date_time) == unicode:
 
38
        if type(date_time) == str:
41
39
            date_time, date_time_nanosecond = Timestamp.from_timestamp(date_time)
42
40
            nanosecond += date_time_nanosecond
43
41
        elif type(date_time) == int:
45
43
            nanosecond += date_time_nanosecond
46
44
 
47
45
        if nanosecond < 0 or nanosecond > 999:
48
 
            microdelta = nanosecond / 1000
 
46
            microdelta = nanosecond // 1000
49
47
            date_time += datetime.timedelta(microseconds=microdelta)
50
48
            nanosecond -= microdelta * 1000
51
49
 
71
69
 
72
70
    @staticmethod
73
71
    def from_nanoseconds(total_nanoseconds):
74
 
        total_microseconds = total_nanoseconds / 1000
 
72
        total_microseconds = total_nanoseconds // 1000
75
73
        residual_nanoseconds = total_nanoseconds % 1000
76
 
        total_seconds = total_microseconds / 1000000
 
74
        total_seconds = total_microseconds // 1000000
77
75
        residual_microseconds = total_microseconds % 1000000
78
76
        return datetime.datetime(1970, 1, 1, tzinfo=pytz.UTC) + \
79
77
               datetime.timedelta(seconds=total_seconds,
80
 
                                  milliseconds=residual_microseconds), \
 
78
                                  microseconds=residual_microseconds), \
81
79
               residual_nanoseconds
82
80
 
83
81
    @property
130
128
        if type(other) == datetime.datetime:
131
129
            return self.datetime < other
132
130
        else:
133
 
            return self.datetime < other.datetime or (self.datetime == other.datetime and self.nanosecond < other.nanosecond)
 
131
            return self.datetime < other.datetime or (
 
132
                    self.datetime == other.datetime and self.nanosecond < other.nanosecond)
134
133
 
135
134
    def __le__(self, other):
136
135
        if type(other) == datetime.datetime:
137
136
            return self.datetime <= other
138
137
        else:
139
 
            return self.datetime < other.datetime or (self.datetime == other.datetime and self.nanosecond <= other.nanosecond)
 
138
            return self.datetime < other.datetime or (
 
139
                    self.datetime == other.datetime and self.nanosecond <= other.nanosecond)
140
140
 
141
141
    def __gt__(self, other):
142
142
        if type(other) == datetime.datetime:
143
143
            return self.datetime > other
144
144
        else:
145
 
            return self.datetime > other.datetime or (self.datetime == other.datetime and self.nanosecond > other.nanosecond)
 
145
            return self.datetime > other.datetime or (
 
146
                    self.datetime == other.datetime and self.nanosecond > other.nanosecond)
146
147
 
147
148
    def __ge__(self, other):
148
149
        if type(other) == datetime.datetime:
149
150
            return self.datetime >= other
150
151
        else:
151
 
            return self.datetime > other.datetime or (self.datetime == other.datetime and self.nanosecond >= other.nanosecond)
 
152
            return self.datetime > other.datetime or (
 
153
                    self.datetime == other.datetime and self.nanosecond >= other.nanosecond)
152
154
 
153
155
    def __add__(self, other):
154
156
        if type(other) == Timedelta:
188
190
class Timedelta(types.EqualityAndHash):
189
191
    def __init__(self, timedelta=datetime.timedelta(), nanodelta=0):
190
192
        if nanodelta < 0 or nanodelta > 999:
191
 
            microdelta = nanodelta / 1000
 
193
            microdelta = nanodelta // 1000
192
194
            timedelta += datetime.timedelta(microseconds=microdelta)
193
195
            nanodelta -= microdelta * 1000
194
196
        self.timedelta = timedelta
298
300
        offline_since = self.timestamp
299
301
        status_char = "*" if offline_since is None else "-"
300
302
        try:
301
 
            status_text = "" if offline_since is None else " offline since " + offline_since.strftime("%Y-%m-%d %H:%M %Z")
 
303
            status_text = "" if offline_since is None else " offline since " + offline_since.strftime(
 
304
                "%Y-%m-%d %H:%M %Z")
302
305
        except ValueError:
303
306
            status_text = 'n/a'
304
307
        return u"%s%3d/%3d '%s' '%s' (%.4f, %.4f)%s" % (