Source code for phildb.reader

import calendar
from struct import unpack, calcsize
import numpy as np
import pandas as pd
import os

from phildb.constants import METADATA_MISSING_VALUE
from phildb.log_handler import LogHandler

def __read(filename):
    field_names = ['date', 'value', 'metaID']
    entry_format = '<qdi' # long, double, int; See field names above.
    entry_size = calcsize(entry_format)

    if not os.path.exists(filename):
        return pd.DataFrame(None, columns = ['date', 'value', 'metaID'])

    records = np.fromfile(filename, dtype=np.dtype({'names':field_names, 'formats': entry_format[1:]}))

    if len(records) == 0: return pd.DataFrame(None, columns = ['date', 'value', 'metaID'])

    df = pd.DataFrame(records, columns = field_names)
    df['date'] = pd.to_datetime(df['date'], unit='s')
    df = df.set_index('date')

    meta_ids = df.metaID
    df.loc[df.metaID == METADATA_MISSING_VALUE] = np.nan
    df.metaID = meta_ids

    return df

[docs]def read(filename): return __read(filename).value
[docs]def read_log(log_file, as_at_datetime): with LogHandler(log_file, 'r') as reader: df = reader.read(calendar.timegm(as_at_datetime.utctimetuple())) return df.value