pywws.Template

Crée un fichier de données texte basé sur un gabarit

usage: python -m pywws.Template [options] data_dir template_file output_file
options are:
 --help    display this help
data_dir is the root directory of the weather data
template_file is the template text source file
output_file is the name of the text file to be created

Introduction

C’est probablement le module le plus difficile à utiliser dans le logiciel de collecte de la station météo. Il génère des fichiers de texte basé sur un fichier “modèle” ainsi que les données brutes, horaires, quotidiennes et mensuelles de la station météo. Le traitement de gabarits va au-delà de la simple substitution des valeurs pour inclure des boucles, des sauts vers l’avant ou vers l’arrière dans les données, le traitement des données et de substitution des valeurs manquantes.

Un fichier gabarit peut être n’importe quel type de fichier texte (texte brut, xml, html, etc) dans lequel des “instructions de traitement” ont été ajoutées. Ces instructions de traitement sont délimitées par le caractère dièse (‘#’). Ils ne sont pas affichés, mais provoquent autre chose: soit une valeur de données est insérée ou un nombre limité d’actions sont exécutées.

Avant d’écrire vos propres fichiers gabarits, il pourrait être utile d’examiner quelques-uns des exemples dans le répertoire example_templates.

Instructions de traitement

##

affiche un seul caractère ‘#’.

#! comment text#

un commentaire, pas de sortie généré. ‘’ comment text peut être n’importe quel texte sans saut de ligne.

#monthly#

affiche le sommaire des données “mensuelles”. L’indice est réinintialisé à la plus récente valeur

#daily#

affiche le sommaire des données “quotidiennes”. L’indice est réinintialisé à la plus récente valeur

#hourly#

affiche le sommaire des données “horaires”. L’indice est réinintialisé à la plus récente valeur.

#raw#

affiche les données “brutes”. L’indice est réinitialisé à la plus récente valeur.

#timezone name#

converti toute les valeurs de temps en zone de temps name avant affichage. Les valeurs permises sont utc ou local.

#roundtime expr#

met l’arrondissement du temps en fonction ou hors fonction, selon expr. Lorsque l’arrondissement du temps est en fonction, 30 secondes est ajouté à chaque valeur de temps utilisée. Ceci est utile lorsque vous affichez seulement en heures et minutes, exemple avec un format “%H:%M”, et que vous souhaitez qu’une valeur comme 10:23:58 apparaisse ainsi “10:24”. Pour la valeur de expr, utiliser "True" ou "False".

#jump count#

saute count valeurs. L’indice des données est ajusté par count heures ou jours. Des valeures négatives saute en arrière dans le temps.

Dans une boucle, c’est une bonne idée de mettre des sauts à la fin, juste avant l’instruction #endloop. La boucle peut alors se terminer proprement si elle a épuisé toutes les données.

#goto date-time#

aller à date-time. L’indice des données est ajusté à l’enregistrement immédiatement après date-time. Ceci peut être en temps UTC ou dans votre zone de temps local, selon la configuration de timezone, et doit exactement correspondre au format de date ISO, par exemple "2010-11-01 12:00:00" est midi le 1er Novembre 2010.

Des parties de date-time peuvent être remplacées par le caractère de formatage % comme dans strftime pour spécifier l’indice courant de la bouche. Par exemple, "%Y-%m-01 12:00:00" est midi le 1er de ce mois.

#loop count#

démarre une boucle qui se répétera count fois. count doit être égale à 1 ou plus.

#endloop#

termine une boucle démarrée par #loop count# ``. Le traitement du gabarit reviendra à la ligne contenant l'instruction ``#loop count#. Ne pas essayer d’imbriquer des boucles.

#key fmt_string no_value_string conversion#

affiche la valeure d’une donnée. key est la clé de données, par exemple temp_out pour la température extérieure. fmt_string est une chaîne de formatage comme printf (actuellement, l’opérateur % de Python), sauf pour les valeurs datetime, quand il est entré dans la méthode datetime strftime() ``. ``no_value_string est affiché au lieu de fmt_string lorsque la valeur de la donnée est absente, par exemple si la station a perdu contact avec la sonde de température extérieure. conversion ` est une expression Python pour convertir les données, par exemple, pour convertir la vitesse du vent de m/s en mph, vous pouvez utiliser ``"x * 3.6 / 1.609344", ou la fonction fournie plus pratique "wind_mph(x)".

Toutes ces valeurs doivent entre guillemets “si elles contiennent des espaces ou d’autres caractères potentiellement difficiles. Tout sauf key sont facultatifs, mais notez que si vous voulez spécifier une conversion, vous devez également spécifier fmt_string et no_value_string.

#calc expression fmt_string no_value_string conversion#

affiche une valeur calculée à partir d’un ou plusieurs éléments de données. expression représente toute expression Python valide, par exemple, "Dew_point(data['temp_out'], data['hum_out'])" pour calculer le point de rosée. fmt_string, no_value_string et conversion sont tel que décrit ci-dessus. Notez qu’il est probablement plus efficace d’intégrer toute conversion dans l’expression.

Exemple

Voici un extrait qui montre un exemple de l’utilisation de base et avancé des caractéristiques du gabarit. Il fait partie du fichier modèle 6hrs.txt, ce qui génère un tableau HTML de 7 relevés horaires (qui devrait s’étendre sur 6 heures).

#hourly#
#jump -6#
#loop 7#
  <tr>
    <td>#idx "%Y/%m/%d" "" "[None, x][x.hour == 0 or loop_count == 7]"#</td>
    <td>#idx "%H%M %Z"#</td>
    <td>#temp_out "%.1f °C"#</td>
    <td>#hum_out "%d%%"#</td>
    <td>#wind_dir "%s" "-" "winddir_text(x)"#</td>
    <td>#wind_ave "%.0f mph" "" "wind_mph(x)"#</td>
    <td>#wind_gust "%.0f mph" "" "wind_mph(x)"#</td>
    <td>#rain "%0.1f mm"#</td>
    <td>#rel_pressure "%.0f hPa"#, #pressure_trend "%s" "" "pressure_trend_text(x)"#</td>
  </tr>
#jump 1#
#endloop#

Les trois premières lignes de cet extrait, exécutent ce qui suit: sélectionne les données horaires, revient en arrière de 6 heures, commence une boucle avec un nombre de 7. Un saut d’une heure apparaît juste avant la fin du segment répété. Comme ce dernier saut (d’une heure) se produit à chaque tour de la boucle, une séquence de 7 lectures de données sera affichée. La dernière ligne marque la fin de la boucle - tout ce qui est entre les lignes #loop 7# et #endloop# est affiché 7 fois.

Les instructions #temp_out ...#, #hum_out ...#, #rain ... # et #rel_pressure ...# affichent les données de base. Elles utilisent chacune un format de donnée fmt_string pour formater les données de façon appropriée. Les instructions``#wind_ave ...#`` et #wind_gust ...# montrent comment utiliser une expression de conversion pour convertir m/s en mph.

Les instructions #wind_dir ... # et #pressure_trend ... # affichent l’utilisation des fonctions winddir_text et pressure_trend_text pour convertir des valeurs numériques en texte .

Enfin nous arrivons aux valeurs de datetime. L’instruction #idx "%H%M"# affiche simplement l’heure (au format HHMM) de l’indice de donnée. L’instruction #idx "%Y/%m/%d" "" "[None, x] [x.hour == 0 or loop_count == 7]"# est un peu plus compliquée. Elle affiche la date, mais seulement sur la première ligne ou si la date a changée. Elle le fait en indexant le tableau [None, x] avec une expression booléenne vraie quand loop_count est égal à 7 (c’est à dire sur le premier passage dans la boucle) ou x.hour est zéro (c’est la première heure de la journée).

API détaillé

Fonctions

main([argv])

Classes

Template(params, status, calib_data, ...[, ...])
class pywws.Template.Template(params, status, calib_data, hourly_data, daily_data, monthly_data, use_locale=True)[source]
process(live_data, template_file)[source]
make_text(template_file, live_data=None)[source]
make_file(template_file, output_file, live_data=None)[source]
pywws.Template.main(argv=None)[source]