
pywws.DataStore
***************


Introduction
============

Ce module est au cœur de mon logiciel de station météo. Il stocke les
données sur le disque, mais sans le coût d'un système de base de
données à grande échelle. Je l'ai conçu pour fonctionner sur une
machine avec peu de mémoire comme mon routeur Asus. Pour minimiser
l'utilisation de la mémoire, il ne charge que l'équivalent d'une
journée de données à la fois dans la mémoire.

D'un  point de vue "utilisateur", les données sont accédées comme un
croisement entre une liste et un dictionnaire. Chaque enregistrement
de données est indexée par un objet "datetime" (comportement
dictionnaire), mais les enregistrements sont stockés dans l'ordre et
peut être consulté sous forme de tranches (comportement liste).

Par exemple, pour accéder aux données horaires pour le jour de Noël
2009, on peut faire ce qui suit

   from datetime import datetime
   import DataStore
   hourly = DataStore.hourly_store('weather_data')
   for data in hourly[datetime(2009, 12, 25):datetime(2009, 12, 26)]:
       print data['idx'], data['temp_out']

Le module fournit cinq classes pour stocker des données différentes.
"data_store" prend les données  "brutes" de la station météo;
"calib_store", "hourly_store", "daily_store" et "monthly_store"
stockent les données traitées (voir "pywws .Process"). Tous les trois
sont issues de la même classe "core_store", ils ne diffèrent que par
les clés et les types de données stockées dans chaque enregistrement.


API détaillé
============

DataStore.py - enregistre les lectures dans des fichiers facilement
accessibles

Un fichier distinct est utilisé pour les données de chaque jour, pour
garder la charge mémoire raisonnable. Un jour à la fois est conservé
en mémoire et sauvegardé sur le disque quand un autre jour doit être
accessible.

Les données sont accédées comme un croisement entre une liste et un
dictionnaire. Les exemples suivants sont tous valides: # obtenir la
donné la plus près de Noel à 9h30  data[data.nearest(datetime(2008,
12, 25, 9, 30))] # obtenir le tableau complet, équivalent de data[:]
ou seulement data data[datetime.min:datetime.max] # obtenir les
données des dernières 12 heures data[datetime.utcnow() -
timedelta(hours=12):]

-[ Fonctions ]-

+------------+--------------------------------------------------------------------------------------------+
+------------+--------------------------------------------------------------------------------------------+

-[ Classes ]-

+------------+--------------------------------------------------------------------------------------------+
| "data_stor | Stocke les données brutes de la station météo.                                             |
+------------+--------------------------------------------------------------------------------------------+
| "calib_sto | Stocke les données  "calibrées" de la station météo.                                       |
+------------+--------------------------------------------------------------------------------------------+
| "hourly_st | Stocke les données sommaires horaire de la stations météo.                                 |
+------------+--------------------------------------------------------------------------------------------+
| "daily_sto | Stocke les données sommaires quotidiens de la stations météo.                              |
+------------+--------------------------------------------------------------------------------------------+
| "monthly_s | Stocke les données mensuelles sommaire de la stations météo.                               |
+------------+--------------------------------------------------------------------------------------------+
+------------+--------------------------------------------------------------------------------------------+
| "params"(r | Les paramètres sont stockés dans le fichier "weather.ini", dans le répertoire spécifié par |
| oot_dir)   | root_dir.                                                                                  |
+------------+--------------------------------------------------------------------------------------------+

pywws.DataStore.safestrptime(date_string, format=None)

class class pywws.DataStore.params(root_dir)

   Les paramètres sont stockés dans le fichier "weather.ini", dans le
   répertoire spécifié par root_dir.

   flush()

   get(section, option, default=None)

      Obtient une valeur de paramètre et renvoie une chaîne.

      Si la valeur par défaut est spécifiée et la section ou l'option
      n'est pas définie dans le fichier weather.ini, ils sont créés et
      définit par défaut, qui est alors la valeur retournée.

   get_datetime(section, option, default=None)

   set(section, option, value)

      Définit l'option dans la section, à chaîne.

class class pywws.DataStore.core_store(root_dir)

   before(idx)

      Retourne datetime (horodate) du plus récent enregistrement de
      données existant dont datetime est <idx.

      Peut même ne pas être dans la même année! Si aucun
      enregistrement n'existe, retourne None (Aucun).

   after(idx)

      Retourne datetime (horodate) de la plus ancienne donnée
      existante dont datetime est> = idx.

      Peut même ne pas être dans la même année! Si aucun
      enregistrement n'existe, retourne None (Aucun).

   nearest(idx)

      Retourne le datetime (horodate) de l'enregistrement dont le
      datetime est le plus près de idx.

   flush()

