def edit_graph(graph_id): graph = m.Graph.objects.get(id=graph_id) axes = [(None, 'Use column titles for X axis')] choices = [] for i, col in enumerate(graph.table.data['cols']): axes.append((str(i), col['title']['value'])) choices.append((str(i), col['title']['value'])) class Form(wtf.Form): title = wtf.StringField('Graph title') type = wtf.SelectField('Type', choices=m.Graph.type_choices) xaxis = wtf.SelectField('X Axis Column', choices=axes, default=graph.axis) yaxis_title = wtf.TextField('Y Axis title') columns = wtf.CheckListField('Series', choices=choices, default=graph.cols) form = Form(obj=graph) if form.validate_on_submit(): graph.title = form.title.data graph.type = form.type.data graph.axis = form.xaxis.data graph.cols = form.columns.data graph.yaxis_title = form.yaxis_title.data graph.save() flash("Graph updated") return redirect(url_for('index.view_graph', graph_id=graph.id)) return dict(form=form, graph=graph)
def create_graph(table_id): table = m.Table.objects.get(id=table_id) axes = [('-1', 'Use column titles for X axis')] choices = [] for i, col in enumerate(table.data['cols']): axes.append((str(i), col['title']['value'])) choices.append((str(i), col['title']['value'])) class Form(wtf.Form): title = wtf.StringField('Graph Title') type = wtf.SelectField('Type', choices=m.Graph.type_choices) xaxis = wtf.SelectField('X Axis Column', choices=axes) yaxis_title = wtf.TextField('Y Axis title') columns = wtf.CheckListField('Series', choices=choices) form = Form() if form.validate_on_submit(): graph = m.Graph(title=form.title.data, table=table, creator=g.user, type=form.type.data, axis=int(form.xaxis.data), cols=[int(x) for x in form.columns.data], yaxis_title=form.yaxis_title.data) graph.save() flash("Graph created") return redirect(url_for('index.view_graph', graph_id=graph.id)) return dict(form=form, table=table)
def delete_table(table_id): table = m.Table.objects.get(id=table_id) if m.Graph.objects(table=table).count() > 0: flash('Table has existing graphs, delete graphs first') return redirect(url_for('index.tables'), 302) table.delete() flash('Table deleted') return redirect(url_for('index.tables'), 302)
def delete_source(source_id): source = m.Source.objects.get(id=source_id) if m.Table.objects(source=source).count() > 0: flash('Source has existing tables, delete tables first') return redirect(url_for('index.sources'), 302) source.delete() flash('Source deleted') return redirect(url_for('index.sources'), 302)
def deactivate(user_token): try: user = m.User.active.get(token=user_token) except m.DoesNotExist: abort(404) if not g.user.has_role(user.role): return abort(404) user.deactivate(actor=g.user) flash('User deactivated', category='success') return redirect(url_for('.index'))
def reactivate(user_token): try: user = m.User.inactive.get(token=user_token) except m.DoesNotExist: abort(404) if not g.user.has_role(user.role): return abort(404) user.reactivate(actor=g.user) flash("User reactivated and new password issued", category='success') return redirect(url_for('.index'))
def edit(user_token=None): if user_token: try: user = m.User.active.get(token=user_token) except m.DoesNotExist: return abort(404) else: user = m.User() if not g.user.has_role(user.role): return abort(404) role_choices = [ (x[0], x[1]['label']) for x in sorted(m.User.roles().items(), key=lambda x: x[1]['level']) if g.user.has_role(x[0]) ] class Form(wtf.Form): display_name = wtf.TextField('Display name', [wtf.validators.Required()]) email = wtf.TextField('Email address', [wtf.validators.Required(), wtf.validators.Email()]) role = wtf.SelectField('Role', [wtf.validators.Required()], choices=role_choices) country = wtf.SelectField('Country', [wtf.validators.Required()], choices=wtf.country_choices()) timezone = wtf.DependentSelectField( 'Time Zone', [wtf.validators.Required()], parent_field = 'country', select_text = '', choices = wtf.timezone_dependent_choices(), ) def validate_email(form, field): existing = m.User.objects(email=field.data).first() if existing and existing.token != user.token: raise wtf.ValidationError("This email address is already used") form = Form(obj=user) if form.validate_on_submit(): user.display_name = form.display_name.data user.email = form.email.data user.role = form.role.data user.country = form.country.data user.timezone = form.timezone.data user.save() if user_token: audit("Updated user %s" % user.display_name, ['User Management'], [user]) flash("Updated user %s" % user.display_name) else: audit("Added user %s" % user.display_name, ['User Management'], [user]) flash("Added user %s" % user.display_name) return redirect(url_for('.index')) return dict(form=form, add=user_token is None)
def reset_password(user_token): try: user = m.User.active.get(token=user_token) except m.DoesNotExist: abort(404) if not g.user.has_role(user.role): return abort(404) new_password = token.create_token(length=8) user.set_password(new_password) user.save() audit("Reset user password %s" % user.display_name, ['User Management'], [user]) flash_message = user.notify_password_reset(new_password) flash(flash_message, category='success') return redirect(url_for('.index'))
def import_begin(): class Form(wtf.Form): title = wtf.StringField('Title') source = wtf.StringField('Source', description='e.g. Statistics New Zealand') data_file = wtf.FileField( 'File to import', [wtf.validators.Required()], allow_clear = False, ) form = Form() if form.validate_on_submit(): m.Source(title=form.title.data, source=form.source.data, file=form.data_file.data, created=quantum.now('Pacific/Auckland'), creator=g.user, filename=form.data_file.data.file.filename).save() flash('Source "%s" added' % form.title.data) return redirect(url_for('index.sources')) return dict(form=form)
def spreadjs_save(source_id): source = m.Source.get_404(id=source_id) column_data = json.loads(request.form.get('columns')) data = dict(cols=[]) for column in column_data: data['cols'].append(dict( title = dict(value=column['title']), values = [dict(value=x) for x in column['values']], )) table = m.Table( title = request.form.get('table-title'), description = request.form.get('table-description'), creator = g.user, source = source, data = data, ) table.save() flash('Table created') return redirect(url_for('index.view_table', table_id=table.id))
def delete_graph(graph_id): graph = m.Graph.objects.get(id=graph_id) graph.delete() flash('Graph deleted') return redirect(url_for('index.graphs'), 302)