Source code for pyowm.stationsapi30.persistence_backend
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import json
from abc import ABCMeta, abstractmethod
from pyowm.stationsapi30.buffer import Buffer
[docs]
class PersistenceBackend: # pragma: no cover
"""
A global abstract class representing an I/O manager for buffer objects containing
raw measurements.
"""
__metaclass__ = ABCMeta
[docs]
@abstractmethod
def load_to_buffer(self):
"""
Reads meteostation measurement data into a *pyowm.stationsapi30.buffer.Buffer*
object.
:returns: a *pyowm.stationsapi30.buffer.Buffer* instance
"""
pass
[docs]
@abstractmethod
def persist_buffer(self, buffer):
"""
Saves data contained into a *pyowm.stationsapi30.buffer.Buffer* object
in a durable form.
:param buffer: the Buffer object to be persisted
:type buffer: *pyowm.stationsapi30.buffer.Buffer* instance
"""
pass
def __repr__(self):
return '<%s.%s>' % (__name__, self.__class__.__name__)
[docs]
class JSONPersistenceBackend(PersistenceBackend):
"""
A `PersistenceBackend` loading/saving data to a JSON file. Data will be
saved as a JSON list, each element being representing data of a
*pyowm.stationsapi30.measurement.Measurement* object.
:param json_file_path: path to the JSON file
:type json_file_path: str
:param station_id: unique OWM-provided ID of the station whose data is read/saved
:type station_id: str
"""
_file_path = None
_station_id = None
def __init__(self, json_file_path, station_id):
assert json_file_path is not None
self._station_id = station_id
assert os.path.isfile(json_file_path)
self._file_path = json_file_path
[docs]
def load_to_buffer(self):
if self._station_id is None:
raise ValueError('No station ID specified')
result = Buffer(self._station_id)
with open(self._file_path, 'r') as f:
list_of_dicts = json.load(f)
for _dict in list_of_dicts:
result.append_from_dict(_dict)
return result
[docs]
def persist_buffer(self, buffer):
with open(self._file_path, 'w') as f:
data = [msmt.to_JSON() for msmt in buffer]
f.write('[%s]' % ','.join(data))