class class pywws.DataStore.data_store(root_dir)

   Stocke les données brutes de la station météo.

   key_list = ['idx', 'delay', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'status', 'illuminance', 'uv']

   conv = {'status': <type 'int'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'illuminance': <type 'float'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime at 0x2842de8>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}

class class pywws.DataStore.calib_store(root_dir)

   Stocke les données  "calibrées" de la station météo.

   key_list = ['idx', 'delay', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'rel_pressure', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'status', 'illuminance', 'uv']

   conv = {'status': <type 'int'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'illuminance': <type 'float'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime at 0x2842de8>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'delay': <type 'int'>, 'abs_pressure': <type 'float'>}

class class pywws.DataStore.hourly_store(root_dir)

   Stocke les données sommaires horaire de la stations météo.

   key_list = ['idx', 'hum_in', 'temp_in', 'hum_out', 'temp_out', 'abs_pressure', 'rel_pressure', 'pressure_trend', 'wind_ave', 'wind_gust', 'wind_dir', 'rain', 'illuminance', 'uv']

   conv = {'pressure_trend': <type 'float'>, 'wind_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure': <type 'float'>, 'hum_in': <type 'int'>, 'temp_out': <type 'float'>, 'wind_dir': <type 'int'>, 'hum_out': <type 'int'>, 'wind_gust': <type 'float'>, 'idx': <function safestrptime at 0x2842de8>, 'uv': <type 'int'>, 'temp_in': <type 'float'>, 'illuminance': <type 'float'>, 'abs_pressure': <type 'float'>}

