annotate test/test_templating.py @ 5418:55f09ca366c4

Python 3 preparation: StringIO. This generally arranges for StringIO and cStringIO references to use io.StringIO for Python 3 but io.BytesIO for Python 2, consistent with the string representations generally used in Roundup. A special FasterStringIO in the TAL code, which referenced internals of the old Python 2 StringIO module, is cut down so it doesn't actually do anything beyond the StringIO class it inherits from (it would also be reasonable to remove FasterStringIO completely). One place in roundup_server.py clearly needing binary I/O is made to use io.BytesIO unconditionally.
author Joseph Myers <jsm@polyomino.org.uk>
date Wed, 25 Jul 2018 09:08:29 +0000
parents 3fa026621f69
children b0359a7c5b6d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
1 from __future__ import print_function
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 import unittest
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 from cgi import FieldStorage, MiniFieldStorage
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 from roundup.cgi.templating import *
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
6 from .test_actions import MockNull, true
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 class MockDatabase(MockNull):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 def getclass(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 return self.classes[name]
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
12 # setup for csrf testing of otks database api
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
13 storage = {}
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
14 def set(self, key, **props):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
15 MockDatabase.storage[key] = {}
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
16 MockDatabase.storage[key].update(props)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
17
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
18 def get(self, key, field, default=None):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
19 if key not in MockDatabase.storage:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
20 return default
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
21 return MockDatabase.storage[key][field]
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
22
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
23 def exists(self,key):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
24 return key in MockDatabase.storage
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
25
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
26 def getOTKManager(self):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
27 return MockDatabase()
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
28
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 class TemplatingTestCase(unittest.TestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 def setUp(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 self.form = FieldStorage()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 self.client = MockNull()
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
33 self.client.db = db = MockDatabase()
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
34 db.security.hasPermission = lambda *args, **kw: True
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 self.client.form = self.form
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
37 # add client props for testing anti_csrf_nonce
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
38 self.client.session_api = MockNull(_sid="1234567890")
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
39 self.client.db.getuid = lambda : 10
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
40 self.client.db.config = {'WEB_CSRF_TOKEN_LIFETIME': 10 }
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
41
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 class HTMLDatabaseTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 def test_HTMLDatabase___getitem__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 self.assert_(isinstance(db['issue'], HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
46 # following assertions are invalid
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
47 # since roundup/cgi/templating.py r1.173.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
48 # HTMLItem is function, not class,
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
49 # but HTMLUserClass and HTMLUser are passed on.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
50 # these classes are no more. they have ceased to be.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
51 #self.assert_(isinstance(db['user'], HTMLUserClass))
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
52 #self.assert_(isinstance(db['issue1'], HTMLItem))
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
53 #self.assert_(isinstance(db['user1'], HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 def test_HTMLDatabase___getattr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 self.assert_(isinstance(db.issue, HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
58 # see comment in test_HTMLDatabase___getitem__
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
59 #self.assert_(isinstance(db.user, HTMLUserClass))
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
60 #self.assert_(isinstance(db.issue1, HTMLItem))
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
61 #self.assert_(isinstance(db.user1, HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 def test_HTMLDatabase_classes(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 db._db.classes = {'issue':MockNull(), 'user': MockNull()}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 db.classes()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 class FunctionsTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 def test_lookupIds(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 def lookup(key):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 if key == 'ok':
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 return '1'
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 if key == 'fail':
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
75 raise KeyError('fail')
3587
2372597ebbdb *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2716
diff changeset
76 return key
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 db._db.classes = {'issue': MockNull(lookup=lookup)}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 prop = MockNull(classname='issue')
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 self.assertEqual(lookupIds(db._db, prop, ['1','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 self.assertEqual(lookupIds(db._db, prop, ['ok','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail'], 1),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 ['1', 'fail'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail']), ['1'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 def test_lookupKeys(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 def get(entry, key):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 return {'1': 'green', '2': 'eggs'}.get(entry, entry)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 shrubbery = MockNull(get=get)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 db._db.classes = {'shrubbery': shrubbery}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 self.assertEqual(lookupKeys(shrubbery, 'spam', ['1','2']),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 ['green', 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 self.assertEqual(lookupKeys(shrubbery, 'spam', ['ok','2']), ['ok',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
96 class HTMLClassTestCase(TemplatingTestCase) :
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
97
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
98 def test_link(self):
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
99 """Make sure lookup of a Link property works even in the
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
100 presence of multiple values in the form."""
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
101 def lookup(key) :
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
102 self.assertEqual(key, key.strip())
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
103 return "Status%s"%key
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
104 self.form.list.append(MiniFieldStorage("status", "1"))
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
105 self.form.list.append(MiniFieldStorage("status", "2"))
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
106 status = hyperdb.Link("status")
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
107 self.client.db.classes = dict \
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
108 ( issue = MockNull(getprops = lambda : dict(status = status))
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
109 , status = MockNull(get = lambda id, name : id, lookup = lookup)
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
110 )
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
111 cls = HTMLClass(self.client, "issue")
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
112 cls["status"]
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
113
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
114 def test_multilink(self):
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
115 """`lookup` of an item will fail if leading or trailing whitespace
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
116 has not been stripped.
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
117 """
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
118 def lookup(key) :
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
119 self.assertEqual(key, key.strip())
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
120 return "User%s"%key
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
121 self.form.list.append(MiniFieldStorage("nosy", "1, 2"))
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
122 nosy = hyperdb.Multilink("user")
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
123 self.client.db.classes = dict \
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
124 ( issue = MockNull(getprops = lambda : dict(nosy = nosy))
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
125 , user = MockNull(get = lambda id, name : id, lookup = lookup)
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
126 )
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
127 cls = HTMLClass(self.client, "issue")
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
128 cls["nosy"]
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
129
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
130 def test_anti_csrf_nonce(self):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
131 '''call the csrf creation function and do basic length test
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
132
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
133 Store the data in a mock db with the same api as the otk
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
134 db. Make sure nonce is 64 chars long. Lookup the nonce in
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
135 db and retrieve data. Verify that the nonce lifetime is
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
136 correct (within 1 second of 1 week - lifetime), the uid is
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
137 correct (1), the dummy sid is correct.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
138
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
139 Consider three cases:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
140 * create nonce via module function setting lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
141 * create nonce via TemplatingUtils method setting lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
142 * create nonce via module function with default lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
143
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
144 '''
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
145
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
146 # the value below is number of seconds in a week.
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
147 week_seconds = 604800
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
148
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
149 otks=self.client.db.getOTKManager()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
150
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
151 for test in [ 'module', 'template', 'default_time' ]:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
152 print("Testing:", test)
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
153
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
154 if test == 'module':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
155 # test the module function
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
156 nonce1 = anti_csrf_nonce(self, self.client, lifetime=1)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
157 # lifetime * 60 is the offset
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
158 greater_than = week_seconds - 1 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
159 elif test == 'template':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
160 # call the function through the TemplatingUtils class
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
161 cls = TemplatingUtils(self.client)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
162 nonce1 = cls.anti_csrf_nonce(lifetime=5)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
163 greater_than = week_seconds - 5 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
164 elif test == 'default_time':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
165 # use the module function but with no lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
166 nonce1 = anti_csrf_nonce(self, self.client)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
167 # see above for web nonce lifetime.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
168 greater_than = week_seconds - 10 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
169
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
170 self.assertEqual(len(nonce1), 64)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
171
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
172 uid = otks.get(nonce1, 'uid', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
173 sid = otks.get(nonce1, 'sid', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
174 timestamp = otks.get(nonce1, '__timestamp', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
175
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
176 self.assertEqual(uid, 10)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
177 self.assertEqual(sid, self.client.session_api._sid)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
178
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
179 now = time.time()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
180
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
181 print("now, timestamp, greater, difference",
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
182 now, timestamp, greater_than, now - timestamp)
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
183
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
184
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
185 # lower bound of the difference is above. Upper bound
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
186 # of difference is run time between time.time() in
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
187 # the call to anti_csrf_nonce and the time.time() call
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
188 # that assigns ts above. I declare that difference
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
189 # to be less than 1 second for this to pass.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
190 self.assertEqual(True,
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
191 greater_than <= now - timestamp < (greater_than + 1) )
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
192
5156
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
193 def test_string_url_quote(self):
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
194 ''' test that urlquote quotes the string '''
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
195 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'test string< foo@bar')
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
196 self.assertEqual(p.url_quote(), 'test%20string%3C%20foo%40bar')
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
197
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
198 def test_string_email(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
199 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
200 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'rouilj@foo.example.com')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
201 self.assertEqual(p.email(), 'rouilj at foo example ...')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
202
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
203 def test_string_plain_or_hyperlinked(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
204 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
205 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
206 self.assertEqual(p.plain(), 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
207 self.assertEqual(p.plain(escape=1), 'A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
208 self.assertEqual(p.plain(hyperlink=1), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
209 self.assertEqual(p.plain(escape=1, hyperlink=1), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
210
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
211 self.assertEqual(p.hyperlinked(), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
212
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
213 def test_string_field(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
214 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
215 self.assertEqual(p.field(), '<input type="text" name="test1@test" value="A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;" size="30">')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
216
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
217 def test_string_multiline(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
218 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
219 self.assertEqual(p.multiline(), '<textarea name="test1@test" id="test1@test" rows="5" cols="40">A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;</textarea>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
220 self.assertEqual(p.multiline(rows=300, cols=100, **{'class':'css_class'}), '<textarea class="css_class" name="test1@test" id="test1@test" rows="300" cols="100">A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;</textarea>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
221
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
222 def test_url_match(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
223 '''Test the URL regular expression in StringHTMLProperty.
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
224 '''
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
225 def t(s, nothing=False, **groups):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
226 m = StringHTMLProperty.hyper_re.search(s)
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
227 if nothing:
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
228 if m:
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
229 self.assertEquals(m, None, '%r matched (%r)'%(s, m.groupdict()))
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
230 return
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
231 else:
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
232 self.assertNotEquals(m, None, '%r did not match'%s)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
233 d = m.groupdict()
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
234 for g in groups:
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
235 self.assertEquals(d[g], groups[g], '%s %r != %r in %r'%(g, d[g],
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
236 groups[g], s))
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
237
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
238 #t('123.321.123.321', 'url')
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
239 t('http://localhost/', url='http://localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
240 t('http://roundup.net/', url='http://roundup.net/')
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
241 t('http://richard@localhost/', url='http://richard@localhost/')
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
242 t('http://richard:sekrit@localhost/',
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
243 url='http://richard:sekrit@localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
244 t('<HTTP://roundup.net/>', url='HTTP://roundup.net/')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
245 t('www.a.ex', url='www.a.ex')
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
246 t('foo.a.ex', nothing=True)
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
247 t('StDevValidTimeSeries.GetObservation', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
248 t('http://a.ex', url='http://a.ex')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
249 t('http://a.ex/?foo&bar=baz\\.@!$%()qwerty',
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
250 url='http://a.ex/?foo&bar=baz\\.@!$%()qwerty')
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
251 t('www.foo.net', url='www.foo.net')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
252 t('richard@com.example', email='richard@com.example')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
253 t('r@a.com', email='r@a.com')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
254 t('i1', **{'class':'i', 'id':'1'})
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
255 t('item123', **{'class':'item', 'id':'123'})
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
256 t('www.user:pass@host.net', email='pass@host.net')
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
257 t('user:pass@www.host.net', url='user:pass@www.host.net')
4011
e77bcbdc9b32 add tests for numbers too :)
Richard Jones <richard@users.sourceforge.net>
parents: 4010
diff changeset
258 t('123.35', nothing=True)
e77bcbdc9b32 add tests for numbers too :)
Richard Jones <richard@users.sourceforge.net>
parents: 4010
diff changeset
259 t('-.3535', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
260
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
261 def test_url_replace(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
262 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', '')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
263 def t(s): return p.hyper_re.sub(p._hyper_repl, s)
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
264 ae = self.assertEqual
4288
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4040
diff changeset
265 ae(t('item123123123123'), 'item123123123123')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
266 ae(t('http://roundup.net/'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
267 '<a href="http://roundup.net/" rel="nofollow">http://roundup.net/</a>')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
268 ae(t('&lt;HTTP://roundup.net/&gt;'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
269 '&lt;<a href="HTTP://roundup.net/" rel="nofollow">HTTP://roundup.net/</a>&gt;')
4414
399569ff4aed - fix small indentation glitch
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4413
diff changeset
270 ae(t('&lt;http://roundup.net/&gt;.'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
271 '&lt;<a href="http://roundup.net/" rel="nofollow">http://roundup.net/</a>&gt;.')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
272 ae(t('&lt;www.roundup.net&gt;'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
273 '&lt;<a href="http://www.roundup.net" rel="nofollow">www.roundup.net</a>&gt;')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
274 ae(t('(www.roundup.net)'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
275 '(<a href="http://www.roundup.net" rel="nofollow">www.roundup.net</a>)')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
276 ae(t('foo http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx bar'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
277 'foo <a href="http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx" rel="nofollow">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
278 'http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx</a> bar')
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
279 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language))'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
280 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
281 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>)')
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
282 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language)).'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
283 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
284 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>).')
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
285 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language))&gt;.'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
286 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow">'
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
287 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>)&gt;.')
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
288 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language&gt;)).'),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
289 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language" rel="nofollow">'
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
290 'http://en.wikipedia.org/wiki/Python_(programming_language</a>&gt;)).')
4647
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
291 for c in '.,;:!':
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
292 # trailing punctuation is not included
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
293 ae(t('http://roundup.net/%c ' % c),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
294 '<a href="http://roundup.net/" rel="nofollow">http://roundup.net/</a>%c ' % c)
4647
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
295 # but it's included if it's part of the URL
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
296 ae(t('http://roundup.net/%c/' % c),
5190
89b1870b1bc9 Make url's in messages identified as http://... or https://...
John Rouillard <rouilj@ieee.org>
parents: 5157
diff changeset
297 '<a href="http://roundup.net/%c/" rel="nofollow">http://roundup.net/%c/</a>' % (c, c))
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
298
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
299 '''
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
300 class HTMLPermissions:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
303 def is_only_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
304 def view_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305 def edit_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
306
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
307 def input_html4(**attrs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
308 def input_xhtml(**attrs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
309
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
310 class HTMLInputMixin:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311 def __init__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
312
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
313 class HTMLClass(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
314 def __init__(self, client, classname, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
315 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
316 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
317 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
318 def designator(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
319 def getItem(self, itemid, num_re=re.compile('-?\d+')):
5226
578e86e015f9 Changed function signature for properties to correspond to checkin:
John Rouillard <rouilj@ieee.org>
parents: 5211
diff changeset
320 def properties(self, sort=1, cansearch=True):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
321 def list(self, sort_on=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
322 def csv(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
323 def propnames(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
324 def filter(self, request=None, filterspec={}, sort=(None,None),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
325 def classhelp(self, properties=None, label='(list)', width='500',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
326 def submit(self, label="Submit New Entry"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
327 def history(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
328 def renderWith(self, name, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
329
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 class HTMLItem(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
332 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
333 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
334 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
335 def designator(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
336 def is_retired(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
337 def submit(self, label="Submit Changes"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 def journal(self, direction='descending'):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
339 def history(self, direction='descending', dre=re.compile('\d+')):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
340 def renderQueryForm(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
341
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342 class HTMLUserPermission:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
343 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
344 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
345 def _user_perm_check(self, type):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
346
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 class HTMLUserClass(HTMLUserPermission, HTMLClass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
348
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
349 class HTMLUser(HTMLUserPermission, HTMLItem):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
350 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
351 def hasPermission(self, permission, classname=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
352
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
353 class HTMLProperty(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
354 def __init__(self, client, classname, nodeid, prop, name, value,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
355 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
356 def __str__(self):
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
357 def __lt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
358 def __le__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
359 def __eq__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
360 def __ne__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
361 def __gt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
362 def __ge__(self, other):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 class StringHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 def _hyper_repl(self, match):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
368 def hyperlinked(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369 def plain(self, escape=0, hyperlink=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 def stext(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372 def multiline(self, escape=0, rows=5, cols=40):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373 def email(self, escape=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 class PasswordHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
378 def confirm(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 class NumberHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383 def __int__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
384 def __float__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
386 class IntegerHTMLProperty(HTMLProperty):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
387 def plain(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
388 def field(self, size = 30):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
389 def __int__(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
390
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
391 class BooleanHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
393 def field(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395 class DateHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
396 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
397 def now(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
398 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
399 def reldate(self, pretty=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
400 def pretty(self, format=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
401 def local(self, offset):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403 class IntervalHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
404 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
405 def pretty(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
407
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
408 class LinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
409 def __init__(self, *args, **kw):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 def field(self, showid=0, size=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
415 class MultilinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
416 def __init__(self, *args, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417 def __len__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 def __getitem__(self, num):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420 def __contains__(self, value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
421 def reverse(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
423 def field(self, size=30, showid=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
424 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
425
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
426 def make_key_function(db, classname, sort_on=None):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
427 def keyfunc(a):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
428
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
429 def find_sort_key(linkcl):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
430
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
431 def handleListCGIValue(value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
432
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
433 class ShowDict:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
434 def __init__(self, columns):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
435 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
436
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
437 class HTMLRequest(HTMLInputMixin):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
438 def __init__(self, client):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
439 def _post_init(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
440 def updateFromURL(self, url):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
441 def update(self, kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
442 def description(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
444 def indexargs_form(self, columns=1, sort=1, group=1, filter=1,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
445 def indexargs_url(self, url, args):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
446 def base_javascript(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 def batch(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 class Batch(ZTUtils.Batch):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 def __init__(self, client, sequence, size, start, end=0, orphan=0,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 def __getitem__(self, index):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 def propchanged(self, property):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453 def previous(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
454 def next(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
456 #class TemplatingUtils:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
457 # def __init__(self, client):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
458 # def Batch(self, sequence, size, start, end=0, orphan=0, overlap=0):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 class NoTemplate(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 class Unauthorised(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
462 def __init__(self, action, klass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464
4720
fd72576e07ed API break: rename Templates to Loader for zopetal and chameleon
anatoly techtonik <techtonik@gmail.com>
parents: 4647
diff changeset
465 class Loader:
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
466 def __init__(self, dir):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 def precompileTemplates(self):
4727
5033c2ad80a7 templating: Rename LoaderBase.get() to LoaderBase.load() for clarity
anatoly techtonik <techtonik@gmail.com>
parents: 4720
diff changeset
468 def load(self, name, extension=None):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
469 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
470
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
471 class RoundupPageTemplate(PageTemplate.PageTemplate):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
472 def getContext(self, client, classname, request):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
473 def render(self, client, classname, request, **options):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
474 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
475 '''
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
476
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
477 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/