Commit 5f1e0773 authored by Nelso Jost's avatar Nelso Jost

FIX: Save sensor on board insertion

parent d96e5cdd
......@@ -3,6 +3,7 @@ from wtforms import SelectField, FileField, SubmitField, StringField, \
TextAreaField, BooleanField
from wtforms.widgets import FileInput
from wtforms.validators import Required, Length, Regexp, EqualTo
from wtforms import ValidationError
from flask import session, request, redirect, url_for, current_app
from flask.ext.login import current_user
......@@ -73,16 +74,16 @@ class BoardSelectionForm(Form):
class ManageBoardForm(Form):
board_nickname = StringField('Apelido', validators=[
Required("Preenchimento obrigatório"),
Length(3, 20, "Deve possuir entre 3 e 20 caracteres"),
Required("Preenchimento obrigatório!"),
Length(3, 20, "Deve possuir entre 3 e 20 caracteres!"),
Regexp('^[A-Za-z][A-Za-z0-9_]*$', 0,
"Deve possuir apenas letras letras, números ou sublinhados.")])
"Deve possuir apenas letras letras, números ou sublinhados!")])
board_latitude = StringField('Latitude')
board_longitude = StringField('Longitude')
board_description = TextAreaField('Descrição')
_SESSION_KEY = 'manage_board_form'
_SESSION_KEY = 'MANAGE_BOARD_FORM_SENSORS'
def __init__(self):
super().__init__(request.form)
......@@ -99,10 +100,9 @@ class ManageBoardForm(Form):
def update_session(self):
for component, value in request.form.items():
if component.startswith('sensor_'):
field = component[1:component.rfind('_')]
field = component[component.find('_')+1:component.rfind('_')]
i = int(component[component.rfind('_')+1:])
session[self._SESSION_KEY][i][field] = value
pprint(session[self._SESSION_KEY])
def init_sensor_list_forms(self):
if not self._SESSION_KEY in session: return []
......@@ -118,31 +118,53 @@ class ManageBoardForm(Form):
return forms
def add_sensor(self):
pass
# pprint(self.sensors)
# pprint(session[self._SESSION_KEY])
i = len(self.sensors)
f = SensorListItemForm()
f.index = i
for field in SensorListItemForm.empty_json:
getattr(f, field).name = 'sensor_' + field + '_' + str(i)
session[self._SESSION_KEY].append(SensorListItemForm.empty_json.copy())
self.sensors.append(f)
# print('After add')
# pprint(self.sensors)
# pprint(session[self._SESSION_KEY])
def delete_sensor(self):
# there was any btn_delete_sensor click?
for key in request.form:
if 'btn_delete_sensor' in key:
del session[self._SESSION_KEY][int(key[key.rfind('_')+1:])]
i = int(key[key.rfind('_')+1:])
del session[self._SESSION_KEY][i]
del self.sensors[i]
break
def validate_and_save(self):
# print('updating session...')
# pprint(request.form)
self.update_session()
print('validating...')
# print('think i am done')
# pprint(session[self._SESSION_KEY])
# print('validating...')
if self.validate():
try:
d = {k[k.find('_')+1:]: v for k, v in request.form.items()
if k.startswith('board_')}
d.update(user=current_user)
d.update(user=current_user,
sensors=session[self._SESSION_KEY])
board = Board.add(**d)
print(board)
# print(board)
db.session.commit()
return board
except Exception as e:
print('Exception: ', e)
else:
print('invalid!')
def validate_board_nickname(self, field):
if Board.query.filter_by(nickname=field.data).first():
raise ValidationError("Usuário '{}' já possui uma estação com "
"esse nome!".format(current_user.username))
class SensorListItemForm(Form):
nickname = StringField('Apelido', validators=[
......@@ -172,7 +194,7 @@ class SensorListItemForm(Form):
'description': ''}
def update_unity_label(self, value=None):
if self.measurement_name.data != '':
if self.measurement_name.data not in (-1, ''):
self.unity_label.choices = [
(um.unity.label, um.unity.label) for um in
Measurement.query.filter_by(name = self.measurement_name.data)
......
......@@ -109,6 +109,7 @@ def view_insert_board():
# pprint(request.form)
if request.method == 'POST':
pprint(request.form)
# got any button click? if so, the btn will appear on the request.form
if 'btn_cancel' in request.form:
return redirect(url_for('main.index'))
......
......@@ -2,6 +2,10 @@
margin: 20px;
}
.basepar {
font-size: 16px;
}
/* navbar
.navbar-default {
background-color: #557ec8;
......
......@@ -7,14 +7,14 @@
<hr>
<h1>Projeto Estações Meteorológicas Modulares</h1>
<p>Este site é dedicado ao armazenamento de dados meteorológicos relativos ao <a href="http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Wiki">projeto EMM</a> do grupo CTA da Universidade Federal do Rio Grande do Sul, bem como a qualquer um que deseje contribuir com dados da sua própria estação. O objetivo é conceber uma rede pública de dados que podem ser validados e manipulados conforme a necessidade do projeto para monitoramento de microclimas.</p>
<h3>Arduino-Meteorolog</h3>
<p>As estações modulares do projeto EMM baseiam-se na placa Arduino e sensores de baixo custo. A documentação sobre o software (firmware + data logger) contendo informações sobre obtenção e uso encontra-se em nosso</p>
<a href="https://git.cta.if.ufrgs.br/meteorolog/arduino-meteorolog/wikis/home">Repositório Gitlab</a>
<br>
<p class="basepar">Este site é um <b>protótipo</b> para armazenamento de dados meteorológicos relativos ao <a href="http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Wiki">projeto EMM</a> do grupo CTA, da Universidade Federal do Rio Grande do Sul (Porto Alegre - RS). <br><br>
Tendo como filosofia base o uso de tecnologias livres, o objetivo desse projeto é conceber uma rede aberta de dados meteorológicos de qualidade atestável para monitoramento de microclimas. As estações modulares do projeto EMM baseiam-se na placa Arduino e sensores de baixo custo, onde a coleta de dados e o respectivo armazenamento nesse servidor é alcançado com o seguinte software: <br><br>
<h4><a href="https://git.cta.if.ufrgs.br/meteorolog/logger/wikis/home">Meteorolog</a></>
</p>
</div>
{% endblock %}
......@@ -7,7 +7,7 @@
<form id="bootstrapSelectForm" method='POST' class="form-horizontal"
enctype=multipart/form-data>
{% if form.errors %}
{#% if form.errors %}
<ul class="errors">
{% for field_name, field_errors in form.errors|dictsort if field_errors %}
{% for error in field_errors %}
......@@ -15,7 +15,7 @@
{% endfor %}
{% endfor %}
</ul>
{% endif %}
{% endif %#}
{{ form.csrf_token }}
......@@ -94,6 +94,7 @@
</tbody>
</table>
<div class="panel-body">
<button type="submit" method="POST" name="btn_add_sensor"
......
......@@ -57,8 +57,9 @@ Where [command] can be:
# changes permanently on the database
'''
import os
from getpass import getpass
if not 'EMMPASS' in os.environ:
os.environ['EMMPASS'] = input('EMMPASS=')
os.environ['EMMPASS'] = getpass('EMMPASS=')
if not 'EMMCONFIG'in os.environ:
os.environ['EMMCONFIG'] = input('EMMCONFIG=')
......
......@@ -5,8 +5,11 @@ import sys
import subprocess
import time
from getpass import getpass
if not 'EMMPASS' in os.environ:
os.environ['EMMPASS'] = input('EMMPASS=')
os.environ['EMMPASS'] = getpass('EMMPASS=')
EMMPASS = os.environ['EMMPASS']
parser = argparse.ArgumentParser(
......@@ -21,7 +24,6 @@ args = vars(parser.parse_args())
def make_path_here(filename):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), filename)
# this assumes that the deploy script was launched from the root directory
# of the project
APP_PATH = os.path.abspath('.')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment