Source code for polyfemos.front.forms
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# This file is part of Polyfemos.
#
# Polyfemos is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or any later version.
#
# Polyfemos is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License and
# GNU General Public License along with Polyfemos. If not, see
# <https://www.gnu.org/licenses/>.'
#
# Author: Henrik Jänkävaara
# -----------------------------------------------------------------------------
"""
Web forms
Forms use :class:`~flask_wtf.FlaskForm` as a base form
:copyright:
2019, University of Oulu, Sodankyla Geophysical Observatory
:license:
GNU Lesser General Public License v3.0 or later
(https://spdx.org/licenses/LGPL-3.0-or-later.html)
"""
from obspy import UTCDateTime
import flask_wtf
from wtforms.fields import (DateField, BooleanField,
FloatField, RadioField, SelectField,
IntegerField, SubmitField, SelectMultipleField)
from polyfemos.front import userdef
[docs]class SubmitForm(flask_wtf.FlaskForm):
"""
A web form for submit button.
"""
submit = SubmitField(u'Submit')
[docs]class SingleDateForm(flask_wtf.FlaskForm):
"""
A web form for submitting a single date.
"""
date = DateField(u'Date', default=UTCDateTime().now().date,
format='%Y-%m-%d')
[docs]class DateForm(flask_wtf.FlaskForm):
"""
A web form for submitting start and end dates.
"""
startdate = DateField(u'Startdate', default=UTCDateTime().now().date,
format='%Y-%m-%d')
enddate = DateField(u'Enddate', default=UTCDateTime().now().date,
format='%Y-%m-%d')
[docs]class StationsForm(flask_wtf.FlaskForm):
"""
A web form for submitting a station selection as a string
"""
_choices = [(s, s) for s in userdef.station_ids()]
station_ids = SelectMultipleField(u'Stations', choices=_choices)
[docs]class SelectNetworkForm(flask_wtf.FlaskForm):
"""
A web form to select network
"""
_choices = [(s, s) for s in userdef.network_codes()]
network_code = SelectField(u'Select Network', choices=_choices)
[docs]class DatacoverageForm(SubmitForm, DateForm, StationsForm):
"""
A web form for :func:`~polyfemos.front.main.datacoveragebrowser`.
"""
_choices = [(s, s) for s in userdef.channel_codes()]
channel_codes = SelectMultipleField(u'Channels', choices=_choices)
[docs]class HeaderdateForm(flask_wtf.FlaskForm):
"""
A web form for submitting a single date
"""
headerdate = DateField(u'Headerdate', default=UTCDateTime().now().date,
format='%Y-%m-%d')
[docs]class RIRVForm(flask_wtf.FlaskForm):
"""
A web form for 'Remove irrational values' check box
"""
rirv = BooleanField(u'Remove irrational values', default="")
[docs]class FileFormatForm(flask_wtf.FlaskForm):
"""
Web form for selecting input fileformat
"""
_choices = [(s, s) for s in ["csv", "stf"]]
fromfileformat = SelectField(u'Read from', choices=_choices)
[docs]class SummaryForm(SubmitForm, DateForm, HeaderdateForm, RIRVForm,
FileFormatForm, StationsForm):
"""
A web form for :func:`~polyfemos.front.main.summary`.
"""
aor = BooleanField(u'Advanced outlier removal', default="")
csv_requested = BooleanField(u'Download csv', default="")
_choices = [(s, s) for s in userdef.sohpars(visibilities={1, 2, 3})]
sohpar_names = SelectMultipleField(u'Sohpars', choices=_choices)
[docs]class PlotbrowserForm(SubmitForm, StationsForm, DateForm, FileFormatForm,
HeaderdateForm, RIRVForm):
"""
A web form for :func:`~polyfemos.front.main.plotbrowser`.
"""
_choices = [(s, s) for s in userdef.sohpars(visibilities={1, 2, 3})]
sohpar_names = SelectMultipleField(u'Sohpars', choices=_choices)
decimate = BooleanField(u'Decimate', default="checked")
ridv = BooleanField(u'Remove identical values', default="checked")
track_len = BooleanField(u'Track data length', default="checked")
aor = RadioField(u'Advanced outlier removal', choices=[
('null', 'None'),
('dtr', 'DTR'),
('sta', 'STALTA'),
('lip', 'Lipschitz'),
])
dtr_maxdepth = IntegerField(u'maxdepth', default=0)
dtr_scale = FloatField(u'scale', default=24000)
dtr_medlim = FloatField(u'medlim', default=10)
sta_nsta = IntegerField(u'nsta', default=3)
sta_nlta = IntegerField(u'nlta', default=10)
sta_threson = FloatField(u'threson', default=1.08)
sta_thresoff = FloatField(u'thresoff', default=1.05)
sta_offset = IntegerField(u'offset', default=40)
lip_itern = IntegerField(u'itern', default=1)
lip_klim = FloatField(u'klim', default=7e-5)
[docs]class SohTableForm(SubmitForm, SingleDateForm):
"""
A web form for :func:`~polyfemos.front.main.sohtable`.
"""
show_all = BooleanField(u'Show all', default="checked")
submit_pd = SubmitField(u'+date')
submit_sd = SubmitField(u'-date')
realtimeness_limit = IntegerField(u'Realtimeness limit', default=120)
realtimeness_bool = BooleanField(u'Realtimeness filter',
default="checked")
[docs]class AlertHeatForm(SubmitForm, DateForm):
"""
A web form for :func:`~polyfemos.front.main.alertheat`.
"""
log_color = BooleanField(u'Logarithmic color', default="")
_choices = [(int(s), s) for s in "012"]
points_per_thbb = SelectField(u'Points per thbb', choices=_choices,
default=1, coerce=int)
points_per_tib = SelectField(u'Points per tib', choices=_choices,
default=2, coerce=int)