From 0e26143ee2658ab8dec1b247a6d6cca2b529e565 Mon Sep 17 00:00:00 2001 From: Guyot Date: Sun, 19 Apr 2020 23:17:19 +0200 Subject: [PATCH] Premier commit --- Fonctionnel.txt | 16 +++++ data1.csv | 4 ++ data2.csv | 6 ++ data3.csv | 6 ++ data3.txt | 6 ++ weight-cli.py | 180 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 218 insertions(+) create mode 100644 Fonctionnel.txt create mode 100644 data1.csv create mode 100644 data2.csv create mode 100644 data3.csv create mode 100644 data3.txt create mode 100644 weight-cli.py diff --git a/Fonctionnel.txt b/Fonctionnel.txt new file mode 100644 index 0000000..391cb48 --- /dev/null +++ b/Fonctionnel.txt @@ -0,0 +1,16 @@ +#set term dumb 50 20 +set term dumb #nofeed +set title 'Courbe de poids' +set timefmt "%Y-%m-%d %H:%M:%S" +set xdata time +set xmtics +set xlabel "Mois" +#set xtics format "%Y-%d-%m" +set x2data time +set x2label "Années" +set x2tics format "%Y" +set xtics nomirror + +set datafile separator '|' +plot 'data.csv' using 3:1 pt '.' title '' +#pause -1 'En attente de RETURN' diff --git a/data1.csv b/data1.csv new file mode 100644 index 0000000..bfc1ed2 --- /dev/null +++ b/data1.csv @@ -0,0 +1,4 @@ +value|type|date|metric|id|comment| +101|WEIGHT|2015-10-03 03:30:13|true|| Après petite grippe| +102|WEIGHT|2015-10-04 09:35:57|true||null| +101|WEIGHT|2015-10-05 09:50:00|true||null| diff --git a/data2.csv b/data2.csv new file mode 100644 index 0000000..66fa8eb --- /dev/null +++ b/data2.csv @@ -0,0 +1,6 @@ +6|WEIGHT|2020-04-15 11:16:58|True| |6e test| +7|WEIGHT|2020-04-15 11:18:06|True| |7e test| +8|WEIGHT|2020-04-15 11:26:06|true||8e test| +9|WEIGHT|2020-04-15 11:27:45|true||9e test| +10|WEIGHT|2020-04-15 11:39:12|true||10e test| +10.1|WEIGHT|2020-04-15 15:22:22|true||11e test| diff --git a/data3.csv b/data3.csv new file mode 100644 index 0000000..31b7a81 --- /dev/null +++ b/data3.csv @@ -0,0 +1,6 @@ +6|WEIGHT|2020-04-15 11:16:58 +7|WEIGHT|2020-04-15 11:18:06 +8|WEIGHT|2020-04-15 11:26:06 +9|WEIGHT|2020-04-15 11:27:45 +10|WEIGHT|2020-04-15 11:39:12 +10.1|WEIGHT|2020-04-15 15:22:22 diff --git a/data3.txt b/data3.txt new file mode 100644 index 0000000..279bbbb --- /dev/null +++ b/data3.txt @@ -0,0 +1,6 @@ +2020-04-15 11:16:58|6 +2020-04-15 11:18:06|7 +2020-04-15 11:26:06|8 +2020-04-15 11:27:45|9 +2020-04-15 11:39:12|10 +2020-04-15 15:22:22|10.1 diff --git a/weight-cli.py b/weight-cli.py new file mode 100644 index 0000000..21fe3a2 --- /dev/null +++ b/weight-cli.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import csv +import argparse +from clint.textui import puts, colored, indent +from clint.textui import columns +#import pytz +#import tzlocal +import time +from datetime import datetime, timedelta, date +import dateutil.parser +from dateutil.rrule import rrulestr +#from icalendar import Calendar,Event,Todo,Journal,Alarm +#import caldav +#import uuid +#import json +import os +#import logging +import sys +#import re +#import urllib3 +#from getpass import getpass +#from sympy import symbols +#from sympy.plotting import textplot +import subprocess +from subprocess import Popen, PIPE +import numpy as np + +""" +Une mesure est caractérisée par : + - sa valeur + - son type + - sa date + - sa métrique + - son identifiant + - un commentaire + - autre +""" + +def save_mesure(): + ''' Affichage et enregistrement d'une mesure ''' + print("Votre mesure a été enregistrée : ") + with indent(4, quote=colored.blue('')): + puts(colored.green("-votre poids : {weight} kg").format(weight=args.weight)) + puts("-son type : {typ}".format(typ=args.type)) + puts("-la date : {dat}".format(dat=args.date)) + puts("-la métrique : {metric}".format(metric=args.metric)) + puts("-l'identifiant : {ide}".format(ide=args.id)) + puts("-votre commentaire : {comment}".format(comment=args.comment)) + puts("-autre : {other}".format(other=args.other)) + with open(str(args.data), 'a', newline='\n') as csvfile: + weightwriter = csv.writer(csvfile, delimiter='|', quotechar='"', quoting=csv.QUOTE_MINIMAL) + weightwriter.writerow([str(args.weight), \ + str(args.type), \ + str(datetime.now().strftime("%Y-%m-%d %H:%M:%S")), \ + str(args.metric), str(args.id), \ + str(args.comment), \ + str(args.other)]) + +def read_measures(): + ''' Affichage de l'ensemble des mesures ''' + data_file = open(str(args.data), 'r') + data = csv.reader(data_file, delimiter='|') + linenum = 0 + for row in data: + with indent(2, quote=colored.blue('')): + puts(columns([(colored.red(str(linenum))), 4], \ + [(colored.green(str(row[0])+' kg')), 15], \ + [(str(row[1])),10], \ + [(colored.yellow(str(row[2]))),25], \ + [(str(row[3])),6], \ + [(str(row[4])),4], \ + [(colored.magenta(str(row[5]))),20])), \ + [(str(row[6])),10] + linenum += 1 + data_file.close() + +def remove_measure(): + ''' Supprime une mesure ''' + f = open(args.data, "r") + contents = f.readlines() + f.close() + # remove the line item from list, by line number, starts from 0 + contents.pop(args.remove) + + f = open(args.data, "w") + contents = "".join(contents) + f.write(contents) + f.close() + +def trace_graph(): + ''' Trace le graphe de l'évolution du poids avec Gnuplot ''' + #process = Popen(['gnuplot', 'Fonctionnel.txt'], stdout=PIPE, stderr=PIPE) + process = Popen(['gnuplot', 'Fonctionnel.txt'])#, stdout=PIPE, stderr=PIPE) + stdout, stderr = process.communicate() + #print(stdout) + + +def tests_subproc(): + ''' Test du module subprocess ''' + process = Popen(['cat', 'data2.csv'], stdout=PIPE, stderr=PIPE) + stdout, stderr = process.communicate() + print(stdout) + +### Main ### +''' Programme de relevé de poids + Attention, le fichier data.csv à une ligne d'entête à laquelle + il manque un séparateur | final pour que le nombre de champs soit + correct. +''' + +# Création du parseur pour les arguments +parser = argparse.ArgumentParser() +# Création des arguments +parser.add_argument('-da', '--data', + default='data2.csv', + help='optional data' +) +parser.add_argument('-w', '--weight', + type=float, + default=-1, + help='optional weight' +) +parser.add_argument('-t', '--type', + default='WEIGHT', + help='optional type' +) +parser.add_argument('-d', '--date', + default=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + help='optional date' +) +parser.add_argument('-i', '--id', + default='', + help='optional id' +) +parser.add_argument('-m', '--metric', + default='true', + help='optional metric' +) +parser.add_argument('-c', '--comment', + default=' ', + help='optional comment' +) +parser.add_argument('-o', '--other', + default='', + help='optional other' +) +parser.add_argument('-r', '--read', + help='optional read measures', + action='store_true' +) +parser.add_argument('-rem', '--remove', + type=int, + default='-1', + help='optional delete a measure by its number in the list' +) +parser.add_argument('-g', '--graph', + help='optional delete a measure by its number in the list', + action='store_true' +) +parser.add_argument('-tst', '--tests', + help='optional tests operations', + action='store_true' +) +# Récupération des arguments +args = parser.parse_args() +# Lancement des actions +if args.weight != -1: + save_mesure() +if args.read: + read_measures() +if args.remove >= 0: + remove_measure() +if args.graph: + trace_graph() +if args.tests: + tests_subproc() + +