Source code for pyowm.stationsapi30.buffer
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
import json
from pyowm.stationsapi30.measurement import Measurement
from pyowm.utils import timestamps, formatting
[docs]
class Buffer:
station_id = None
created_at = None
measurements = None
def __init__(self, station_id):
assert station_id is not None
self.station_id = station_id
self.created_at = timestamps.now(timeformat='unix')
self.measurements = []
[docs]
def creation_time(self, timeformat='unix'):
"""Returns the UTC time of creation of this aggregated measurement
:param timeformat: the format for the time value. May be:
'*unix*' (default) for UNIX time, '*iso*' for ISO8601-formatted
string in the format ``YYYY-MM-DD HH:MM:SS+00`` or `date` for
a ``datetime.datetime`` object
:type timeformat: str
:returns: an int or a str or a ``datetime.datetime`` object or None
:raises: ValueError
"""
if self.created_at is None:
return None
return formatting.timeformat(self.created_at, timeformat)
[docs]
def append(self, measurement):
"""
Appends the specified ``Measurement`` object to the buffer
:param measurement: a ``measurement.Measurement`` instance
"""
assert isinstance(measurement, Measurement)
assert measurement.station_id == self.station_id
self.measurements.append(measurement)
[docs]
def append_from_dict(self, the_dict):
"""
Creates a ``measurement.Measurement`` object from the supplied dict
and then appends it to the buffer
:param the_dict: dict
"""
m = Measurement.from_dict(the_dict)
self.append(m)
[docs]
def append_from_json(self, json_string):
"""
Creates a ``measurement.Measurement`` object from the supplied JSON string
and then appends it to the buffer
:param json_string: the JSON formatted string
"""
a_dict = json.loads(json_string)
self.append_from_dict(a_dict)
[docs]
def empty(self):
"""
Drops all measurements of this buffer instance
"""
self.measurements = []
[docs]
def sort_chronologically(self):
"""
Sorts the measurements of this buffer in chronological order
"""
self.measurements.sort(key=lambda m: m.timestamp)
[docs]
def sort_reverse_chronologically(self):
"""
Sorts the measurements of this buffer in reverse chronological order
"""
self.measurements.sort(key=lambda m: m.timestamp, reverse=True)
def __len__(self):
return len(self.measurements)
def __iter__(self):
return iter(self.measurements)
def __add__(self, other):
assert all(i.station_id == self.station_id for i in other)
result = copy.deepcopy(self)
for m in other.measurements:
result.append(m)
return result
def __contains__(self, measurement):
return measurement in self.measurements
def __repr__(self):
return '<%s.%s - station_id=%s, n_samples=%s>' \
% (__name__, self.__class__.__name__,
self.station_id, len(self))