annotate bitsyblog/bitsyblog.py @ 94:fa221a2d24d9

wow; old + crufty
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 24 Apr 2013 09:07:15 -0700
parents d29100da202a
children a20fd4fef727
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
1 """
81
77aaa99c8221 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 80
diff changeset
2 a tiny tiny blog.
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
3 this is the view class and is more bitsyblog than anything
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
4 else can claim to be
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
5 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
6
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
7 ### imports
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
8
28
e54a6405a496 display errors for preferences form
k0s <k0scist@gmail.com>
parents: 27
diff changeset
9 import dateutil.parser
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
10
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
11 import datetime
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
12 import docutils
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
13 import docutils.core
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
14 import inspect
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
15 import os
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
16 import PyRSS2Gen
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
17 import re
4
60cfc4b825f0 order imports
k0s <k0scist@gmail.com>
parents: 3
diff changeset
18
81
77aaa99c8221 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 80
diff changeset
19 import utils
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
20
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
21 from blog import FileBlog
4
60cfc4b825f0 order imports
k0s <k0scist@gmail.com>
parents: 3
diff changeset
22 from cStringIO import StringIO
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
23 from docutils.utils import SystemMessage
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
24 from genshi.builder import Markup
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
25 from genshi.template import TemplateLoader
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
26 from paste.fileapp import FileApp
71
0c98d1c2c6df fix syntax errors
Jeff Hammel <jhammel@mozilla.com>
parents: 70
diff changeset
27 from pkg_resources import iter_entry_points
6
3198742f7a86 notes to self
k0s <k0scist@gmail.com>
parents: 4
diff changeset
28 from pkg_resources import resource_filename
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
29 from StringIO import StringIO
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
30 from urlparse import urlparse
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
31 from webob import Request, Response, exc
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
32
59
0af1f4ae328d fix a couple of basic things
egj@socialplanning.org
parents: 58
diff changeset
33 from roles import roles
0af1f4ae328d fix a couple of basic things
egj@socialplanning.org
parents: 58
diff changeset
34
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
35 ### exceptions
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
36
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
37 class BlogPathException(Exception):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
38 """exception when trying to retrieve the blog"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
39
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
40 ### the main course
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
41
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
42 class BitsyBlog(object):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
43 """a very tiny blog"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
44
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
45 ### class level variables
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
46 defaults = { 'date_format': '%H:%M %F', # default date format
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
47 'file_dir': os.path.dirname(__file__), # where the blog is kept
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
48 'subject': '[ %(date)s ]:', # default subject
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
49 'n_links': 5, # number of links for navigation
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
50 'site_name': 'bitsyblog', # name of the site (needed?)
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
51 'header': None, # text to insert as first child of body'
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
52 'template_directories': '', # space separated template_directories
88
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
53 'auto_reload': True, # reload the genshi templates
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
54 'help_file': None, # help to display
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
55 'feed_items': 10, # number of RSS/atom items to display
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
56 'post_handlers': '', # post handlers
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
57 'rss_html': True, # whether to render rss descriptions as HTML
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
58 }
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
59
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
60 cooked_bodies = {}
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
61
70
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
62 def __init__(self, kw, handler_args):
88
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
63
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
64 # set values from defaults and kw
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
65 for key, value in self.defaults.items():
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
66 kw_value = kw.get(key, value)
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
67
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
68 # convert kw_value to the proper type
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
69 _type = type(value)
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
70 if isinstance(kw_value, basestring) and not issubclass(_type, basestring) and value is not None:
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
71 if _type == bool:
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
72 kw_value = kw_value.lower() == 'true'
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
73 else:
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
74 kw_value = _type(kw_value)
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
75 setattr(self, key, kw_value)
a3a7ac9102dc better choosing of types
Jeff Hammel <jhammel@mozilla.com>
parents: 87
diff changeset
76
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
77 self.response_functions = {'GET': self.get,
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
78 'POST': self.post,
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
79 'PUT': self.put
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
80 }
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
81
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
82 # abstract attributes
59
0af1f4ae328d fix a couple of basic things
egj@socialplanning.org
parents: 58
diff changeset
83 from user import FilespaceUsers
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
84 self.users = FilespaceUsers(self.file_dir)
71
0c98d1c2c6df fix syntax errors
Jeff Hammel <jhammel@mozilla.com>
parents: 70
diff changeset
85 self.blog = FileBlog(self.file_dir)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
86 self.cooker = self.restructuredText
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
87
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
88 # template renderer
52
3ddb2ca12178 allow for multiple template directories
k0s <k0scist@gmail.com>
parents: 51
diff changeset
89 self.template_directories = self.template_directories.split() # no spaces in directory names, for now
63
e3c72e2c881e better error message
egj@socialplanning.org
parents: 60
diff changeset
90
e3c72e2c881e better error message
egj@socialplanning.org
parents: 60
diff changeset
91 for directory in self.template_directories:
e3c72e2c881e better error message
egj@socialplanning.org
parents: 60
diff changeset
92 assert os.path.isdir(directory), "Bitsyblog template directory %s does not exist!" % directory
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
93
52
3ddb2ca12178 allow for multiple template directories
k0s <k0scist@gmail.com>
parents: 51
diff changeset
94 self.template_directories.append(resource_filename(__name__, 'templates'))
3ddb2ca12178 allow for multiple template directories
k0s <k0scist@gmail.com>
parents: 51
diff changeset
95 self.loader = TemplateLoader(self.template_directories,
3ddb2ca12178 allow for multiple template directories
k0s <k0scist@gmail.com>
parents: 51
diff changeset
96 auto_reload=self.auto_reload)
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
97
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
98 # helpfile
3
1368be6c3b70 fix self.help_file
k0s <k0scist@gmail.com>
parents: 0
diff changeset
99 if self.help_file and os.path.exists(self.help_file):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
100 help = file(self.help_file).read()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
101 self.help = docutils.core.publish_string(help,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
102 writer_name='html',
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
103 settings_overrides={'report_level': 5})
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
104
50
cf77bd13aad9 add support for headers
k0s <k0scist@gmail.com>
parents: 48
diff changeset
105 # header
cf77bd13aad9 add support for headers
k0s <k0scist@gmail.com>
parents: 48
diff changeset
106 if self.header:
51
c7819dbf7733 allow files as headers
k0s <k0scist@gmail.com>
parents: 50
diff changeset
107 if os.path.exists(self.header):
c7819dbf7733 allow files as headers
k0s <k0scist@gmail.com>
parents: 50
diff changeset
108 self.header = file(self.header).read()
50
cf77bd13aad9 add support for headers
k0s <k0scist@gmail.com>
parents: 48
diff changeset
109 self.header = Markup(self.header)
cf77bd13aad9 add support for headers
k0s <k0scist@gmail.com>
parents: 48
diff changeset
110
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
111 # for BitsyAuth
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
112 self.newuser = self.users.new
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
113
70
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
114 # post handlers
72
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
115 self.post_handlers = [ i for i in self.post_handlers.split() if i ]
70
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
116 self.handlers = [] # handlers for blog post event
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
117 for entry_point in iter_entry_points('bitsyblog.listeners'):
72
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
118 if entry_point.name in self.post_handlers:
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
119 try:
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
120 handler = entry_point.load()(self, **handler_args.get(entry_point.name, {}))
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
121 self.handlers.append(handler)
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
122 except:
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
123 print 'Cant load entry point %s' % entry_point.name
72
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
124 raise
70
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
125
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
126 ### methods dealing with HTTP
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
127
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
128 def __call__(self, environ, start_response):
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
129 request = Request(environ)
27
4101fdb16ab2 move data up a bit
k0s <k0scist@gmail.com>
parents: 26
diff changeset
130
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
131 # genshi data dictionary
27
4101fdb16ab2 move data up a bit
k0s <k0scist@gmail.com>
parents: 26
diff changeset
132 request.environ['data'] = { 'site_name': self.site_name,
4101fdb16ab2 move data up a bit
k0s <k0scist@gmail.com>
parents: 26
diff changeset
133 'request': request,
4101fdb16ab2 move data up a bit
k0s <k0scist@gmail.com>
parents: 26
diff changeset
134 'link': self.link,
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
135 'logo': self.logo(request),
50
cf77bd13aad9 add support for headers
k0s <k0scist@gmail.com>
parents: 48
diff changeset
136 'header': self.header,
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
137 'user_url': self.user_url,
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
138 'permalink': self.permalink }
27
4101fdb16ab2 move data up a bit
k0s <k0scist@gmail.com>
parents: 26
diff changeset
139
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
140 res = self.response_functions.get(request.method, self.error())(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
141 return res(environ, start_response)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
142
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
143 def get_response(self, text, content_type='text/html'):
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
144 # XXX to deprecate
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
145 res = Response(content_type=content_type, body=text)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
146 return res
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
147
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
148 def logo(self, request):
34
2a43e43a7e4d comment cleanup
k0s <k0scist@gmail.com>
parents: 32
diff changeset
149 """link to the logo"""
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
150 _logo = 'bitsyblog.png' # TODO: should go to self.logo
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
151 logo = os.path.join(self.file_dir, _logo)
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
152 if os.path.exists(logo):
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
153 return self.link(request, _logo)
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
154
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
155 def get_index(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
156 """returns material pertaining to the root of the site"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
157
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
158 path = request.path_info.strip('/')
90
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
159 n_posts = self.number_of_posts(request)
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
160 n_links = self.number_of_links(request, n_posts)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
161
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
162 ### the front page
19
8931c5b7e632 * fixing up index to display [in progress]
k0s <k0scist@gmail.com>
parents: 17
diff changeset
163 if not path:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
164 return Response(content_type='text/html', body=self.index(request, n_links))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
165
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
166 ### feeds
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
167
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
168 # site rss
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
169 if path == 'rss':
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
170 if n_posts is None:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
171 n_posts = self.feed_items
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
172 return Response(content_type='text/xml', body=self.site_rss(request, n_posts))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
173
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
174 # site atom
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
175 if path == 'atom':
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
176 if n_posts is None:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
177 n_posts = self.feed_items
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
178 return Response(content_type='text/xml', body=self.atom(request, self.blog.latest(self.users.users(), n_posts)))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
179
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
180 ### help
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
181 if path == 'help' and hasattr(self, 'help'):
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
182 return Response(content_type='text/html', body=self.help)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
183
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
184 ### static files
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
185
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
186 # site.css
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
187 if path == 'css/site.css':
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
188 css_file = os.path.join(self.file_dir, 'site.css')
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
189 return FileApp(css_file)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
190
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
191 # logo
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
192 if path == 'bitsyblog.png':
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
193 logo = os.path.join(self.file_dir, 'bitsyblog.png')
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
194 if not self.logo(request):
19
8931c5b7e632 * fixing up index to display [in progress]
k0s <k0scist@gmail.com>
parents: 17
diff changeset
195 raise exc.HTTPNotFound
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
196 return FileApp(logo)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
197
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
198 def get_user_space(self, user, path, request):
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
199 """returns a part of the user space"""
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
200
14
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
201 # request.user = self.users[user] # user whose blog is viewed
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
202 check = self.check_user(user, request) # is this the authenticated user?
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
203
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
204 feed = None # not an rss/atom feed by default (flag)
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
205 n_posts = self.number_of_posts(request, user)
90
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
206 n_links = self.number_of_links(request, n_posts, user)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
207
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
208 # special paths
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
209 if path == [ 'post' ]:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
210 if check is not None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
211 return check
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
212 return Response(content_type='text/html', body=self.form_post(request, user))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
213
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
214 if path == [ 'preferences' ]:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
215 if check is not None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
216 return check
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
217 return Response(content_type='text/html', body=self.preferences(request, user))
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
218
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
219 if path == [ 'rss' ]:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
220 feed = 'rss'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
221 path = []
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
222 if n_posts is None:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
223 n_posts = self.feed_items # TODO: allow to be configurable
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
224
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
225 if path == [ 'atom' ]:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
226 feed = 'atom'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
227 path = []
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
228 if n_posts is None:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
229 n_posts = self.feed_items # TODO: allow to be configurable
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
230
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
231 if len(path) == 2:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
232 if path[0] == 'css':
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
233 for i in request.user.settings['CSS']:
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
234 # find the right CSS file
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
235 if i['filename'] == path[1]:
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
236 return Response(content_type='text/css', body=i['css'])
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
237 else:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
238 return exc.HTTPNotFound('CSS "%s" not found' % path[1])
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
239
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
240 role = self.role(user, request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
241
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
242 # get the blog
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
243 try:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
244 blog = self.get_blog(user, path, role, n_items=n_posts)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
245 except BlogPathException, e:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
246 return exc.HTTPNotFound(str(e))
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
247 except exc.HTTPException, e:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
248 return e.wsgi_response
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
249
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
250 if feed == 'rss':
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
251 content = self.rss(request, user, blog) # XXX different signatures
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
252 return Response(content_type='text/xml', body=content)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
253
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
254 if feed == 'atom':
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
255 content = self.atom(request, blog, user) # XXX different signatures
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
256 return Response(content_type='text/xml', body=content)
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
257
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
258 # reverse the blog if necessary
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
259 if request.GET.get('sort') == 'forward':
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
260 blog = list(reversed(blog))
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
261
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
262 # write the blog
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
263 if request.GET.get('format') == 'text':
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
264 content = self.text_blog(blog)
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
265 content_type = 'text/plain'
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
266 else:
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
267 content = self.write_blog(user, blog, request.path_info, n_links, request)
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
268 content_type = 'text/html'
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
269
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
270 # return the content
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
271 return Response(content_type=content_type, body=content)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
272
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
273 def get(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
274 """
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
275 respond to a get request
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
276 """
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
277
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
278 # front matter of the site
19
8931c5b7e632 * fixing up index to display [in progress]
k0s <k0scist@gmail.com>
parents: 17
diff changeset
279 index = self.get_index(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
280 if index is not None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
281 return index
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
282
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
283 ### user space
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
284 user, path = self.userpath(request)
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
285 return self.get_user_space(user, path, request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
286
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
287 def post(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
288 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
289 write a blog entry and other POST requests
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
290 """
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
291
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
292 # find user + path
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
293 user, path = self.userpath(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
294
23
bf314b9a261a posting TTW now works
k0s <k0scist@gmail.com>
parents: 22
diff changeset
295 # check to make sure the user is authenticated
25
62c961bb91e6 * allow changing of privacy on blog entries
k0s <k0scist@gmail.com>
parents: 23
diff changeset
296 # and is the resource owner
23
bf314b9a261a posting TTW now works
k0s <k0scist@gmail.com>
parents: 22
diff changeset
297 check = self.check_user(user, request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
298 if check is not None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
299 return check
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
300
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
301 if len(path):
25
62c961bb91e6 * allow changing of privacy on blog entries
k0s <k0scist@gmail.com>
parents: 23
diff changeset
302
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
303 if path == [ 'preferences' ]:
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
304
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
305 # make the data look like we want
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
306 settings = {}
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
307 settings['Date format'] = request.POST.get('Date format')
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
308 settings['Subject'] = '%(date)s'.join((request.POST['Subject-0'], request.POST['Subject-2']))
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
309 settings['Stylesheet'] = request.POST['Stylesheet']
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
310 settings['CSS file'] = request.POST.get('CSS file')
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
311 settings['Friends'] = ', '.join(request.POST.getall('Friends'))
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
312
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
313 errors = self.users.write_settings(user, **settings)
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
314 if errors: # re-display form with errors
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
315 return self.get_response(self.preferences(request, user, errors))
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
316
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
317 return self.get_response(self.preferences(request, user, message='Changes saved'))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
318 elif len(path) == 1 and self.isentry(path[0]):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
319 entry = self.blog.entry(user, path[0], roles['author'])
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
320 if entry is None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
321 return exc.HTTPNotFound("Blog entry %s not found %s" % path[0])
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
322 privacy = request.POST.get('privacy')
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
323 datestamp = entry.datestamp()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
324 if privacy:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
325 self.blog.delete(user, datestamp)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
326 self.blog.post(user, datestamp, entry.body, privacy)
23
bf314b9a261a posting TTW now works
k0s <k0scist@gmail.com>
parents: 22
diff changeset
327 return exc.HTTPSeeOther("Settings updated", location=self.user_url(request, user, datestamp))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
328 else:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
329 return exc.HTTPMethodNotAllowed("Not sure what you're trying to do")
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
330
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
331 # get the body of the post
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
332 body = request.body
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
333 body = request.POST.get('form-post', body)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
334 body = body.strip()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
335 if not body:
82
9e5dd802ba95 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 81
diff changeset
336 return exc.HTTPSeeOther("Your post has no content! No blog for you",
23
bf314b9a261a posting TTW now works
k0s <k0scist@gmail.com>
parents: 22
diff changeset
337 location=self.user_url(request, user, 'post'))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
338
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
339 # determine if the post is secret or private
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
340 privacy = request.GET.get('privacy') or request.POST.get('privacy') or 'public'
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
341
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
342 # write the file
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
343 now = utils.datestamp(datetime.datetime.now())
72
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
344 location = self.user_url(request, user, now, permalink=True)
70
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
345 blog_entry = self.blog.post(user, now, body, privacy)
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
346
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
347 # fire event handlers
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
348 # XXX could be done asynchronously
f6a6a4b072e7 complete overhaul to allow event handlers
Jeff Hammel <jhammel@mozilla.com>
parents: 66
diff changeset
349 for handler in self.handlers:
74
2c219b788648 dont let handlers kill the blog
Jeff Hammel <jhammel@mozilla.com>
parents: 72
diff changeset
350 try:
72
c9bab68d00ac * add handlers argument class default
Jeff Hammel <jhammel@mozilla.com>
parents: 71
diff changeset
351 handler(blog_entry, location)
74
2c219b788648 dont let handlers kill the blog
Jeff Hammel <jhammel@mozilla.com>
parents: 72
diff changeset
352 except:
2c219b788648 dont let handlers kill the blog
Jeff Hammel <jhammel@mozilla.com>
parents: 72
diff changeset
353 pass
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
354
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
355 # point the user at the post
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
356 return exc.HTTPSeeOther("Post blogged by bitsy", location=location)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
357
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
358 def put(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
359 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
360 PUT several blog entries from a file
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
361 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
362
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
363 # find user + path
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
364 user, path = self.userpath(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
365
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
366 if user not in self.users.users():
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
367 return exc.HTTPNotFound("No blog found for %s" % user)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
368
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
369 if len(path):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
370 return exc.HTTPMethodNotAllowed("Not sure what you're trying to do")
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
371
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
372 # find the dates + entries in the file
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
373 regex = '\[.*\]:'
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
374 entries = re.split(regex, request.body)[1:]
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
375 dates = [ date.strip().strip(':').strip('[]').strip()
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
376 for date in re.findall(regex, request.body) ]
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
377 dates = [ dateutil.parser.parse(date) for date in dates ]
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
378
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
379 # write to the blog
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
380 for i in range(len(entries)):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
381 datestamp = utils.datestamp(dates[i])
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
382 self.blog.post(user, datestamp, entries[i], 'public')
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
383
6
3198742f7a86 notes to self
k0s <k0scist@gmail.com>
parents: 4
diff changeset
384 return exc.HTTPOk("%s posts blogged" % len(entries))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
385
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
386
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
387 def error(self):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
388 """deal with non-supported methods"""
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
389 methods = ', '.join(self.response_functions.keys()[:1])
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
390 methods += ' and %s' % self.response_functions.keys()[-1]
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
391 return exc.HTTPMethodNotAllowed("Only %s operations are allowed" % methods)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
392
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
393 ### auth/auth functions
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
394
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
395 def passwords(self):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
396 return self.users.passwords()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
397
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
398 def authenticated(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
399 """return authenticated user"""
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
400 return request.environ.get('REMOTE_USER')
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
401
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
402 def check_user(self, user, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
403 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
404 determine authenticated user
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
405 returns None on success
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
406 """
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
407 authenticated = self.authenticated(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
408 if authenticated is None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
409 return exc.HTTPUnauthorized('Unauthorized')
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
410 elif user != authenticated:
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
411 return exc.HTTPForbidden("Forbidden")
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
412
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
413 def role(self, user, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
414 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
415 determine what role the authenticated member has
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
416 with respect to the user
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
417 """
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
418 auth = self.authenticated(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
419 if not auth:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
420 return 'public'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
421 if auth == user:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
422 return 'author'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
423 else:
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
424 if auth in request.user.settings['Friends']:
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
425 return 'friend'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
426 else:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
427 return 'public'
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
428
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
429 ### user methods
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
430
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
431 def userpath(self, request):
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
432 """user who's blog one is viewing"""
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
433 path = request.path_info.strip('/').split('/')
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
434 name = path[0]
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
435 path = path[1:]
14
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
436 if name:
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
437 if name not in self.users:
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
438 exc.HTTPNotFound("No blog found for %s" % name)
14
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
439 request.user = self.users[name]
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
440 else:
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
441 name = None
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
442 return name, path
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
443
34
2a43e43a7e4d comment cleanup
k0s <k0scist@gmail.com>
parents: 32
diff changeset
444 ### methods for linking and URLs
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
445
29
6a1c85adc671 fixing def link for cases of empty path
k0s <k0scist@gmail.com>
parents: 28
diff changeset
446 def link(self, request, path='', permanant=False):
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
447 if isinstance(path, basestring):
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
448 path = [ path ]
48
3fe54d84b9be fix error with single user blog mounted at /
k0s <k0scist@gmail.com>
parents: 36
diff changeset
449 if not path:
3fe54d84b9be fix error with single user blog mounted at /
k0s <k0scist@gmail.com>
parents: 36
diff changeset
450 path = ['']
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
451 path = [ i.strip('/') for i in path ]
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
452 if permanant:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
453 application_url = request.application_url
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
454 else:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
455 application_url = urlparse(request.application_url)[2]
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
456 path = [ application_url ] + list(path)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
457 return '/'.join(path)
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
458
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
459 def user_url(self, request, user, *args, **kw):
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
460 """link to a user resource"""
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
461 permalink = kw.get('permalink', False)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
462 path = [ user ]
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
463 path.extend(args)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
464 return self.link(request, path, permalink)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
465
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
466 def permalink(self, request, blogentry):
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
467 """permalink for a blog entry"""
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
468 return self.user_url(request, blogentry.user, blogentry.datestamp(), permalink=True)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
469
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
470 def mangledurl(self, request, blogentry):
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
471 """return a mangled url for obfuscated sharing"""
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
472 return self.user_url(request, blogentry.user, 'x%x' % (int(blogentry.datestamp()) * self.users.secret(blogentry.user)), permalink=True)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
473
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
474 def unmangleurl(self, url, user):
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
475 """unmangle a url for obfuscated sharing"""
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
476 url = url.strip('x')
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
477 try:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
478 value = int(url, 16)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
479 except ValueError:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
480 return None
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
481
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
482 # XXX once one has a mangled url, one can obtain the secret
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
483 value /= self.users.secret(user)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
484
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
485 entry = str(value)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
486 if self.isentry(entry):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
487 return self.blog.entry(user, entry, ['public', 'secret', 'private'])
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
488
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
489 ### blog retrival methods
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
490
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
491 def isentry(self, string): # TODO -> blog.py
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
492 """returns whether the string is a blog entry"""
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
493 return (len(string) == len(''.join(utils.timeformat))) and string.isdigit()
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
494
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
495 def number_of_posts(self, request, user=None):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
496 """return the number of blog posts to display"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
497 # determine number of posts to display (None -> all)
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
498 n_posts = request.GET.get('posts', None)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
499 if n_posts is not None:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
500 try:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
501 n_posts = int(n_posts)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
502 except (TypeError, ValueError):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
503 n_posts = None
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
504 return n_posts
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
505
90
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
506 def number_of_links(self, request, n_posts=None, user=None):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
507 """return the number of links to display in the navigation"""
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
508 n_links = request.GET.get('n')
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
509 if n_links == 'all':
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
510 return -1
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
511 try:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
512 n_links = int(n_links)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
513 except (TypeError, ValueError):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
514 n_links = self.n_links
90
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
515 if n_posts and n_links > 0 and n_links > n_posts:
d29100da202a fix ?posts=5
Jeff Hammel <jhammel@mozilla.com>
parents: 89
diff changeset
516 n_links = n_posts # don't display more links than posts
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
517 return n_links
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
518
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
519 def get_blog(self, user, path, role='public', n_items=None):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
520 """retrieve the blog entry based on the path"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
521
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
522 notfound = "blog entry not found"
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
523
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
524 # get permissions
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
525 allowed = roles[role]
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
526
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
527 # entire blog
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
528 if not path:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
529 return self.blog(user, allowed, n_items)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
530
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
531 # mangled urls
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
532 if len(path) == 1 and path[0].startswith('x'):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
533 entry = self.unmangleurl(path[0], user)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
534 if entry:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
535 return [ entry ]
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
536 else:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
537 raise BlogPathException(notfound)
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
538
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
539 # individual blog entry
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
540 if (len(path) == 1) and self.isentry(path[0]):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
541 blog = self.blog.entry(user, path[0], allowed)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
542 if not blog:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
543 raise BlogPathException(notfound)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
544 return [ blog ]
87
67dd8e0aa6da whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 86
diff changeset
545
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
546 # parse the path into a date path
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
547 n_date_vals = 3 # year, month, date
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
548 if len(path) > n_date_vals:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
549 raise BlogPathException(notfound)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
550
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
551 # ensure the path conforms to expected values (ints):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
552 try:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
553 [ int(i) for i in path]
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
554 except ValueError:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
555 raise BlogPathException(notfound)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
556
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
557 # get the blog
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
558 return self.blog.entries(user, allowed, *path)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
559
34
2a43e43a7e4d comment cleanup
k0s <k0scist@gmail.com>
parents: 32
diff changeset
560 ### methods for markup
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
561
17
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
562 def stylesheets(self, request):
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
563 user = getattr(request, 'user', None)
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
564 if user:
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
565 stylesheets = request.user['CSS']
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
566 stylesheets = [ (self.user_url(request, user.name, 'css', css['filename']),
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
567 css['name']) for css in stylesheets ]
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
568 else:
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
569 stylesheets = [(self.link(request, "css/site.css"), "Default")]
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
570 return stylesheets
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
571
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
572 def site_nav(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
573 """returns HTML for site navigation"""
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
574
29
6a1c85adc671 fixing def link for cases of empty path
k0s <k0scist@gmail.com>
parents: 28
diff changeset
575 links = [(self.link(request), '/')]
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
576 user = self.authenticated(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
577 if user:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
578 links.extend([(self.user_url(request, user), user),
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
579 (self.user_url(request, user, 'post'), 'post'),
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
580 (self.user_url(request, user, 'preferences'), 'preferences'),
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
581 (self.link(request, 'logout'), 'logout')])
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
582 else:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
583 links.extend([(self.link(request, 'login'), 'login'),
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
584 (self.link(request, 'join'), 'join')])
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
585
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
586 if hasattr(self, 'help'):
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
587 links.append((self.link(request, 'help'), 'help'))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
588
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
589 request.environ['data']['links'] = links
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
590
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
591
19
8931c5b7e632 * fixing up index to display [in progress]
k0s <k0scist@gmail.com>
parents: 17
diff changeset
592 def index(self, request, n_links):
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
593 data = request.environ['data']
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
594 data['n_links'] = n_links
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
595 self.site_nav(request)
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
596
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
597 # get the blogs
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
598 blogs = {}
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
599 for user in self.users:
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
600 blog = self.blog(user, ('public',), n_links)
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
601 if blog:
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
602 blogs[user] = blog
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
603 users = blogs.keys()
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
604
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
605 # display latest active user first
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
606 users.sort(key=lambda user: blogs[user][0].date, reverse=True)
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
607
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
608 data['blogs'] = blogs
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
609 data['users'] = users
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
610 data['date_formats'] = dict([(user, self.users[user].settings.get('Date format', self.date_format)) for user in users])
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
611
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
612 # render the template
20
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
613 template = self.loader.load('index.html')
1554cb56aa2f got index working, just doesnt do anything
k0s <k0scist@gmail.com>
parents: 19
diff changeset
614 return template.generate(**request.environ['data']).render()
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
615
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
616 def cooked_entry(self, entry):
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
617 """cook the entry"""
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
618 if (entry.user, entry.datestamp()) not in self.cooked_bodies:
84
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
619 self.cooked_bodies[(entry.user, entry.datestamp())] = (self.cooker(entry.body), entry.modified())
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
620 body, modified = self.cooked_bodies[(entry.user, entry.datestamp())]
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
621 if entry.modified() > modified:
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
622 body = self.cooker(entry.body)
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
623 self.cooked_bodies[(entry.user, entry.datestamp())] = (body, entry.modified())
e5a23f5ea14e make cooked bodies depend on file mtime
Jeff Hammel <jhammel@mozilla.com>
parents: 83
diff changeset
624 return body
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
625
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
626 def write_blog(self, user, blog, path, n_links, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
627 """return the user's blog in HTML"""
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
628
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
629 # cook the entry
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
630 for entry in blog:
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
631 entry.cooked_body = Markup(self.cooked_entry(entry))
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
632
83
666f3051ce31 move cook_entry to its own function
Jeff Hammel <jhammel@mozilla.com>
parents: 82
diff changeset
633 # site nav
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
634 # XXX def site_nav() puts directly in request.environ['data']
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
635 # should return instead
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
636 self.site_nav(request)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
637
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
638 # user data -> should be moved up the chain
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
639 data = request.environ['data']
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
640 data['user'] = user
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
641 data['role'] = self.role(user, request)
17
e5cbc53cacf8 now have stylesheets
k0s <k0scist@gmail.com>
parents: 16
diff changeset
642 data['stylesheets'] = self.stylesheets(request)
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
643 data['subject'] = request.user.settings.get('Subject', self.subject)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
644 data['date_format'] = request.user.settings.get('Date format', self.date_format)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
645 data['mangledurl'] = self.mangledurl
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
646
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
647 # blog data
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
648 data['blog'] = blog
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
649 data['n_links'] = n_links
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
650
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
651 # render the template
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
652 template = self.loader.load('blog.html')
79
4df927b0d847 fix unicode error in titles (i hope)
Jeff Hammel <jhammel@mozilla.com>
parents: 76
diff changeset
653 try:
4df927b0d847 fix unicode error in titles (i hope)
Jeff Hammel <jhammel@mozilla.com>
parents: 76
diff changeset
654 return template.generate(**data).render()
4df927b0d847 fix unicode error in titles (i hope)
Jeff Hammel <jhammel@mozilla.com>
parents: 76
diff changeset
655 except UnicodeDecodeError:
4df927b0d847 fix unicode error in titles (i hope)
Jeff Hammel <jhammel@mozilla.com>
parents: 76
diff changeset
656 # TODO: better error handling
4df927b0d847 fix unicode error in titles (i hope)
Jeff Hammel <jhammel@mozilla.com>
parents: 76
diff changeset
657 raise
86
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
658
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
659 def text_blog(self, blog):
86
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
660 """raw text format of blog"""
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
661
58
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
662 if len(blog) == 1:
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
663 return blog[0].body.strip() + '\n'
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
664
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
665 buffer = StringIO()
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
666 for entry in blog:
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
667 print >> buffer, '[ %s ]\n' % entry.date.strftime(self.date_format)
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
668 print >> buffer, entry.body.strip() + '\n'
b97d11e2cf41 * document defaults
k0s <k0scist@gmail.com>
parents: 52
diff changeset
669 return buffer.getvalue()
86
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
670
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
671 def restructuredText(self, string):
86
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
672 """renders a string with restructured text"""
75
6b8ccf6ec819 move restructured text string rendering to its own method
Jeff Hammel <jhammel@mozilla.com>
parents: 72
diff changeset
673 body = utils.ReST2html(string)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
674 retval = '<div class="blog-body">%s</div>' % body
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
675 return retval
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
676
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
677 # # XXX this should be reenabled if 'system-message's again appear in the markup
86
777c47bae0ab whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
678 # try:
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
679 # foo = etree.fromstring(retval)
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
680 # except etree.XMLSyntaxError:
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
681 # return retval
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
682 # # should cleanup the <div class="system-message">
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
683 # for i in foo.getiterator():
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
684 # if dict(i.items()).get('class') == 'system-message':
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
685 # i.clear()
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
686 # return etree.tostring(foo)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
687
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
688
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
689 ### feeds
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
690
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
691 def site_rss(self, request, n_items=10):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
692 blog = self.blog.latest(list(self.users.users()), n_items)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
693 title = self.site_name + ' - rss'
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
694 link = request.application_url
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
695 description = "latest scribblings on %s" % self.site_name
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
696 lastBuildDate = datetime.datetime.now()
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
697 items = [ self.rss_item(request, entry.user, entry) for entry in blog ]
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
698 rss = PyRSS2Gen.RSS2(title=title,
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
699 link=link,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
700 description=description,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
701 lastBuildDate=lastBuildDate,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
702 items=items)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
703 return rss.to_xml()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
704
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
705 def rss(self, request, user, blog):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
706 """
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
707 rss feed for a user's blog
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
708 done with PyRSS2Gen:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
709 http://www.dalkescientific.com/Python/PyRSS2Gen.html
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
710 """
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
711 title = "%s's blog" % user
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
712 link = os.path.split(request.url)[0]
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
713 description = "latest blog entries for %s on %s" % (user, self.site_name)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
714 lastBuildDate = datetime.datetime.now() # not sure what this means
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
715
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
716 items = [ self.rss_item(request, user, entry) for entry in blog ]
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
717 rss = PyRSS2Gen.RSS2(title=title,
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
718 link=link,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
719 description=description,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
720 lastBuildDate=lastBuildDate,
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
721 items=items)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
722 return rss.to_xml()
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
723
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
724 def rss_item(self, request, user, entry):
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
725 if hasattr(request, 'user') and request.user.name == user:
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
726 prefs = request.user.settings
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
727 else:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
728 prefs = self.users[user].settings
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
729 subject = prefs.get('Subject', self.subject)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
730 date_format = prefs.get('Date format', self.date_format)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
731 title = entry.title()
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
732 link = self.permalink(request, entry)
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
733
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
734 # item description
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
735 if self.rss_html:
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
736 body = self.cooked_entry(entry)
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
737 else:
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
738 body = entry.body
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
739 body = unicode(body, errors='replace')
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
740
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
741 return PyRSS2Gen.RSSItem(title=title,
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
742 link=link,
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
743 description=body,
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
744 author=user,
31
4ac11f7992c6 index page now works and so does rss
k0s <k0scist@gmail.com>
parents: 29
diff changeset
745 guid=PyRSS2Gen.Guid(link),
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
746 pubDate=entry.date)
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
747
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
748
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
749 def atom(self, request, blog, author=None):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
750
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
751 # data for genshi template
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
752 date = blog[0].date.isoformat()
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
753 data = request.environ['data']
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
754 data['blog'] = blog
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
755 data['author'] = author
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
756 data['date'] = date
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
757
35
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
758 # render the template
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
759 template = self.loader.load('atom.xml')
7e7fbdc64cc1 enable atom support, this brings us to 2.0
k0s <k0scist@gmail.com>
parents: 34
diff changeset
760 return template.generate(**data).render()
89
7f7f7313b4c4 add html to rss feeds
Jeff Hammel <jhammel@mozilla.com>
parents: 88
diff changeset
761
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
762
34
2a43e43a7e4d comment cleanup
k0s <k0scist@gmail.com>
parents: 32
diff changeset
763 ### forms
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
764
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
765 def form_post(self, request, user):
21
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
766
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
767 # genshi data
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
768 self.site_nav(request)
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
769 data = request.environ['data']
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
770 data['user'] = user
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
771 data['stylesheets'] = self.stylesheets(request)
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
772
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
773 # render the template
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
774 template = self.loader.load('post.html')
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
775 return template.generate(**data).render()
7cdb3eecc045 make post form genshi
k0s <k0scist@gmail.com>
parents: 20
diff changeset
776
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
777
12
dd8c1c8ae0da more removing of self.request and general cleanup
k0s <k0scist@gmail.com>
parents: 9
diff changeset
778 def preferences(self, request, user, errors=None, message=None):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
779 """user preferences form"""
26
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
780
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
781 # genshi data
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
782 self.site_nav(request)
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
783 data = request.environ['data']
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
784 data['user'] = user
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
785 data['stylesheets'] = self.stylesheets(request)
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
786
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
787 # form data
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
788 prefs = request.user.settings
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
789 data['date_format'] = prefs.get('Date format', self.date_format)
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
790 data['now'] = datetime.datetime.now().strftime(data['date_format'])
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
791 subject = prefs.get('Subject', self.subject)
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
792 data['subject'] = subject.split('%(date)s', 1)
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
793 data['css_files'] = [ i['name'] for i in prefs['CSS' ] ]
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
794 data['users'] = [ i for i in list(self.users.users())
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
795 if i != user ]
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
796 data['message'] = message
28
e54a6405a496 display errors for preferences form
k0s <k0scist@gmail.com>
parents: 27
diff changeset
797 data['errors'] = errors or {}
26
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
798
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
799 # render the template
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
800 template = self.loader.load('preferences.html')
e37d117a9deb preferences form now works
k0s <k0scist@gmail.com>
parents: 25
diff changeset
801 return template.generate(**data).render()
94
fa221a2d24d9 wow; old + crufty
Jeff Hammel <jhammel@mozilla.com>
parents: 90
diff changeset
802
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
803
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
804 class BitsierBlog(BitsyBlog):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
805 """single user version of bitsyblog"""
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
806
80
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
807 defaults = BitsyBlog.defaults.copy()
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
808 defaults['user'] = None
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
809
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
810 def __init__(self, kw, handler_args):
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
811 BitsyBlog.__init__(self, kw, handler_args)
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
812 assert self.user, 'BitsierBlog: no user given'
51b49bc484ff partial refactor of factories; really, i dont know what im doing
Jeff Hammel <jhammel@mozilla.com>
parents: 79
diff changeset
813
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
814 def get(self, request):
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
815
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
816 ### user space
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
817 user, path = self.userpath(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
818 if user not in self.users:
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
819 return exc.HTTPNotFound("Blog entry not found")
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
820
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
821 return self.get_user_space(user, path, request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
822
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
823 def userpath(self, request):
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
824 path = request.path_info.strip('/').split('/')
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
825 if path == ['']:
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
826 path = []
14
645aa0f3279f userland refactoring...still lives on request, sadly, but better
k0s <k0scist@gmail.com>
parents: 12
diff changeset
827 request.user = self.users[self.user]
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
828 return self.user, path
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
829
9
e4f28fde518a more self.request cleanup
k0s <k0scist@gmail.com>
parents: 7
diff changeset
830 def user_url(self, request, user, *args, **kw):
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
831 permalink = kw.get('permalink', False)
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
832 return self.link(request, args, permalink)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
833
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
834 def passwords(self):
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
835 return { self.user: self.users.password(self.user) }
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
836
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
837 def site_nav(self, request):
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
838 """returns HTML for site navigation"""
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
839 links = [(self.user_url(request, self.user), self.user), ]
7
57a45adf33d4 separate out request from self. ultimately a new object should be
k0s <k0scist@gmail.com>
parents: 6
diff changeset
840 user = self.authenticated(request)
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
841 if user:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
842 links.extend([(self.user_url(request, user, 'post'), 'post'),
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
843 (self.user_url(request, user, 'preferences'), 'preferences'),
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
844 (self.link(request, 'logout'), 'logout')])
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
845 else:
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
846 links.append((self.link(request, 'login'), 'login'))
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
847
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
848 if hasattr(self, 'help'):
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
849 links.append((self.link(request, 'help'), 'about'))
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
850
0
e3823be6a423 initial commit of bitsyblog, from https://svn.openplans.org/svn/standalone/bitsyblog/trunk/
k0s <k0scist@gmail.com>
parents:
diff changeset
851
15
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
852 request.environ['data']['links'] = links
36698624435b blog page mostly works
k0s <k0scist@gmail.com>
parents: 14
diff changeset
853