class class pywws.DataStore.daily_store(root_dir)

   Stocke les données sommaires quotidiens de la stations météo.

   key_list = ['idx', 'start', 'hum_out_ave', 'hum_out_min', 'hum_out_min_t', 'hum_out_max', 'hum_out_max_t', 'temp_out_ave', 'temp_out_min', 'temp_out_min_t', 'temp_out_max', 'temp_out_max_t', 'hum_in_ave', 'hum_in_min', 'hum_in_min_t', 'hum_in_max', 'hum_in_max_t', 'temp_in_ave', 'temp_in_min', 'temp_in_min_t', 'temp_in_max', 'temp_in_max_t', 'abs_pressure_ave', 'abs_pressure_min', 'abs_pressure_min_t', 'abs_pressure_max', 'abs_pressure_max_t', 'rel_pressure_ave', 'rel_pressure_min', 'rel_pressure_min_t', 'rel_pressure_max', 'rel_pressure_max_t', 'wind_ave', 'wind_gust', 'wind_gust_t', 'wind_dir', 'rain', 'illuminance_ave', 'illuminance_max', 'illuminance_max_t', 'uv_ave', 'uv_max', 'uv_max_t']

   conv = {'temp_in_min': <type 'float'>, 'temp_in_max': <type 'float'>, 'uv_ave': <type 'float'>, 'temp_out_max': <type 'float'>, 'temp_out_min': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'start': <function safestrptime at 0x2842de8>, 'hum_in_max_t': <function safestrptime at 0x2842de8>, 'uv_max_t': <function safestrptime at 0x2842de8>, 'temp_in_max_t': <function safestrptime at 0x2842de8>, 'abs_pressure_min_t': <function safestrptime at 0x2842de8>, 'illuminance_ave': <type 'float'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x2842de8>, 'wind_gust': <type 'float'>, 'temp_out_min_t': <function safestrptime at 0x2842de8>, 'wind_gust_t': <function safestrptime at 0x2842de8>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x2842de8>, 'temp_out_max_t': <function safestrptime at 0x2842de8>, 'uv_max': <type 'int'>, 'illuminance_max_t': <function safestrptime at 0x2842de8>, 'rel_pressure_max': <type 'float'>, 'temp_in_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x2842de8>, 'hum_out_max': <type 'int'>, 'illuminance_max': <type 'float'>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x2842de8>, 'temp_in_min_t': <function safestrptime at 0x2842de8>, 'hum_out_max_t': <function safestrptime at 0x2842de8>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x2842de8>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x2842de8>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'hum_in_ave': <type 'float'>, 'hum_in_min': <type 'int'>}

class class pywws.DataStore.monthly_store(root_dir)

   Stocke les données mensuelles sommaire de la stations météo.

   key_list = ['idx', 'start', 'hum_out_ave', 'hum_out_min', 'hum_out_min_t', 'hum_out_max', 'hum_out_max_t', 'temp_out_ave', 'temp_out_min_lo', 'temp_out_min_lo_t', 'temp_out_min_hi', 'temp_out_min_hi_t', 'temp_out_min_ave', 'temp_out_max_lo', 'temp_out_max_lo_t', 'temp_out_max_hi', 'temp_out_max_hi_t', 'temp_out_max_ave', 'hum_in_ave', 'hum_in_min', 'hum_in_min_t', 'hum_in_max', 'hum_in_max_t', 'temp_in_ave', 'temp_in_min_lo', 'temp_in_min_lo_t', 'temp_in_min_hi', 'temp_in_min_hi_t', 'temp_in_min_ave', 'temp_in_max_lo', 'temp_in_max_lo_t', 'temp_in_max_hi', 'temp_in_max_hi_t', 'temp_in_max_ave', 'abs_pressure_ave', 'abs_pressure_min', 'abs_pressure_min_t', 'abs_pressure_max', 'abs_pressure_max_t', 'rel_pressure_ave', 'rel_pressure_min', 'rel_pressure_min_t', 'rel_pressure_max', 'rel_pressure_max_t', 'wind_ave', 'wind_gust', 'wind_gust_t', 'wind_dir', 'rain', 'rain_days', 'illuminance_ave', 'illuminance_max_lo', 'illuminance_max_lo_t', 'illuminance_max_hi', 'illuminance_max_hi_t', 'illuminance_max_ave', 'uv_ave', 'uv_max_lo', 'uv_max_lo_t', 'uv_max_hi', 'uv_max_hi_t', 'uv_max_ave']

   conv = {'uv_ave': <type 'float'>, 'illuminance_max_hi_t': <function safestrptime at 0x2842de8>, 'uv_max_lo_t': <function safestrptime at 0x2842de8>, 'temp_out_max_hi_t': <function safestrptime at 0x2842de8>, 'temp_out_max_lo': <type 'float'>, 'abs_pressure_max': <type 'float'>, 'rel_pressure_min_t': <function safestrptime at 0x2842de8>, 'temp_in_min_hi': <type 'float'>, 'temp_in_min_lo': <type 'float'>, 'start': <function safestrptime at 0x2842de8>, 'hum_in_max_t': <function safestrptime at 0x2842de8>, 'rain_days': <type 'int'>, 'abs_pressure_min_t': <function safestrptime at 0x2842de8>, 'temp_out_max_hi': <type 'float'>, 'illuminance_ave': <type 'float'>, 'temp_out_min_lo': <type 'float'>, 'illuminance_max_ave': <type 'float'>, 'uv_max_hi': <type 'int'>, 'rel_pressure_ave': <type 'float'>, 'rain': <type 'float'>, 'temp_out_min_hi': <type 'float'>, 'wind_gust': <type 'float'>, 'temp_in_max_hi_t': <function safestrptime at 0x2842de8>, 'temp_in_max_lo': <type 'float'>, 'temp_in_min_ave': <type 'float'>, 'wind_gust_t': <function safestrptime at 0x2842de8>, 'hum_out_ave': <type 'float'>, 'rel_pressure_min': <type 'float'>, 'hum_out_min_t': <function safestrptime at 0x2842de8>, 'illuminance_max_lo': <type 'float'>, 'temp_in_min_lo_t': <function safestrptime at 0x2842de8>, 'illuminance_max_hi': <type 'float'>, 'temp_out_max_lo_t': <function safestrptime at 0x2842de8>, 'temp_in_max_hi': <type 'float'>, 'rel_pressure_max': <type 'float'>, 'uv_max_hi_t': <function safestrptime at 0x2842de8>, 'temp_in_ave': <type 'float'>, 'uv_max_ave': <type 'float'>, 'temp_in_max_ave': <type 'float'>, 'hum_in_min_t': <function safestrptime at 0x2842de8>, 'hum_out_max': <type 'int'>, 'temp_in_min_hi_t': <function safestrptime at 0x2842de8>, 'temp_out_min_ave': <type 'float'>, 'temp_out_min_hi_t': <function safestrptime at 0x2842de8>, 'wind_ave': <type 'float'>, 'abs_pressure_max_t': <function safestrptime at 0x2842de8>, 'hum_out_max_t': <function safestrptime at 0x2842de8>, 'hum_out_min': <type 'int'>, 'rel_pressure_max_t': <function safestrptime at 0x2842de8>, 'uv_max_lo': <type 'int'>, 'wind_dir': <type 'int'>, 'temp_out_ave': <type 'float'>, 'abs_pressure_ave': <type 'float'>, 'idx': <function safestrptime at 0x2842de8>, 'temp_out_min_lo_t': <function safestrptime at 0x2842de8>, 'illuminance_max_lo_t': <function safestrptime at 0x2842de8>, 'hum_in_max': <type 'int'>, 'abs_pressure_min': <type 'float'>, 'temp_in_max_lo_t': <function safestrptime at 0x2842de8>, 'hum_in_ave': <type 'float'>, 'temp_out_max_ave': <type 'float'>, 'hum_in_min': <type 'int'>}
