128 lines
3.6 KiB
Python
128 lines
3.6 KiB
Python
import colander
|
|
import deform.widget
|
|
|
|
from pyramid.httpexceptions import HTTPFound
|
|
from pyramid.view import view_config
|
|
|
|
from .models import (
|
|
DBSession,
|
|
Config,
|
|
Device_type,
|
|
Device,
|
|
Doc,
|
|
Tag,
|
|
Tag_val,
|
|
Card,
|
|
GaugeOffVal,
|
|
WellTest,
|
|
Note,
|
|
EventConfig,
|
|
Event,
|
|
RunStatus,
|
|
FluidShot,
|
|
BackupRestore
|
|
)
|
|
|
|
|
|
class WikiPage(colander.MappingSchema):
|
|
title = colander.SchemaNode(colander.String())
|
|
body = colander.SchemaNode(
|
|
colander.String(),
|
|
widget=deform.widget.RichTextWidget()
|
|
)
|
|
|
|
class ConfigCol(colander.MappingSchema):
|
|
parameter = colander.SchemaNode(colander.string())
|
|
val = colander.SchemaNode(colander.string())
|
|
|
|
|
|
class ConfigViews(object):
|
|
def __init__(self, request):
|
|
self.request = request
|
|
|
|
@view_config(route_name='config', renderer='json')
|
|
def get_config(self):
|
|
id = int(self.request.matchdict['id'])
|
|
config = DBSession.query(Config).filter_by(_id=id).one()
|
|
return dict(config=config)
|
|
|
|
|
|
class WikiViews(object):
|
|
def __init__(self, request):
|
|
self.request = request
|
|
|
|
@property
|
|
def wiki_form(self):
|
|
schema = WikiPage()
|
|
return deform.Form(schema, buttons=('submit',))
|
|
|
|
@property
|
|
def reqts(self):
|
|
return self.wiki_form.get_widget_resources()
|
|
|
|
@view_config(route_name='wiki_view', renderer='wiki_view.pt')
|
|
def wiki_view(self):
|
|
pages = DBSession.query(Page).order_by(Page.title)
|
|
return dict(title='Wiki View', pages=pages)
|
|
|
|
@view_config(route_name='wikipage_add',
|
|
renderer='wikipage_addedit.pt')
|
|
def wikipage_add(self):
|
|
form = self.wiki_form.render()
|
|
|
|
if 'submit' in self.request.params:
|
|
controls = self.request.POST.items()
|
|
try:
|
|
appstruct = self.wiki_form.validate(controls)
|
|
except deform.ValidationFailure as e:
|
|
# Form is NOT valid
|
|
return dict(form=e.render())
|
|
|
|
# Add a new page to the database
|
|
new_title = appstruct['title']
|
|
new_body = appstruct['body']
|
|
DBSession.add(Page(title=new_title, body=new_body))
|
|
|
|
# Get the new ID and redirect
|
|
page = DBSession.query(Page).filter_by(title=new_title).one()
|
|
new_uid = page.uid
|
|
|
|
url = self.request.route_url('wikipage_view', uid=new_uid)
|
|
return HTTPFound(url)
|
|
|
|
return dict(form=form)
|
|
|
|
|
|
@view_config(route_name='wikipage_view', renderer='wikipage_view.pt')
|
|
def wikipage_view(self):
|
|
uid = int(self.request.matchdict['uid'])
|
|
page = DBSession.query(Page).filter_by(uid=uid).one()
|
|
return dict(page=page)
|
|
|
|
|
|
@view_config(route_name='wikipage_edit',
|
|
renderer='wikipage_addedit.pt')
|
|
def wikipage_edit(self):
|
|
uid = int(self.request.matchdict['uid'])
|
|
page = DBSession.query(Page).filter_by(uid=uid).one()
|
|
|
|
wiki_form = self.wiki_form
|
|
|
|
if 'submit' in self.request.params:
|
|
controls = self.request.POST.items()
|
|
try:
|
|
appstruct = wiki_form.validate(controls)
|
|
except deform.ValidationFailure as e:
|
|
return dict(page=page, form=e.render())
|
|
|
|
# Change the content and redirect to the view
|
|
page.title = appstruct['title']
|
|
page.body = appstruct['body']
|
|
url = self.request.route_url('wikipage_view', uid=uid)
|
|
return HTTPFound(url)
|
|
|
|
form = self.wiki_form.render(dict(
|
|
uid=page.uid, title=page.title, body=page.body)
|
|
)
|
|
|
|
return dict(page=page, form=form) |