/
views.py
104 lines (92 loc) · 3.96 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from pyramid.traversal import resource_path
from pyramid.traversal import find_resource
from pyramid.renderers import render_to_response
import colander
from deform import Form
from deform.widget import TextAreaWidget
from resources import Folder
from resources import Document
class FolderSchema(colander.Schema):
title = colander.SchemaNode(colander.String())
class DocumentSchema(colander.Schema):
title = colander.SchemaNode(colander.String())
content = colander.SchemaNode(colander.String(), widget=TextAreaWidget())
class SearchSchema(colander.Schema):
term = colander.SchemaNode(colander.String())
class ProjectorViews(object):
def __init__(self, context, request):
self.context = context
self.request = request
self.root = self.request.root
self.catalog = self.root.catalog
self.document_map = self.root.document_map
@view_config(renderer="templates/folder_view.pt")
def folder_view(self):
schema = SearchSchema()
form = Form(schema, buttons=('submit',))
if 'submit' in self.request.POST:
term = self.request.POST['term']
query = "'%s' in title or '%s' in content" % (term, term)
num, results = self.catalog.query(query)
results = [self.document_map.address_for_docid(result)
for result in results]
results = [find_resource(self.root, result)
for result in results]
values = {'num': num,
'results':results,
'request':self.request,
'context':self.context,
'term':term}
return render_to_response('templates/search.pt', values)
return {"search_form": form.render()}
@view_config(name="add_folder", context=Folder, renderer="templates/form.pt")
def add_folder(self):
schema = FolderSchema()
form = Form(schema, buttons=('submit',))
if 'submit' in self.request.POST:
# Make a new Folder
title = self.request.POST['title']
doc_id = self.document_map.new_docid()
name = "folder%s" % doc_id
new_folder = Folder(title)
new_folder.__name__ = name
new_folder.__parent__ = self.context
self.context[name] = new_folder
# map object path to catalog id
path = resource_path(new_folder)
self.document_map.add(path, doc_id)
# index new folder
self.catalog.index_doc(doc_id, new_folder)
# Redirect to the new folder
url = self.request.resource_url(new_folder)
return HTTPFound(location=url)
return {"form": form.render()}
@view_config(name="add_document", context=Folder, renderer="templates/form.pt")
def add_document(self):
schema = DocumentSchema()
form = Form(schema, buttons=('submit',))
if 'submit' in self.request.POST:
# Make a new Document
title = self.request.POST['title']
content = self.request.POST['content']
doc_id = self.document_map.new_docid()
name = "document%s" % doc_id
new_document = Document(title, content)
new_document.__name__ = name
new_document.__parent__ = self.context
self.context[name] = new_document
# map object path to catalog id
path = resource_path(new_document)
self.document_map.add(path, doc_id)
# index new folder
self.catalog.index_doc(doc_id, new_document)
# Redirect to the new document
url = self.request.resource_url(new_document)
return HTTPFound(location=url)
return {"form": form.render()}
@view_config(renderer="templates/document_view.pt",
context=Document)
def document_view(self):
return {}