Mercurial > p > roundup > code
annotate roundup/cgi/templating.py @ 7970:b63fcfc2c984
bug: make classhelper link open in new window when js is disabled
Prevent the web page displaying a classhelper link from being replaced
if JavaScript is disabled.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 18 May 2024 21:28:05 -0400 |
| parents | a9b136565838 |
| children | 1045425c23b2 |
| rev | line source |
|---|---|
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1 """Implements the API used in the HTML templating for the web interface. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2 """ |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3 |
| 7032 | 4 __todo__ = """ |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
5 - Document parameters to Template.render() method |
|
4727
5033c2ad80a7
templating: Rename LoaderBase.get() to LoaderBase.load() for clarity
anatoly techtonik <techtonik@gmail.com>
parents:
4724
diff
changeset
|
6 - Add tests for Loader.load() method |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
7 - Most methods should have a "default" arg to supply a value |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
8 when none appears in the hyperdb or request. |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
9 - Multilink property additions: change_note and new_upload |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
10 - Add class.find() too |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
11 - NumberHTMLProperty should support numeric operations |
|
2324
da4444e593f4
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2320
diff
changeset
|
12 - LinkHTMLProperty should handle comparisons to strings (cf. linked name) |
|
2411
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
13 - HTMLRequest.default(self, sort, group, filter, columns, **filterspec): |
|
3843
97d9368ed485
Yet another emacs syntax highlighting workaround.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3842
diff
changeset
|
14 '''Set the request's view arguments to the given values when no |
|
2411
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
15 values are found in the CGI environment. |
|
3843
97d9368ed485
Yet another emacs syntax highlighting workaround.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3842
diff
changeset
|
16 ''' |
|
2664
8348373b4361
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2651
diff
changeset
|
17 - have menu() methods accept filtering arguments |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
18 """ |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
19 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
20 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
21 |
|
5043
ac0c117cd24c
Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents:
5006
diff
changeset
|
22 import calendar |
| 7032 | 23 import csv |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
24 import logging |
| 7032 | 25 import os.path |
| 26 import re | |
|
5043
ac0c117cd24c
Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents:
5006
diff
changeset
|
27 import textwrap |
| 7032 | 28 |
|
7758
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
29 from roundup import date, hyperdb, support |
| 7032 | 30 from roundup.anypy import urllib_ |
|
7582
978285986b2c
fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents:
7572
diff
changeset
|
31 from roundup.anypy.cgi_ import cgi |
| 7032 | 32 from roundup.anypy.html import html_escape |
|
7758
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
33 from roundup.anypy.strings import StringIO, is_us, s2u, u2s, us2s |
| 7032 | 34 from roundup.cgi import TranslationService, ZTUtils |
|
5973
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
35 from roundup.cgi.timestamp import pack_timestamp |
| 7032 | 36 from roundup.exceptions import RoundupException |
|
7758
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
37 |
| 7032 | 38 from .KeywordsExpr import render_keywords_expression_editor |
| 39 | |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
40 try: |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
41 from docutils.core import publish_parts as ReStructuredText |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
42 except ImportError: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
43 ReStructuredText = None |
|
5399
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
44 try: |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
45 from itertools import zip_longest |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
46 except ImportError: |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
47 from itertools import izip_longest as zip_longest |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
49 logger = logging.getLogger('roundup.template') |
| 7032 | 50 |
| 51 # List of schemes that are not rendered as links in rst and markdown. | |
| 52 _disable_url_schemes = ['javascript', 'data'] | |
| 6125 | 53 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
54 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
55 def _import_markdown2(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
56 try: |
|
7758
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
57 import re |
|
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
58 |
| 7032 | 59 import markdown2 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
60 |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
61 # Note: version 2.4.9 does not work with Roundup as it breaks |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
62 # [issue1](issue1) formatted links. |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
63 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
64 # Versions 2.4.8 and 2.4.10 use different methods to filter |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
65 # allowed schemes. 2.4.8 uses a pre-compiled regexp while |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
66 # 2.4.10 uses a regexp string that it compiles. |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
67 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
68 markdown2_vi = markdown2.__version_info__ |
| 7572 | 69 if markdown2_vi > (2, 4, 9): |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
70 # Create the filtering regexp. |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
71 # Allowed default is same as what hyper_re supports. |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
72 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
73 # pathed_schemes are terminated with :// |
| 7572 | 74 pathed_schemes = ['http', 'https', 'ftp', 'ftps'] |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
75 # non_pathed are terminated with a : |
| 7572 | 76 non_pathed_schemes = ["mailto"] |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
77 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
78 for disabled in _disable_url_schemes: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
79 try: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
80 pathed_schemes.remove(disabled) |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
81 except ValueError: # if disabled not in list |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
82 pass |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
83 try: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
84 non_pathed_schemes.remove(disabled) |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
85 except ValueError: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
86 pass |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
87 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
88 re_list = [] |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
89 for scheme in pathed_schemes: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
90 re_list.append(r'(?:%s)://' % scheme) |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
91 for scheme in non_pathed_schemes: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
92 re_list.append(r'(?:%s):' % scheme) |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
93 |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
94 enabled_schemes = r"|".join(re_list) |
| 7572 | 95 |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
96 class Markdown(markdown2.Markdown): |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
97 _safe_protocols = enabled_schemes |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
98 elif markdown2_vi == (2, 4, 9): |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
99 raise RuntimeError("Unsupported version - markdown2 v2.4.9\n") |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
100 else: |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
101 class Markdown(markdown2.Markdown): |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
102 # don't allow disabled protocols in links |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
103 _safe_protocols = re.compile('(?!' + ':|'.join([ |
|
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
104 re.escape(s) for s in _disable_url_schemes]) |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
105 + ':)', re.IGNORECASE) |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
106 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
107 def _extras(config): |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
108 extras = {'fenced-code-blocks': {}, 'nofollow': None} |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
109 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
110 extras['break-on-newline'] = True |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
111 return extras |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
112 |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
113 markdown = lambda s, c: Markdown(safe_mode='escape', extras=_extras(c)).convert(s) # noqa: E731 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
114 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
115 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
116 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
117 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
118 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
119 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
120 def _import_markdown(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
121 try: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
122 from markdown import markdown as markdown_impl |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
123 from markdown.extensions import Extension as MarkdownExtension |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
124 from markdown.treeprocessors import Treeprocessor |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
125 |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
126 class RestrictLinksProcessor(Treeprocessor): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
127 def run(self, root): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
128 for el in root.iter('a'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
129 if 'href' in el.attrib: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
130 url = el.attrib['href'].lstrip(' \r\n\t\x1a\0').lower() |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
131 for s in _disable_url_schemes: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
132 if url.startswith(s + ':'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
133 el.attrib['href'] = '#' |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
134 |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
135 class LinkRendererWithRel(Treeprocessor): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
136 ''' Rendering class that sets the rel="nofollow noreferer" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
137 for links. ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
138 rel_value = "nofollow noopener" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
139 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
140 def run(self, root): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
141 for el in root.iter('a'): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
142 if 'href' in el.attrib: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
143 url = el.get('href').lstrip(' \r\n\t\x1a\0').lower() |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
144 if not url.startswith('http'): # only add rel for absolute http url's |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
145 continue |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
146 el.set('rel', self.rel_value) |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
147 |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
148 # make sure any HTML tags get escaped and some links restricted |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
149 # and rel="nofollow noopener" are added to links |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
150 class SafeHtml(MarkdownExtension): |
|
6100
d4ce26b14cf5
backward compatibility with older Markdown modules that pass globals arg
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6099
diff
changeset
|
151 def extendMarkdown(self, md, md_globals=None): |
|
6102
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
152 if hasattr(md.preprocessors, 'deregister'): |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
153 md.preprocessors.deregister('html_block') |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
154 else: |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
155 del md.preprocessors['html_block'] |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
156 if hasattr(md.inlinePatterns, 'deregister'): |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
157 md.inlinePatterns.deregister('html') |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
158 else: |
|
0a82437a2930
make sure to use the right deregister api so it works for older versions
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6100
diff
changeset
|
159 del md.inlinePatterns['html'] |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
160 |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
161 if hasattr(md.preprocessors, 'register'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
162 md.treeprocessors.register(RestrictLinksProcessor(), 'restrict_links', 0) |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
163 else: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
164 md.treeprocessors['restrict_links'] = RestrictLinksProcessor() |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
165 if hasattr(md.preprocessors, 'register'): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
166 md.treeprocessors.register(LinkRendererWithRel(), 'add_link_rel', 0) |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
167 else: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
168 md.treeprocessors['add_link_rel'] = LinkRendererWithRel() |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
169 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
170 def _extensions(config): |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
171 extensions = [SafeHtml(), 'fenced_code'] |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
172 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
173 extensions.append('nl2br') |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
174 return extensions |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
175 |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
176 markdown = lambda s, c: markdown_impl(s, extensions=_extensions(c)) # noqa: E731 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
177 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
178 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
179 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
180 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
181 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
182 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
183 def _import_mistune(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
184 try: |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
185 import mistune |
|
7758
20a87d228240
chore(lint): sort imports
John Rouillard <rouilj@ieee.org>
parents:
7757
diff
changeset
|
186 from mistune import Renderer, escape, escape_link |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
187 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
188 mistune._scheme_blacklist = [s + ':' for s in _disable_url_schemes] |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
189 |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
190 class LinkRendererWithRel(Renderer): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
191 ''' Rendering class that sets the rel="nofollow noreferer" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
192 for links. ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
193 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
194 rel_value = "nofollow noopener" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
195 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
196 def autolink(self, link, is_email=False): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
197 ''' handle <url or email> style explicit links ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
198 text = link = escape_link(link) |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
199 if is_email: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
200 link = 'mailto:%s' % link |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
201 return '<a href="%(href)s">%(text)s</a>' % { |
|
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
202 'href': link, 'text': text} |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
203 return '<a href="%(href)s" rel="%(rel)s">%(href)s</a>' % { |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
204 'rel': self.rel_value, 'href': escape_link(link)} |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
205 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
206 def link(self, link, title, content): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
207 ''' handle [text](url "title") style links and Reference |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
208 links ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
209 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
210 values = { |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
211 'content': escape(content), |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
212 'href': escape_link(link), |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
213 'rel': self.rel_value, |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
214 'title': escape(title) if title else '', |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
215 } |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
216 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
217 if title: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
218 return '<a href="%(href)s" rel="%(rel)s" ' \ |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
219 'title="%(title)s">%(content)s</a>' % values |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
220 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
221 return '<a href="%(href)s" rel="%(rel)s">%(content)s</a>' % values |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
222 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
223 def _options(config): |
|
7029
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
224 options = {'renderer': LinkRendererWithRel(escape=True)} |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
225 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
226 options['hard_wrap'] = True |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
227 return options |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
228 |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
229 markdown = lambda s, c: mistune.markdown(s, **_options(c)) # noqa: E731 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
230 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
231 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
232 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
233 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
234 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
235 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
236 markdown = _import_markdown2() or _import_markdown() or _import_mistune() |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
237 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
238 |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
239 def anti_csrf_nonce(client, lifetime=None): |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
240 ''' Create a nonce for defending against CSRF attack. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
241 |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
242 Then it stores the nonce, the session id for the user |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
243 and the user id in the one time key database for use |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
244 by the csrf validator that runs in the client::inner_main |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
245 module/function. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
246 ''' |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
247 otks = client.db.getOTKManager() |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6814
diff
changeset
|
248 key = otks.getUniqueKey() |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
249 # lifetime is in minutes. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
250 if lifetime is None: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
251 lifetime = client.db.config['WEB_CSRF_TOKEN_LIFETIME'] |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
252 |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6706
diff
changeset
|
253 ts = otks.lifetime(lifetime * 60) |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
254 otks.set(key, uid=client.db.getuid(), |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
255 sid=client.session_api._sid, |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
256 __timestamp=ts) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5264
diff
changeset
|
257 otks.commit() |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
258 return key |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
259 |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
260 # templating |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
261 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
262 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6104
diff
changeset
|
263 class NoTemplate(RoundupException): |
|
1068
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
264 pass |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
265 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
266 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6104
diff
changeset
|
267 class Unauthorised(RoundupException): |
|
2466
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
268 def __init__(self, action, klass, translator=None): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
269 self.action = action |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
270 self.klass = klass |
|
2466
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
271 if translator: |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
272 self._ = translator.gettext |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
273 else: |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
274 self._ = TranslationService.get_translation().gettext |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
275 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
276 def __str__(self): |
|
2466
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
277 return self._('You are not allowed to %(action)s ' |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
278 'items of class %(class)s') % { |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
279 'action': self.action, 'class': self.klass} |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
280 |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
281 |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
282 # --- Template Loader API |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
283 |
|
4719
05fe39f1d823
API break, bumping version to 1.15.0, renamed TemplatesBase to
anatoly techtonik <techtonik@gmail.com>
parents:
4696
diff
changeset
|
284 class LoaderBase: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
285 """ Base for engine-specific template Loader class.""" |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
286 def __init__(self, template_dir): |
|
4743
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
287 # loaders are given the template directory as a first argument |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
288 pass |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
289 |
|
4748
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4747
diff
changeset
|
290 def precompile(self): |
|
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4747
diff
changeset
|
291 """ This method may be called when tracker is loaded to precompile |
|
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4747
diff
changeset
|
292 templates that support this ability. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
293 """ |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
294 pass |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
295 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
296 def load(self, tplname): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
297 """ Load template and return template object with render() method. |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
298 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
299 "tplname" is a template name. For filesystem loaders it is a |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
300 filename without extensions, typically in the "classname.view" |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
301 format. |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
302 """ |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
303 raise NotImplementedError |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
304 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
305 def check(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
306 """ Check if template with the given name exists. Should return |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
307 false if template can not be found. |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
308 """ |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
309 raise NotImplementedError |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
310 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
311 |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
312 class TALLoaderBase(LoaderBase): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
313 """ Common methods for the legacy TAL loaders.""" |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
314 |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
315 def __init__(self, template_dir): |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
316 self.template_dir = template_dir |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
317 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
318 def _find(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
319 """ Find template, return full path and filename of the |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
320 template if it is found, None otherwise.""" |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
321 realsrc = os.path.realpath(self.template_dir) |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
322 for extension in ['', '.html', '.xml']: |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
323 f = name + extension |
|
5145
d22eb1d40d0e
issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
324 src = os.path.join(realsrc, f) |
|
d22eb1d40d0e
issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
325 realpath = os.path.realpath(src) |
|
5423
58057ea53779
Python 3 preparation: avoid string.find.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
326 if not realpath.startswith(realsrc): |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
327 return None # will raise invalid template |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
328 if os.path.exists(src): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
329 return (src, f) |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
330 return None |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
331 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
332 def check(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
333 return bool(self._find(name)) |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
334 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
335 def precompile(self): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
336 """ Precompile templates in load directory by loading them """ |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
337 for filename in os.listdir(self.template_dir): |
|
2854
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
338 # skip subdirs |
|
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
339 if os.path.isdir(filename): |
|
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
340 continue |
| 2961 | 341 |
|
2959
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
342 # skip files without ".html" or ".xml" extension - .css, .js etc. |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
343 for extension in '.html', '.xml': |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
344 if filename.endswith(extension): |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
345 break |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
346 else: |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
347 continue |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
348 |
| 2961 | 349 # remove extension |
|
2959
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
350 filename = filename[:-len(extension)] |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
351 self.load(filename) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
352 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
353 def __getitem__(self, name): |
|
4724
98b727b6f7f8
Self-focument API in templating.py loader class
anatoly techtonik <techtonik@gmail.com>
parents:
4721
diff
changeset
|
354 """Special method to access templates by loader['name']""" |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
355 try: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
356 return self.load(name) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5232
diff
changeset
|
357 except NoTemplate as message: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
358 raise KeyError(message) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
359 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
360 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
361 class MultiLoader(LoaderBase): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
362 def __init__(self): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
363 self.loaders = [] |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
364 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
365 def add_loader(self, loader): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
366 self.loaders.append(loader) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
367 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
368 def check(self, name): |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
369 for loader in self.loaders: |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
370 if loader.check(name): |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
371 return True |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
372 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
373 def load(self, name): |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
374 for loader in self.loaders: |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
375 if loader.check(name): |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
376 return loader.load(name) |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
377 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
378 def __getitem__(self, name): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
379 """Needed for TAL templates compatibility""" |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
380 # [ ] document root and helper templates |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
381 try: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
382 return self.load(name) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5232
diff
changeset
|
383 except NoTemplate as message: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
384 raise KeyError(message) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
385 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
386 |
|
4743
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
387 class TemplateBase: |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
388 content_type = 'text/html' |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
389 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
390 |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
391 def get_loader(template_dir, template_engine): |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
392 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
393 # Support for multiple engines using fallback mechanizm |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
394 # meaning that if first engine can't find template, we |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
395 # use the second |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
396 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
397 engines = template_engine.split(',') |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
398 engines = [x.strip() for x in engines] |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
399 ml = MultiLoader() |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
400 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
401 for engine_name in engines: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
402 if engine_name == 'chameleon': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
403 from .engine_chameleon import Loader |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
404 elif engine_name == 'jinja2': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
405 from .engine_jinja2 import Jinja2Loader as Loader |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
406 elif engine_name == 'zopetal': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
407 from .engine_zopetal import Loader |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
408 else: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
409 raise Exception('Unknown template engine "%s"' % engine_name) |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
410 ml.add_loader(Loader(template_dir)) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
411 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
412 if len(engines) == 1: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
413 return ml.loaders[0] |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
414 else: |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
415 return ml |
|
4587
a2eb4fb3e6d8
New Chameleon templating engine, engine is now configurable.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4584
diff
changeset
|
416 |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
417 # --/ Template Loader API |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
418 |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
419 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
420 def context(client, template=None, classname=None, request=None): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
421 """Return the rendering context dictionary |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
422 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
423 The dictionary includes following symbols: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
424 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
425 *context* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
426 this is one of three things: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
427 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
428 1. None - we're viewing a "home" page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
429 2. The current class of item being displayed. This is an HTMLClass |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
430 instance. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
431 3. The current item from the database, if we're viewing a specific |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
432 item, as an HTMLItem instance. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
433 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
434 *request* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
435 Includes information about the current request, including: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
437 - the url |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
438 - the current index information (``filterspec``, ``filter`` args, |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
439 ``properties``, etc) parsed out of the form. |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
440 - methods for easy filterspec link generation |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
441 - *user*, the current user node as an HTMLItem instance |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
442 - *form*, the current CGI form information as a FieldStorage |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
443 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
444 *config* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
445 The current tracker config. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
446 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
447 *db* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
448 The current database, used to access arbitrary database items. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
449 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
450 *utils* |
|
4584
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
451 This is an instance of client.instance.TemplatingUtils, which is |
|
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
452 optionally defined in the tracker interfaces module and defaults to |
|
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
453 TemplatingUtils class in this file. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
454 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
455 *templates* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
456 Access to all the tracker templates by name. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
457 Used mainly in *use-macro* commands. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
458 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
459 *template* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
460 Current rendering template. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
461 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
462 *true* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
463 Logical True value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
464 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
465 *false* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
466 Logical False value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
467 |
|
2562
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
468 *i18n* |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
469 Internationalization service, providing string translation |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
470 methods ``gettext`` and ``ngettext``. |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
471 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
472 """ |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
473 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
474 # if template, classname and/or request are not passed explicitely, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
475 # compute form client |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
476 if template is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
477 template = client.template |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
478 if classname is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
479 classname = client.classname |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
480 if request is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
481 request = HTMLRequest(client) |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1263
diff
changeset
|
482 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
483 c = { |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
484 'context': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
485 'options': {}, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
486 'nothing': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
487 'request': request, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
488 'db': HTMLDatabase(client), |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
489 'config': client.instance.config, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
490 'tracker': client.instance, |
|
4584
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
491 'utils': client.instance.TemplatingUtils(client), |
|
2854
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
492 'templates': client.instance.templates, |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
493 'template': template, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
494 'true': 1, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
495 'false': 0, |
|
2538
09b0fc5b1716
make client.translator available to templates as 'i18n'
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2524
diff
changeset
|
496 'i18n': client.translator |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
497 } |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
498 # add in the item if there is one |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
499 if client.nodeid: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
500 c['context'] = HTMLItem(client, classname, client.nodeid, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
501 anonymous=1) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
502 elif classname in client.db.classes: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
503 c['context'] = HTMLClass(client, classname, anonymous=1) |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
504 return c |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
505 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
506 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 class HTMLDatabase: |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
508 """ Return HTMLClasses for valid class fetches |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
509 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
510 def __init__(self, client): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
511 self._client = client |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
512 self._ = client._ |
|
1513
455f79a2981f
add access to real db through HTML db
Richard Jones <richard@users.sourceforge.net>
parents:
1510
diff
changeset
|
513 self._db = client.db |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
514 |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
515 # we want config to be exposed |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
516 self.config = client.db.config |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
517 |
|
4055
de832c486f86
Fix designator regular expression in HTMLDatabase.__getitem__.
Stefan Seefeld <stefan@seefeld.name>
parents:
4054
diff
changeset
|
518 def __getitem__(self, item, desre=re.compile(r'(?P<cl>[a-zA-Z_]+)(?P<id>[-\d]+)')): |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
519 # check to see if we're actually accessing an item |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
520 m = desre.match(item) |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
521 if m: |
|
2157
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
522 cl = m.group('cl') |
|
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
523 self._client.db.getclass(cl) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
524 return HTMLItem(self._client, cl, m.group('id')) |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
525 else: |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
526 self._client.db.getclass(item) |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
527 return HTMLClass(self._client, item) |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
528 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
529 def __getattr__(self, attr): |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
530 try: |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
531 return self[attr] |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
532 except KeyError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
533 raise AttributeError(attr) |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
534 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 def classes(self): |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
536 class_keys = sorted(self._client.db.classes.keys()) |
|
2118
917826e3fb54
In the classes method of HTMLDatabase, the variable 'm' was undefined.
Brian Kelley <wc2so1@users.sourceforge.net>
parents:
2116
diff
changeset
|
537 m = [] |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
538 for item in class_keys: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
539 m.append(HTMLClass(self._client, item)) |
|
2118
917826e3fb54
In the classes method of HTMLDatabase, the variable 'm' was undefined.
Brian Kelley <wc2so1@users.sourceforge.net>
parents:
2116
diff
changeset
|
540 return m |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
541 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
542 |
| 5809 | 543 num_re = re.compile(r'^-?\d+$') |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
544 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
545 |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
546 def lookupIds(db, prop, ids, fail_ok=0, num_re=num_re, do_lookup=True): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
547 """ "fail_ok" should be specified if we wish to pass through bad values |
|
2049
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
548 (most likely form values that we wish to represent back to the user) |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
549 "do_lookup" is there for preventing lookup by key-value (if we |
|
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
550 know that the value passed *is* an id) |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
551 """ |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
552 cl = db.getclass(prop.classname) |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
553 l = [] |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
554 for entry in ids: |
|
5927
a2a7860502fa
Fix lookupIds for try_id_parsing off
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5907
diff
changeset
|
555 # Do not look up numeric IDs if try_id_parsing |
|
a2a7860502fa
Fix lookupIds for try_id_parsing off
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5907
diff
changeset
|
556 if prop.try_id_parsing and num_re.match(entry): |
|
5876
716d50585c8d
Fix Link/Multilink searching
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5837
diff
changeset
|
557 l.append(entry) |
|
716d50585c8d
Fix Link/Multilink searching
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5837
diff
changeset
|
558 continue |
|
3861
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
559 if do_lookup: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
560 try: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
561 item = cl.lookup(entry) |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
562 except (TypeError, KeyError): |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
563 pass |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
564 else: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
565 l.append(item) |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
566 continue |
|
7936
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
567 |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
568 # if fail_ok, ignore lookup error |
|
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
569 # otherwise entry must be existing object id rather than key value |
|
5876
716d50585c8d
Fix Link/Multilink searching
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5837
diff
changeset
|
570 if fail_ok: |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
571 l.append(entry) |
|
7936
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
572 elif entry == '@current_user' and prop.classname == 'user': |
|
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
573 # as a special case, '@current_user' means the currently |
|
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
574 # logged-in user |
|
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
575 l.append(entry) |
|
a9b136565838
feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents:
7923
diff
changeset
|
576 |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
577 return l |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
578 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
579 |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
580 def lookupKeys(linkcl, key, ids, num_re=num_re): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
581 """ Look up the "key" values for "ids" list - though some may already |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
582 be key values, not ids. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
583 """ |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
584 l = [] |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
585 for entry in ids: |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
586 if num_re.match(entry): |
|
5051
b69c5e763295
issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents:
5043
diff
changeset
|
587 try: |
|
5193
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
588 label = linkcl.get(entry, key) |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
589 except IndexError: |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
590 # fall back to id if illegal (avoid template crash) |
|
5051
b69c5e763295
issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents:
5043
diff
changeset
|
591 label = entry |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
592 # fall back to designator if label is None |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
593 if label is None: |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
594 label = '%s%s' % (linkcl.classname, entry) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
595 l.append(label) |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
596 else: |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
597 l.append(entry) |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
598 return l |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
599 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
600 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
601 def _set_input_default_args(dic): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
602 # 'text' is the default value anyway -- |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
603 # but for CSS usage it should be present |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
604 dic.setdefault('type', 'text') |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
605 # useful e.g for HTML LABELs: |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
606 if 'id' not in dic: |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
607 try: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
608 if dic['text'] in ('radio', 'checkbox'): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
609 dic['id'] = '%(name)s-%(value)s' % dic |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
610 else: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
611 dic['id'] = dic['name'] |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
612 except KeyError: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
613 pass |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
614 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
615 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
616 def html4_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
617 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
618 are represented without a value. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
619 <input required ..> not <input required="required" ...> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
620 The latter is xhtml. Recognize booleans by: |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
621 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
622 Code can use None to indicate a pure boolean. |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
623 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
624 return ' '.join(['%s="%s"' % (k, html_escape(str(v), True)) |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
625 if v is not None else '%s' % (k) |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
626 for k, v in sorted(attrs.items())]) |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
627 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
628 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
629 def xhtml_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
630 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
631 are represented with a value that is the same as |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
632 the attribute name.. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
633 <input required="required" ...> not <input required ..> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
634 The latter is html4 or 5. Recognize booleans by: |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
635 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
636 Code can use None to indicate a pure boolean. |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
637 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
638 return ' '.join(['%s="%s"' % (k, html_escape(str(v), True)) |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
639 if v is not None else '%s="%s"' % (k, k) |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
640 for k, v in sorted(attrs.items())]) |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
641 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
642 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
643 def input_html4(**attrs): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
644 """Generate an 'input' (html4) element with given attributes""" |
|
3909
e89bcb28f683
indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3905
diff
changeset
|
645 _set_input_default_args(attrs) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
646 return '<input %s>' % html4_cgi_escape_attrs(**attrs) |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
647 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
648 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
649 def input_xhtml(**attrs): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
650 """Generate an 'input' (xhtml) element with given attributes""" |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
651 _set_input_default_args(attrs) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
652 return '<input %s/>' % xhtml_cgi_escape_attrs(**attrs) |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
653 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
654 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
655 class HTMLInputMixin(object): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
656 """ requires a _client property """ |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
657 def __init__(self): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
658 html_version = 'html4' |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
659 if hasattr(self._client.instance.config, 'HTML_VERSION'): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
660 html_version = self._client.instance.config.HTML_VERSION |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
661 if html_version == 'xhtml': |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
662 self.input = input_xhtml |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
663 self.cgi_escape_attrs = xhtml_cgi_escape_attrs |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
664 else: |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
665 self.input = input_html4 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
666 self.cgi_escape_attrs = html4_cgi_escape_attrs |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
667 # self._context is used for translations. |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
668 # will be initialized by the first call to .gettext() |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
669 self._context = None |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
670 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
671 def gettext(self, msgid): |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
672 """Return the localized translation of msgid""" |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
673 if self._context is None: |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
674 self._context = context(self._client) |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
675 return self._client.translator.translate( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
676 domain="roundup", msgid=msgid, context=self._context) |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
677 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
678 _ = gettext |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
679 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
680 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
681 class HTMLPermissions(object): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
682 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
683 def view_check(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
684 """ Raise the Unauthorised exception if the user's not permitted to |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
685 view this class. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
686 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
687 if not self.is_view_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
688 raise Unauthorised("view", self._classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
689 translator=self._client.translator) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
690 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
691 def edit_check(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
692 """ Raise the Unauthorised exception if the user's not permitted to |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
693 edit items of this class. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
694 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
695 if not self.is_edit_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
696 raise Unauthorised("edit", self._classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
697 translator=self._client.translator) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
698 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
699 def retire_check(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
700 """ Raise the Unauthorised exception if the user's not permitted to |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
701 retire items of this class. |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
702 """ |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
703 if not self.is_retire_ok(): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
704 raise Unauthorised("retire", self._classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
705 translator=self._client.translator) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
706 |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
707 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
708 class HTMLClass(HTMLInputMixin, HTMLPermissions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
709 """ Accesses through a class (either through *class* or *db.<classname>*) |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
710 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
711 def __init__(self, client, classname, anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
712 self._client = client |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
713 self._ = client._ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
714 self._db = client.db |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
715 self._anonymous = anonymous |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
716 |
|
1136
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
717 # we want classname to be exposed, but _classname gives a |
|
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
718 # consistent API for extending Class/Item |
|
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
719 self._classname = self.classname = classname |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
720 self._klass = self._db.getclass(self.classname) |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
721 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
722 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
723 HTMLInputMixin.__init__(self) |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
724 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
725 def is_edit_ok(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
726 """ Is the user allowed to Create the current class? |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
727 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
728 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
729 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
730 'Create', self._client.userid, self._classname) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
731 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
732 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
733 """ Is the user allowed to retire items of the current class? |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
734 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
735 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
736 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
737 'Retire', self._client.userid, self._classname) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
738 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
739 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
740 """ Is the user allowed to restore retired items of the current class? |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
741 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
742 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
743 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
744 'Restore', self._client.userid, self._classname) |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
745 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
746 def is_view_ok(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
747 """ Is the user allowed to View the current class? |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
748 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
749 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
750 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
751 'View', self._client.userid, self._classname) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
752 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
753 def is_only_view_ok(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
754 """ Is the user only allowed to View (ie. not Create) the current class? |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
755 """ |
|
2651
17bab083c8a0
Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
756 return self.is_view_ok() and not self.is_edit_ok() |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
757 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
758 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
759 return '<HTMLClass(0x%x) %s>' % (id(self), self.classname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
760 |
| 1002 | 761 def __getitem__(self, item): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
762 """ return an HTMLProperty instance |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
763 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
764 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
765 # we don't exist |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
766 if item == 'id': |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
767 return None |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
768 |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
769 # get the property |
|
2056
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
770 try: |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
771 prop = self._props[item] |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
772 except KeyError: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
773 raise KeyError('No such property "%s" on %s' % (item, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
774 self.classname)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
775 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
776 # look up the correct HTMLProperty class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
777 for klass, htmlklass in propclasses: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
778 if not isinstance(prop, klass): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
779 continue |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3770
diff
changeset
|
780 return htmlklass(self._client, self._classname, None, prop, item, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
781 None, self._anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
782 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
783 # no good |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
784 raise KeyError(item) |
| 1002 | 785 |
| 786 def __getattr__(self, attr): | |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
787 """ convenience access """ |
| 1002 | 788 try: |
| 789 return self[attr] | |
| 790 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
791 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
792 |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
793 def designator(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
794 """ Return this class' designator (classname) """ |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
795 return self._classname |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
796 |
|
3860
c672b15ddae6
- fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3857
diff
changeset
|
797 def getItem(self, itemid, num_re=num_re): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
798 """ Get an item of this class by its item id. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
799 """ |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
800 # make sure we're looking at an itemid |
|
2010
1b11ffd8015e
forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
801 if not isinstance(itemid, type(1)) and not num_re.match(itemid): |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
802 itemid = self._klass.lookup(itemid) |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
803 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
804 return HTMLItem(self._client, self.classname, itemid) |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
805 |
|
5222
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
806 def properties(self, sort=1, cansearch=True): |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
807 """ Return HTMLProperty for allowed class' properties. |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
808 |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
809 To return all properties call it with cansearch=False |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
810 and it will return properties the user is unable to |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
811 search. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
812 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
813 l = [] |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
814 canSearch = self._db.security.hasSearchPermission |
|
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
815 userid = self._client.userid |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
816 for name, prop in self._props.items(): |
|
5222
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
817 if cansearch and \ |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
818 not canSearch(userid, self._classname, name): |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
819 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
820 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
821 if isinstance(prop, klass): |
|
4481
9bbf3758c16a
Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents:
4466
diff
changeset
|
822 value = prop.get_default_value() |
|
1450
7a9db3f9022a
... and a classname
Richard Jones <richard@users.sourceforge.net>
parents:
1449
diff
changeset
|
823 l.append(htmlklass(self._client, self._classname, '', |
|
4481
9bbf3758c16a
Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents:
4466
diff
changeset
|
824 prop, name, value, self._anonymous)) |
|
1633
ac5f7e5a11e5
sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents:
1631
diff
changeset
|
825 if sort: |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
826 l.sort(key=lambda a: a._name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
827 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
828 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
829 def list(self, sort_on=None): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
830 """ List all items in this class. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
831 """ |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
832 # get the list and sort it nicely |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
833 class_list = self._klass.list() |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
834 keyfunc = make_key_function(self._db, self._classname, sort_on) |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
835 class_list.sort(key=keyfunc) |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
836 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
837 # check perms |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
838 check = self._client.db.security.hasPermission |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
839 userid = self._client.userid |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
840 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
841 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
842 |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
843 class_list = [HTMLItem(self._client, self._classname, itemid) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
844 for itemid in class_list if |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
845 check('View', userid, self._classname, itemid=itemid)] |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
846 |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
847 return class_list |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
848 |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
849 def csv(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
850 """ Return the items of this class as a chunk of CSV text. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
851 """ |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
852 props = self.propnames() |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5416
diff
changeset
|
853 s = StringIO() |
|
3179
88dbe6b3d891
merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents:
3169
diff
changeset
|
854 writer = csv.writer(s) |
|
1767
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
855 writer.writerow(props) |
|
4090
6f698aef2ad4
fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents:
4088
diff
changeset
|
856 check = self._client.db.security.hasPermission |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
857 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
858 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
859 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
860 for nodeid in self._klass.list(): |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
861 l = [] |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
862 for name in props: |
|
4090
6f698aef2ad4
fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents:
4088
diff
changeset
|
863 # check permission to view this property on this item |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
864 if not check('View', userid, itemid=nodeid, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
865 classname=self._klass.classname, property=name): |
|
4090
6f698aef2ad4
fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents:
4088
diff
changeset
|
866 raise Unauthorised('view', self._klass.classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
867 translator=self._client.translator) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
868 value = self._klass.get(nodeid, name) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
869 if value is None: |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
870 l.append('') |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
871 elif isinstance(value, type([])): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
872 l.append(':'.join(map(str, value))) |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
873 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
874 l.append(str(self._klass.get(nodeid, name))) |
|
1767
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
875 writer.writerow(l) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
876 return s.getvalue() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
877 |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
878 def propnames(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
879 """ Return the list of the names of the properties of this class. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
880 """ |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
881 idlessprops = sorted(self._klass.getprops(protected=0).keys()) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
882 return ['id'] + idlessprops |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
883 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
884 def filter(self, request=None, filterspec={}, sort=[], group=[]): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
885 """ Return a list of items from this class, filtered and sorted |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
886 by the current requested filterspec/filter/sort/group args |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
887 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
888 "request" takes precedence over the other three arguments. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
889 """ |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
890 security = self._db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
891 userid = self._client.userid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
892 if request is not None: |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
893 # for a request we asume it has already been |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
894 # security-filtered |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
895 filterspec = request.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
896 sort = request.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
897 group = request.group |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
898 else: |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
899 cn = self.classname |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
900 filterspec = security.filterFilterspec(userid, cn, filterspec) |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
901 sort = security.filterSortspec(userid, cn, sort) |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
902 group = security.filterSortspec(userid, cn, group) |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
903 |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
904 check = security.hasPermission |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
905 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
906 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
907 |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
908 filtered = [HTMLItem(self._client, self.classname, itemid) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
909 for itemid in self._klass.filter(None, filterspec, |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
910 sort, group) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
911 if check('View', userid, self.classname, itemid=itemid)] |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
912 return filtered |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
913 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
914 def classhelp(self, properties=None, label=''"(list)", width='500', |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
915 height='600', property='', form='itemSynopsis', |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
916 pagesize=50, inputtype="checkbox", html_kwargs={}, |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
917 group='', sort=None, filter=None): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
918 """Pop up a javascript window with class help |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
919 |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
920 This generates a link to a popup window which displays the |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
921 properties indicated by "properties" of the class named by |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
922 "classname". The "properties" should be a comma-separated list |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
923 (eg. 'id,name,description'). Properties defaults to all the |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
924 properties of a class (excluding id, creator, created and |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
925 activity). |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
926 |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
927 You may optionally override the label displayed, the width, |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
928 the height, the number of items per page and the field on which |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
929 the list is sorted (defaults to username if in the displayed |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
930 properties). |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
931 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
932 With the "filter" arg it is possible to specify a filter for |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
933 which items are supposed to be displayed. It has to be of |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
934 the format "<field>=<values>;<field>=<values>;...". |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
935 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
936 The popup window will be resizable and scrollable. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
937 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
938 If the "property" arg is given, it's passed through to the |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
939 javascript help_window function. |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
940 |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
941 You can use inputtype="radio" to display a radio box instead |
|
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
942 of the default checkbox (useful for entering Link-properties) |
|
1551
9b9917b7719b
added an additional argument to help_window to allow comms back to form
Richard Jones <richard@users.sourceforge.net>
parents:
1543
diff
changeset
|
943 |
|
2827
43e3a7ac1190
fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2761
diff
changeset
|
944 If the "form" arg is given, it's passed through to the |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
945 javascript help_window function. - it's the name of the form |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
946 the "property" belongs to. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
947 """ |
|
1113
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
948 if properties is None: |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
949 properties = sorted(self._klass.getprops(protected=0).keys()) |
|
1113
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
950 properties = ','.join(properties) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
951 if sort is None: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
952 if 'username' in properties.split(','): |
|
3610
1dbaa664be28
sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents:
3594
diff
changeset
|
953 sort = 'username' |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
954 else: |
| 4032 | 955 sort = self._klass.orderprop() |
|
3610
1dbaa664be28
sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents:
3594
diff
changeset
|
956 sort = '&@sort=' + sort |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
957 if group: |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
958 group = '&@group=' + group |
|
1551
9b9917b7719b
added an additional argument to help_window to allow comms back to form
Richard Jones <richard@users.sourceforge.net>
parents:
1543
diff
changeset
|
959 if property: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
960 property = '&property=%s' % property |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
961 if form: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
962 form = '&form=%s' % form |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
963 if inputtype: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
964 type = '&type=%s' % inputtype |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
965 if filter: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
966 filterprops = filter.split(';') |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
967 filtervalues = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
968 names = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
969 for x in filterprops: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
970 (name, values) = x.split('=') |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
971 names.append(name) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
972 filtervalues.append('&%s=%s' % (name, urllib_.quote(values))) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
973 filter = '&@filter=%s%s' % (','.join(names), ''.join(filtervalues)) |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
974 else: |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
975 filter = '' |
|
3169
d8d1ebd80930
fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents:
3164
diff
changeset
|
976 help_url = "%s?@startwith=0&@template=help&"\ |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
977 "properties=%s%s%s%s%s%s&@pagesize=%s%s" % \ |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3573
diff
changeset
|
978 (self.classname, properties, property, form, type, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
979 group, sort, pagesize, filter) |
|
3169
d8d1ebd80930
fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents:
3164
diff
changeset
|
980 onclick = "javascript:help_window('%s', '%s', '%s');return false;" % \ |
|
d8d1ebd80930
fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents:
3164
diff
changeset
|
981 (help_url, width, height) |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
982 return ('<a class="classhelp" data-helpurl="%s" ' |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
983 'data-width="%s" data-height="%s" href="%s" ' |
|
7970
b63fcfc2c984
bug: make classhelper link open in new window when js is disabled
John Rouillard <rouilj@ieee.org>
parents:
7936
diff
changeset
|
984 'target="_blank" onclick="%s" %s>%s</a>') % ( |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
985 help_url, width, height, |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
986 help_url, onclick, self.cgi_escape_attrs(**html_kwargs), |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
987 self._(label)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
988 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
989 def submit(self, label=''"Submit New Entry", action="new", html_kwargs={}): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
990 """ Generate a submit button (and action hidden element) |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
991 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
992 "html_kwargs" specified additional html args for the |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
993 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
994 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
995 Generate nothing if we're not editable. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
996 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
997 if not self.is_edit_ok(): |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
998 return '' |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
999 |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1000 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1001 self.input(type="submit", name="submit_button", |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1002 value=self._(label), **html_kwargs) + \ |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1003 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1004 self.input(type="hidden", name="@csrf", |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1005 value=anti_csrf_nonce(self._client)) + \ |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
1006 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1007 self.input(type="hidden", name="@action", value=action) |
|
999
8d54c0f3198e
Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents:
985
diff
changeset
|
1008 |
|
6428
32a04dc87b30
Make HTMLClass::history signature compatible to _HTMLItem::history
John Rouillard <rouilj@ieee.org>
parents:
6422
diff
changeset
|
1009 def history(self, **args): |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1010 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1011 return self._('[hidden]') |
|
2466
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
1012 return self._('New node - no history') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1013 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1014 def renderWith(self, name, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1015 """ Render this class with the given template. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1016 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1017 # create a new request and override the specified args |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1018 req = HTMLRequest(self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1019 req.classname = self.classname |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1020 req.update(kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1021 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1022 # new template, using the specified classname and request |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1023 # [ ] this code is too similar to client.renderContext() |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1024 tplname = self._client.selectTemplate(self.classname, name) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1025 pt = self._client.instance.templates.load(tplname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1026 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1027 # use our fabricated request |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1028 args = { |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
1029 'ok_message': self._client._ok_message, |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
1030 'error_message': self._client._error_message |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1031 } |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1032 return pt.render(self._client, self.classname, req, **args) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1033 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1034 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1035 class _HTMLItem(HTMLInputMixin, HTMLPermissions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1036 """ Accesses through an *item* |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1037 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1038 def __init__(self, client, classname, nodeid, anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1039 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1040 self._db = client.db |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1041 self._classname = classname |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1042 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1043 self._klass = self._db.getclass(classname) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1044 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1045 |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1046 # do we prefix the form items with the item's identification? |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1047 self._anonymous = anonymous |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1048 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1049 HTMLInputMixin.__init__(self) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1050 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1051 def is_edit_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1052 """ Is the user allowed to Edit this item? |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1053 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1054 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1055 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1056 'Edit', self._client.userid, self._classname, itemid=self._nodeid) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1057 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1058 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1059 """ Is the user allowed to Reture this item? |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1060 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1061 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1062 return perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1063 'Retire', self._client.userid, self._classname, |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1064 itemid=self._nodeid) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1065 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1066 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1067 """ Is the user allowed to restore this item? |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1068 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1069 perm = self._db.security.hasPermission |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1070 return perm('Web Access', self._client.userid) and perm( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1071 'Restore', self._client.userid, self._classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1072 itemid=self._nodeid) |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1073 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1074 def is_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1075 """ Is the user allowed to View this item? |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1076 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1077 perm = self._db.security.hasPermission |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1078 if perm('Web Access', self._client.userid) and perm( |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1079 'View', self._client.userid, self._classname, |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1080 itemid=self._nodeid): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1081 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1082 return self.is_edit_ok() |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1083 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1084 def is_only_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1085 """ Is the user only allowed to View (ie. not Edit) this item? |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1086 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1087 return self.is_view_ok() and not self.is_edit_ok() |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1088 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1089 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1090 return '<HTMLItem(0x%x) %s %s>' % (id(self), self._classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1091 self._nodeid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1092 |
| 1002 | 1093 def __getitem__(self, item): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1094 """ return an HTMLProperty instance |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1095 this now can handle transitive lookups where item is of the |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1096 form x.y.z |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1097 """ |
| 1002 | 1098 if item == 'id': |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1099 return self._nodeid |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1100 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1101 items = item.split('.', 1) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1102 has_rest = len(items) > 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1103 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1104 # get the property |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1105 prop = self._props[items[0]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1106 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1107 if has_rest and not isinstance(prop, (hyperdb.Link, hyperdb.Multilink)): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1108 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1109 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1110 # get the value, handling missing values |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1111 value = None |
|
6398
26e5c42f148c
issue2551078 - Fix traceback caused when putting two id's into a Link html field.
John Rouillard <rouilj@ieee.org>
parents:
6377
diff
changeset
|
1112 try: |
|
26e5c42f148c
issue2551078 - Fix traceback caused when putting two id's into a Link html field.
John Rouillard <rouilj@ieee.org>
parents:
6377
diff
changeset
|
1113 if int(self._nodeid) > 0: |
|
26e5c42f148c
issue2551078 - Fix traceback caused when putting two id's into a Link html field.
John Rouillard <rouilj@ieee.org>
parents:
6377
diff
changeset
|
1114 value = self._klass.get(self._nodeid, items[0], None) |
|
26e5c42f148c
issue2551078 - Fix traceback caused when putting two id's into a Link html field.
John Rouillard <rouilj@ieee.org>
parents:
6377
diff
changeset
|
1115 except ValueError: |
|
26e5c42f148c
issue2551078 - Fix traceback caused when putting two id's into a Link html field.
John Rouillard <rouilj@ieee.org>
parents:
6377
diff
changeset
|
1116 value = self._nodeid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1117 if value is None: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1118 if isinstance(prop, hyperdb.Multilink): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1119 value = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1120 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1121 # look up the correct HTMLProperty class |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1122 htmlprop = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1123 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1124 if isinstance(prop, klass): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1125 htmlprop = htmlklass(self._client, self._classname, |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1126 self._nodeid, prop, items[0], |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
1127 value, self._anonymous) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1128 if htmlprop is not None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1129 if has_rest: |
|
3699
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
1130 if isinstance(htmlprop, MultilinkHTMLProperty): |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
1131 return [h[items[1]] for h in htmlprop] |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1132 return htmlprop[items[1]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1133 return htmlprop |
| 1002 | 1134 |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1135 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1136 |
| 1002 | 1137 def __getattr__(self, attr): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1138 """ convenience access to properties """ |
| 1002 | 1139 try: |
| 1140 return self[attr] | |
| 1141 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1142 raise AttributeError(attr) |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1143 |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1144 def designator(self): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1145 """Return this item's designator (classname + id).""" |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1146 return '%s%s' % (self._classname, self._nodeid) |
|
2136
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1147 |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1148 def is_retired(self): |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1149 """Is this item retired?""" |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1150 return self._klass.is_retired(self._nodeid) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1151 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1152 def submit(self, label=''"Submit Changes", action="edit", html_kwargs={}): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1153 """Generate a submit button. |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1154 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1155 "html_kwargs" specified additional html args for the |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1156 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1157 |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1158 Also sneak in the lastactivity and action hidden elements. |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1159 """ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1160 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1161 self.input(type="submit", name="submit_button", |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1162 value=self._(label), **html_kwargs) + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1163 '\n' + \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1164 self.input(type="hidden", name="@lastactivity", |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1165 value=self.activity.local(0)) + \ |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1166 '\n' + \ |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1167 self.input(type="hidden", name="@csrf", |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
1168 value=anti_csrf_nonce(self._client)) + \ |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1169 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1170 self.input(type="hidden", name="@action", value=action) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1171 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1172 def journal(self, direction='descending'): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1173 """ Return a list of HTMLJournalEntry instances. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1174 """ |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1175 # XXX do this |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1176 return [] |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1177 |
| 5809 | 1178 def history(self, direction='descending', dre=re.compile(r'^\d+$'), |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1179 limit=None, showall=False): |
|
5112
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1180 """Create an html view of the journal for the item. |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1181 |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1182 Display property changes for all properties that does not have quiet set. |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1183 If showall=True then all properties regardless of quiet setting will be |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1184 shown. |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1185 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1186 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1187 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1188 |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1189 # history should only use database values not current |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1190 # form values. Disable form_wins for the body of the |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1191 # function. Reset it to original value on return. |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1192 orig_form_wins = self._client.form_wins |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1193 self._client.form_wins = False |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1194 |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1195 # get the journal, sort and reverse |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1196 history = self._klass.history(self._nodeid, skipquiet=(not showall)) |
|
5448
754be676ccc8
set key for history sort to avoid sorting history args (could be a dict)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5440
diff
changeset
|
1197 history.sort(key=lambda a: a[:3]) |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1198 history.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1199 |
|
4233
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1200 # restrict the volume |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1201 if limit: |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1202 history = history[:limit] |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1203 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1394
diff
changeset
|
1204 timezone = self._db.getUserTimezone() |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1205 l = [] |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1206 current = {} |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1207 comments = {} |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1208 for _id, evt_date, user, action, args in history: |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1209 date_s = str(evt_date.local(timezone)).replace(".", " ") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1210 arg_s = '' |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1211 if action in ['link', 'unlink'] and isinstance(args, tuple): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1212 if len(args) == 3: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1213 linkcl, linkid, key = args |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1214 arg_s += '<a rel="nofollow noopener" href="%s%s">%s%s %s</a>' % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1215 linkcl, linkid, linkcl, linkid, key) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1216 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1217 arg_s = str(args) |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1218 elif isinstance(args, dict): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1219 cell = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1220 for k in args.keys(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1221 # try to get the relevant property and treat it |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1222 # specially |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1223 try: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1224 prop = self._props[k] |
|
999
8d54c0f3198e
Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents:
985
diff
changeset
|
1225 except KeyError: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1226 prop = None |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1227 if prop is None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1228 # property no longer exists |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1229 comments['no_exist'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1230 "<em>The indicated property no longer exists</em>") |
|
7060
2c89bdc88923
Remove translation marker.
John Rouillard <rouilj@ieee.org>
parents:
7037
diff
changeset
|
1231 cell.append('<em>%s: %s</em>\n' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1232 % (self._(k), str(args[k]))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1233 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1234 |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1235 # load the current state for the property (if we |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1236 # haven't already) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1237 if k not in current: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1238 val = self[k] |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1239 if not isinstance(val, HTMLProperty): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1240 current[k] = None |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1241 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1242 current[k] = val.plain(escape=1) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1243 # make link if hrefable |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1244 if (isinstance(prop, hyperdb.Link)): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1245 classname = prop.classname |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1246 try: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1247 template = self._client.selectTemplate(classname, 'item') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1248 if template.startswith('_generic.'): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1249 raise NoTemplate('not really...') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1250 except NoTemplate: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1251 pass |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1252 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1253 linkid = self._klass.get(self._nodeid, k, None) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1254 current[k] = '<a rel="nofollow noopener" href="%s%s">%s</a>' % ( |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1255 classname, linkid, current[k]) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1256 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1257 if args[k] and (isinstance(prop, hyperdb.Multilink) or |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1258 isinstance(prop, hyperdb.Link)): |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1259 # figure what the link class is |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1260 classname = prop.classname |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1261 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1262 linkcl = self._db.getclass(classname) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1263 except KeyError: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1264 labelprop = None |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1265 comments[classname] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1266 "The linked class %(classname)s no longer exists" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1267 ) % locals() |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1268 labelprop = linkcl.labelprop(1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1269 try: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1270 template = self._client.selectTemplate(classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1271 'item') |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1272 if template.startswith('_generic.'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1273 raise NoTemplate('not really...') |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1274 hrefable = 1 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1275 except NoTemplate: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1276 hrefable = 0 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1277 |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1278 if isinstance(prop, hyperdb.Multilink) and args[k]: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1279 ml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1280 for linkid in args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1281 if isinstance(linkid, type(())): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1282 sublabel = linkid[0] + ' ' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1283 linkids = linkid[1] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1284 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1285 sublabel = '' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1286 linkids = [linkid] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1287 subml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1288 for linkid in linkids: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1289 # We're seeing things like |
|
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1290 # {'nosy':['38', '113', None, '82']} in the wild |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1291 if linkid is None: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1292 continue |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1293 label = classname + linkid |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1294 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1295 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1296 # there's no labelprop! |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1297 try: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1298 if labelprop is not None and \ |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1299 labelprop != 'id': |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1300 label = linkcl.get( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1301 linkid, labelprop, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1302 default=self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1303 "[label is missing]")) |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1304 label = html_escape(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1305 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1306 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1307 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1308 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1309 subml.append('<strike>%s</strike>' % label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1310 else: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1311 if hrefable: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1312 subml.append( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1313 '<a rel="nofollow noopener" ' |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1314 'href="%s%s">%s</a>' % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1315 classname, linkid, label)) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
1316 elif label is None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1317 subml.append('%s%s' % (classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1318 linkid)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1319 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1320 subml.append(label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1321 ml.append(sublabel + ', '.join(subml)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1322 cell.append('%s:\n %s' % (self._(k), ', '.join(ml))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1323 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1324 label = classname + args[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1325 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1326 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1327 # there's no labelprop! |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1328 if labelprop is not None and labelprop != 'id': |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1329 try: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1330 label = html_escape( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1331 linkcl.get(args[k], |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1332 labelprop, default=self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1333 "[label is missing]"))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1334 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1335 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1336 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1337 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1338 cell.append(' <strike>%s</strike>,\n' % label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1339 # "flag" this is done .... euwww |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1340 label = None |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1341 if label is not None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1342 if hrefable: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1343 old = '<a rel="nofollow noopener" href="%s%s">%s</a>' % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1344 classname, args[k], label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1345 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1346 old = label |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
1347 cell.append('%s: %s' % (self._(k), old)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1348 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1349 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1350 current[k] = old |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1351 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1352 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1353 if args[k] is None: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1354 d = '' |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1355 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1356 d = date.Date( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1357 args[k], |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1358 translator=self._client).local(timezone) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1359 cell.append('%s: %s' % (self._(k), str(d))) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1360 if k in current and current[k] is not None: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1361 cell[-1] += ' -> %s' % current[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1362 current[k] = str(d) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1363 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1364 elif isinstance(prop, hyperdb.Interval) and args[k]: |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1365 val = str(date.Interval(args[k], |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1366 translator=self._client)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1367 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1368 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1369 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1370 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1371 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1372 elif isinstance(prop, hyperdb.String) and args[k]: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1373 val = html_escape(args[k]) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1374 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1375 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1376 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1377 current[k] = val |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1378 |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1379 elif isinstance(prop, hyperdb.Boolean) and args[k] is not None: |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
1380 val = args[k] and ''"Yes" or ''"No" |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1381 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1382 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1383 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1384 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1385 |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1386 elif isinstance(prop, hyperdb.Password) and args[k] is not None: |
|
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1387 val = args[k].dummystr() |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1388 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1389 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1390 cell[-1] += ' -> %s' % current[k] |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1391 current[k] = val |
|
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1392 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1393 elif not args[k]: |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1394 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1395 cell.append('%s: %s' % (self._(k), current[k])) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1396 current[k] = '(no value)' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1397 else: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1398 cell.append(self._('%s: (no value)') % self._(k)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1399 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1400 else: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1401 cell.append('%s: %s' % (self._(k), str(args[k]))) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1402 if k in current and current[k] is not None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1403 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1404 current[k] = str(args[k]) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1405 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1406 arg_s = '<br />'.join(cell) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1407 else: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1408 if action in ('retired', 'restored'): |
|
5947
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1409 # args = None for these actions |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1410 pass |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1411 else: |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1412 # unknown event!! |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1413 comments['unknown'] = self._( |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1414 "<strong><em>This event %s is not handled" |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1415 " by the history display!</em></strong>" % action) |
|
5947
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1416 arg_s = '<strong><em>' + str(args) + '</em></strong>' |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1417 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1418 date_s = date_s.replace(' ', ' ') |
|
1258
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1419 # if the user's an itemid, figure the username (older journals |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1420 # have the username) |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1421 if dre.match(user): |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1422 user = self._db.user.get(user, 'username') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1423 l.append('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' % ( |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1424 date_s, html_escape(user), self._(action), arg_s)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1425 if comments: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1426 l.append(self._( |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1427 '<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1428 for entry in comments.values(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1429 l.append('<tr><td colspan=4>%s</td></tr>' % entry) |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1430 |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1431 if direction == 'ascending': |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1432 l.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1433 |
|
4696
57a64e591a00
Use bootstrap classes for displaying tables; bug.item is almost table free and uses bootstrap form classes and markup
Pradip Caulagi <caulagi@gmail.com>
parents:
4651
diff
changeset
|
1434 l[0:0] = ['<table class="history table table-condensed table-striped">' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1435 '<tr><th colspan="4" class="header">', |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1436 self._('History'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1437 '</th></tr><tr>', |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1438 self._('<th>Date</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1439 self._('<th>User</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1440 self._('<th>Action</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1441 self._('<th>Args</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1442 '</tr>'] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1443 l.append('</table>') |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1444 |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1445 self._client.form_wins = orig_form_wins |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1446 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1447 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1448 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1449 def renderQueryForm(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1450 """ Render this item, which is a query, as a search form. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1451 """ |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1452 # create a new request and override the specified args |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1453 req = HTMLRequest(self._client) |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1454 req.classname = self._klass.get(self._nodeid, 'klass') |
|
1284
899c6ced2abe
include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents:
1272
diff
changeset
|
1455 name = self._klass.get(self._nodeid, 'name') |
|
899c6ced2abe
include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents:
1272
diff
changeset
|
1456 req.updateFromURL(self._klass.get(self._nodeid, 'url') + |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1457 '&@queryname=%s' % urllib_.quote(name)) |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1458 |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1459 # new template, using the specified classname and request |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1460 # [ ] the custom logic for search page doesn't belong to |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1461 # generic templating module (techtonik) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1462 tplname = self._client.selectTemplate(req.classname, 'search') |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1463 pt = self._client.instance.templates.load(tplname) |
|
4057
885069b5f328
Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents:
4056
diff
changeset
|
1464 # The context for a search page should be the class, not any |
|
885069b5f328
Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents:
4056
diff
changeset
|
1465 # node. |
|
885069b5f328
Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents:
4056
diff
changeset
|
1466 self._client.nodeid = None |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
1467 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1468 # use our fabricated request |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1469 return pt.render(self._client, req.classname, req) |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1470 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1471 def download_url(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1472 """ Assume that this item is a FileClass and that it has a name |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1473 and content. Construct a URL for the download of the content. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1474 """ |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1475 name = self._klass.get(self._nodeid, 'name') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1476 url = '%s%s/%s' % (self._classname, self._nodeid, name) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
1477 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1478 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1479 def copy_url(self, exclude=("messages", "files")): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1480 """Construct a URL for creating a copy of this item |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1481 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1482 "exclude" is an optional list of properties that should |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1483 not be copied to the new object. By default, this list |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1484 includes "messages" and "files" properties. Note that |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1485 "id" property cannot be copied. |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1486 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1487 """ |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1488 exclude = ("id", "activity", "actor", "creation", "creator") \ |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1489 + tuple(exclude) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1490 query = { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1491 "@template": "item", |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1492 "@note": self._("Copy of %(class)s %(id)s") % { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1493 "class": self._(self._classname), "id": self._nodeid}, |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1494 } |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1495 for name in self._props.keys(): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1496 if name not in exclude: |
|
4839
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1497 prop = self._props[name] |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1498 if not isinstance(prop, hyperdb.Multilink): |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1499 query[name] = self[name].plain() |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1500 else: |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1501 query[name] = ",".join(self._klass.get(self._nodeid, name)) |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1502 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1503 return self._classname + "?" + "&".join( |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
1504 ["%s=%s" % (key, urllib_.quote(value)) |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1505 for key, value in query.items()]) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1506 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1507 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1508 class _HTMLUser(_HTMLItem): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1509 """Add ability to check for permissions on users. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1510 """ |
|
7757
ab679558bb28
fix: remove mutable object as default for method/function values
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
1511 _marker = ('_HTMLUserMarker') |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1512 |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1513 def hasPermission(self, permission, classname=_marker, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1514 property=None, itemid=None): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1515 """Determine if the user has the Permission. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1516 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1517 The class being tested defaults to the template's class, but may |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1518 be overidden for this test by suppling an alternate classname. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1519 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1520 if classname is self._marker: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1521 classname = self._client.classname |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1522 return self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1523 permission, self._nodeid, classname, property, itemid) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1524 |
|
4306
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1525 def hasRole(self, *rolenames): |
|
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1526 """Determine whether the user has any role in rolenames.""" |
|
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1527 return self._db.user.has_role(self._nodeid, *rolenames) |
|
3535
75dc225613cc
fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents:
3509
diff
changeset
|
1528 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1529 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1530 def HTMLItem(client, classname, nodeid, anonymous=0): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1531 if classname == 'user': |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1532 return _HTMLUser(client, classname, nodeid, anonymous) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1533 else: |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1534 return _HTMLItem(client, classname, nodeid, anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1535 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1536 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1537 class HTMLProperty(HTMLInputMixin, HTMLPermissions): |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
1538 """ String, Integer, Number, Date, Interval HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1539 |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1540 Has useful attributes: |
|
1080
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1541 |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1542 _name the name of the property |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1543 _value the value of the property if any |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1544 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1545 A wrapper object which may be stringified for the plain() behaviour. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1546 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1547 def __init__(self, client, classname, nodeid, prop, name, value, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1548 anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1549 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1550 self._db = client.db |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1551 self._ = client._ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1552 self._classname = classname |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1553 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1554 self._prop = prop |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1555 self._value = value |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1556 self._anonymous = anonymous |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1557 self._name = name |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1558 if not anonymous: |
|
4286
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1559 if nodeid: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1560 self._formname = '%s%s@%s' % (classname, nodeid, name) |
|
4286
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1561 else: |
|
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1562 # This case occurs when creating a property for a |
|
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1563 # non-anonymous class. |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1564 self._formname = '%s@%s' % (classname, name) |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1565 else: |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1566 self._formname = name |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1567 |
| 4056 | 1568 # If no value is already present for this property, see if one |
| 1569 # is specified in the current form. | |
| 1570 form = self._client.form | |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1571 try: |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
1572 is_in = self._formname in form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1573 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1574 is_in = False |
|
5166
232c74973a56
issue1408570: fix that form values are lost
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5156
diff
changeset
|
1575 if is_in and (not self._value or self._client.form_wins): |
| 4056 | 1576 if isinstance(prop, hyperdb.Multilink): |
| 1577 value = lookupIds(self._db, prop, | |
| 1578 handleListCGIValue(form[self._formname]), | |
| 1579 fail_ok=1) | |
| 1580 elif isinstance(prop, hyperdb.Link): | |
| 1581 value = form.getfirst(self._formname).strip() | |
| 1582 if value: | |
| 1583 value = lookupIds(self._db, prop, [value], | |
| 1584 fail_ok=1)[0] | |
| 1585 else: | |
| 1586 value = None | |
| 1587 else: | |
| 1588 value = form.getfirst(self._formname).strip() or None | |
| 1589 self._value = value | |
| 1590 | |
|
6404
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1591 # if self._value is None see if we have a default value |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1592 if self._value is None: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1593 self._value = prop.get_default_value() |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1594 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1595 HTMLInputMixin.__init__(self) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1596 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1597 def __repr__(self): |
|
4463
1bd86e82422b
Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents:
4437
diff
changeset
|
1598 classname = self.__class__.__name__ |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1599 return '<%s(0x%x) %s %r %r>' % (classname, id(self), self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1600 self._prop, self._value) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1601 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1602 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1603 return self.plain() |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1604 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1605 def __lt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1606 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1607 return self._value < other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1608 return self._value < other |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1609 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1610 def __le__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1611 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1612 return self._value <= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1613 return self._value <= other |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1614 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1615 def __eq__(self, other): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1616 if isinstance(other, HTMLProperty): |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1617 return self._value == other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1618 return self._value == other |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1619 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1620 def __ne__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1621 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1622 return self._value != other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1623 return self._value != other |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1624 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1625 def __gt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1626 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1627 return self._value > other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1628 return self._value > other |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1629 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1630 def __ge__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1631 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1632 return self._value >= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1633 return self._value >= other |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1634 |
|
5404
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1635 def __bool__(self): |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1636 return not not self._value |
|
5404
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1637 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1638 __nonzero__ = __bool__ |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1639 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1640 def isset(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1641 """Is my _value not None?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1642 return self._value is not None |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1643 |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1644 def is_edit_ok(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1645 """Should the user be allowed to use an edit form field for this |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1646 property. Check "Create" for new items, or "Edit" for existing |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1647 ones. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1648 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1649 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1650 userid = self._client.userid |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1651 if self._nodeid: |
|
4329
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1652 if not perm('Web Access', userid): |
|
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1653 return False |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1654 return perm('Edit', userid, self._classname, self._name, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1655 self._nodeid) |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1656 return perm('Create', userid, self._classname, self._name) or \ |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1657 perm('Register', userid, self._classname, self._name) |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1658 |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1659 def is_view_ok(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1660 """ Is the user allowed to View the current class? |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1661 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1662 perm = self._db.security.hasPermission |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1663 if perm('Web Access', self._client.userid) and perm( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1664 'View', self._client.userid, self._classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1665 self._name, self._nodeid): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1666 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1667 return self.is_edit_ok() |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1668 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1669 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1670 class StringHTMLProperty(HTMLProperty): |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1671 hyper_re = re.compile(r'''( |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1672 (?P<url> |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1673 ( |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1674 (ht|f)tp(s?):// # protocol |
|
4010
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1675 ([\w]+(:\w+)?@)? # username/password |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1676 ([\w\-]+) # hostname |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1677 ((\.[\w-]+)+)? # .domain.etc |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1678 | # ... or ... |
|
4010
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1679 ([\w]+(:\w+)?@)? # username/password |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1680 www\. # "www." |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1681 ([\w\-]+\.)+ # hostname |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1682 [\w]{2,5} # TLD |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1683 ) |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1684 (:[\d]{1,5})? # port |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1685 (/[\w\-$.+!*(),;:@&=?/~\\#%]*)? # path etc. |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1686 )| |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
1687 (?P<email>(?:mailto:)?[-+=%/\w\.]+@[\w\.\-]+)| |
|
6564
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1688 (?P<item>(?P<class>[A-Za-z_]+)(\s*)(?P<id>\d+)(?P<fragment>\#[^][\#%^{}"<>\s]+)?) |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1689 )''', re.X | re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1690 protocol_re = re.compile('^(ht|f)tp(s?)://', re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1691 |
|
6098
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1692 # disable rst directives that have security implications |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1693 rst_defaults = {'file_insertion_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1694 'raw_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1695 '_disable_config': 1} |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1696 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1697 valid_schemes = {} |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1698 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1699 def _hyper_repl(self, match): |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1700 if match.group('url'): |
|
5684
97e2125e064c
When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents:
5548
diff
changeset
|
1701 return self._hyper_repl_url(match, '<a href="%s" rel="nofollow noopener">%s</a>%s') |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1702 elif match.group('email'): |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1703 return self._hyper_repl_email(match, '<a href="mailto:%s">%s</a>') |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1704 elif len(match.group('id')) < 10: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1705 return self._hyper_repl_item( |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1706 match, '<a href="%(cls)s%(itemid)s%(fragment)s">%(item)s</a>') |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1707 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1708 # just return the matched text |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1709 return match.group(0) |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1710 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1711 def _hyper_repl_url(self, match, replacement): |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1712 u = s = match.group('url') |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1713 if not self.protocol_re.search(s): |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1714 u = 'http://' + s |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1715 end = '' |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1716 if '>' in s: |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1717 # catch an escaped ">" in the URL |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1718 pos = s.find('>') |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1719 end = s[pos:] |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1720 u = s = s[:pos] |
|
4647
11b6601629d7
#2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
4587
diff
changeset
|
1721 if s.endswith(tuple('.,;:!')): |
|
11b6601629d7
#2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
4587
diff
changeset
|
1722 # don't include trailing punctuation |
|
11b6601629d7
#2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
4587
diff
changeset
|
1723 end = s[-1:] + end |
|
11b6601629d7
#2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
4587
diff
changeset
|
1724 u = s = s[:-1] |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1725 if ')' in s and s.count('(') != s.count(')'): |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1726 # don't include extraneous ')' in the link |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1727 pos = s.rfind(')') |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1728 end = s[pos:] + end |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1729 u = s = s[:pos] |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1730 return replacement % (u, s, end) |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1731 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1732 def _hyper_repl_email(self, match, replacement): |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1733 s = match.group('email') |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1734 return replacement % (s, s) |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1735 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1736 def _hyper_repl_item(self, match, replacement): |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1737 item = match.group('item') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1738 cls = match.group('class').lower() |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1739 itemid = match.group('id') |
|
6564
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1740 fragment = match.group('fragment') |
|
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1741 if fragment is None: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
1742 fragment = "" |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1743 try: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1744 # make sure cls is a valid tracker classname |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1745 cl = self._db.getclass(cls) |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1746 if not cl.hasnode(itemid): |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1747 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1748 return replacement % locals() |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1749 except KeyError: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1750 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1751 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1752 def _hyper_repl_rst(self, match): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1753 if match.group('url'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1754 s = match.group('url') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1755 return '`%s <%s>`_' % (s, s) |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1756 elif match.group('email'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1757 s = match.group('email') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1758 return '`%s <mailto:%s>`_' % (s, s) |
|
4288
ce684080e968
issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents:
4286
diff
changeset
|
1759 elif len(match.group('id')) < 10: |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1760 return self._hyper_repl_item(match, '`%(item)s <%(cls)s%(itemid)s>`_') |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1761 else: |
|
4288
ce684080e968
issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents:
4286
diff
changeset
|
1762 # just return the matched text |
|
ce684080e968
issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents:
4286
diff
changeset
|
1763 return match.group(0) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1764 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1765 def _hyper_repl_markdown(self, match): |
|
6280
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1766 for group in ['url', 'email']: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1767 if match.group(group): |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1768 start = match.start(group) - 1 |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1769 end = match.end(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1770 if start >= 0: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1771 prefix = match.string[start] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1772 if end < len(match.string): |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1773 suffix = match.string[end] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1774 if (prefix, suffix) in { |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1775 ('<', '>'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1776 ('(', ')'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1777 }: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1778 continue |
|
6299
fd0bdcbc68e4
issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents:
6284
diff
changeset
|
1779 if prefix == '(' and ')' in match.group(group): |
|
6280
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1780 continue |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1781 s = match.group(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1782 return '<%s>' % s |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
1783 if match.group('id') and len(match.group('id')) < 10: |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1784 # Pass through markdown style links: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1785 # [issue1](https://....) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1786 # [issue1](issue1) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1787 # as 'issue1'. Don't convert issue1 into a link. |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1788 # https://issues.roundup-tracker.org/issue2551108 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1789 start = match.start('item') - 1 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1790 end = match.end('item') |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1791 if start >= 0: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1792 prefix = match.string[start] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1793 if end < len(match.string): |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1794 suffix = match.string[end] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1795 if (prefix, suffix) in {('[', ']')}: |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
1796 if match.string[end+1] == '(': # find following ( |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1797 return match.group(0) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1798 if (prefix, suffix) in {('(', ')')}: |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1799 if match.string[start-1] == ']': |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1800 return match.group(0) |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1801 return self._hyper_repl_item(match, '[%(item)s](%(cls)s%(itemid)s)') |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1802 else: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1803 # just return the matched text |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1804 return match.group(0) |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1805 |
|
5156
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1806 def url_quote(self): |
|
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1807 """ Return the string in plain format but escaped for use in a url """ |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
1808 return urllib_.quote(self.plain()) |
|
5156
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1809 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1810 def hyperlinked(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1811 """ Render a "hyperlinked" version of the text """ |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1812 return self.plain(hyperlink=1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1813 |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1814 def plain(self, escape=0, hyperlink=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1815 """Render a "plain" representation of the property |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1816 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1817 - "escape" turns on/off HTML quoting |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1818 - "hyperlink" turns on/off in-text hyperlinking of URLs, email |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1819 addresses and designators |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1820 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1821 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1822 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1823 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1824 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1825 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1826 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1827 s = html_escape(str(self._value)) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1828 else: |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1829 s = str(self._value) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1830 if hyperlink: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1831 # no, we *must* escape this text |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1832 if not escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1833 s = html_escape(s) |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1834 s = self.hyper_re.sub(self._hyper_repl, s) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1835 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1836 |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1837 def wrapped(self, escape=1, hyperlink=1, columns=80): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1838 """Render a "wrapped" representation of the property. |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1839 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1840 We wrap long lines at 80 columns on the nearest whitespace. Lines |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1841 with no whitespace are not broken to force wrapping. |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1842 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1843 Note that unlike plain() we default wrapped() to have the escaping |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1844 and hyperlinking turned on since that's the most common usage. |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1845 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1846 - "escape" turns on/off HTML quoting |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1847 - "hyperlink" turns on/off in-text hyperlinking of URLs, email |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1848 addresses and designators |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1849 - "columns" sets the column where the wrapping will occur. |
|
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1850 Default of 80. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1851 """ |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1852 if not self.is_view_ok(): |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1853 return self._('[hidden]') |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1854 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1855 if self._value is None: |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1856 return '' |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1857 s = '\n'.join(textwrap.wrap(str(self._value), columns, |
|
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1858 break_long_words=False)) |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1859 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1860 s = html_escape(s) |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1861 if hyperlink: |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1862 # no, we *must* escape this text |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1863 if not escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1864 s = html_escape(s) |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1865 s = self.hyper_re.sub(self._hyper_repl, s) |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1866 return s |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1867 |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1868 def rst(self, hyperlink=1): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1869 """ Render the value of the property as ReStructuredText. |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1870 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1871 This requires docutils to be installed separately. |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1872 """ |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1873 if not self.is_view_ok(): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1874 return self._('[hidden]') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1875 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1876 if not ReStructuredText: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1877 return self.plain(escape=0, hyperlink=hyperlink) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1878 s = self.plain(escape=0, hyperlink=0) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1879 if hyperlink: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1880 s = self.hyper_re.sub(self._hyper_repl_rst, s) |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1881 |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1882 # disable javascript and possibly other url schemes from working |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1883 from docutils.utils.urischemes import schemes |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
1884 for sch in _disable_url_schemes: |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1885 # I catch KeyError but reraise if scheme didn't exist. |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1886 # Safer to fail if a disabled scheme isn't found. It may |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1887 # be a typo that keeps a bad scheme enabled. But this |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1888 # function can be called multiple times. On the first call |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1889 # the key will be deleted. On the second call the schemes |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1890 # variable isn't re-initialized so the key is missing |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1891 # causing a KeyError. So see if we removed it (and entered |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1892 # it into valid_schemes). If we didn't raise KeyError. |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1893 try: |
| 7572 | 1894 del (schemes[sch]) |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1895 self.valid_schemes[sch] = True |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1896 except KeyError: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1897 if sch in self.valid_schemes: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1898 pass |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1899 else: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1900 raise |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1901 |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1902 return u2s(ReStructuredText( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1903 s, writer_name="html", |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1904 settings_overrides=self.rst_defaults)["html_body"]) |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1905 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1906 def markdown(self, hyperlink=1): |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1907 """ Render the value of the property as markdown. |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1908 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1909 This requires markdown2 or markdown to be installed separately. |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1910 """ |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1911 if not self.is_view_ok(): |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1912 return self._('[hidden]') |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1913 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1914 if not markdown: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1915 return self.plain(escape=0, hyperlink=hyperlink) |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1916 s = self.plain(escape=0, hyperlink=0) |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1917 if hyperlink: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1918 s = self.hyper_re.sub(self._hyper_repl_markdown, s) |
|
6275
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1919 try: |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
1920 s = u2s(markdown(s2u(s), self._db.config)) |
|
6275
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1921 except Exception: # when markdown formatting fails return markup |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1922 return self.plain(escape=0, hyperlink=hyperlink) |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1923 return s |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1924 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1925 def field(self, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1926 """ Render the property as a field in HTML. |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1927 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1928 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1929 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1930 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1931 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1932 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
1933 value = self._value |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
1934 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1935 value = '' |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1936 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1937 kwargs.setdefault("size", 30) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1938 kwargs.update({"name": self._formname, "value": value}) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1939 return self.input(**kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1940 |
|
3905
6733a7cce7f4
multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3903
diff
changeset
|
1941 def multiline(self, escape=0, rows=5, cols=40, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1942 """ Render a multiline form edit field for the property. |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1943 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1944 If not editable, just display the plain() value in a <pre> tag. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1945 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1946 if not self.is_edit_ok(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1947 return '<pre>%s</pre>' % self.plain() |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1948 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1949 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1950 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1951 else: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1952 value = html_escape(str(self._value)) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1953 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1954 value = '"'.join(value.split('"')) |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1955 name = self._formname |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
1956 passthrough_args = self.cgi_escape_attrs(**kwargs) |
|
3905
6733a7cce7f4
multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3903
diff
changeset
|
1957 return ('<textarea %(passthrough_args)s name="%(name)s" id="%(name)s"' |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1958 ' rows="%(rows)s" cols="%(cols)s">' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1959 '%(value)s</textarea>') % locals() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1960 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1961 def email(self, escape=1): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1962 """ Render the value of the property as an obscured email address |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1963 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1964 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1965 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1966 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1967 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1968 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1969 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1970 value = str(self._value) |
|
3573
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1971 split = value.split('@') |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1972 if len(split) == 2: |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1973 name, domain = split |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1974 domain = ' '.join(domain.split('.')[:-1]) |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1975 name = name.replace('.', ' ') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1976 value = '%s at %s ...' % (name, domain) |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1977 else: |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1978 value = value.replace('.', ' ') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1979 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1980 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1981 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1982 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1983 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1984 class PasswordHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1985 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1986 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1987 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1988 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
1989 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1990 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1991 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1992 return '' |
|
5182
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1993 try: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1994 value = self._value.dummystr() |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1995 except AttributeError: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1996 value = self._('[hidden]') |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1997 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
1998 value = html_escape(value) |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1999 return value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2000 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2001 def field(self, size=30, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2002 """ Render a form edit field for the property. |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2003 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2004 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2005 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2006 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2007 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2008 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2009 return self.input(type="password", name=self._formname, size=size, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2010 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2011 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
2012 def confirm(self, size=30): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2013 """ Render a second form edit field for the property, used for |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
2014 confirmation that the user typed the password correctly. Generates |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1857
diff
changeset
|
2015 a field with name "@confirm@name". |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2016 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2017 If not editable, display nothing. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2018 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2019 if not self.is_edit_ok(): |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2020 return '' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2021 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2022 return self.input(type="password", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2023 name="@confirm@%s" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2024 id="%s-confirm" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2025 size=size) |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
2026 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2027 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2028 class NumberHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2029 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2030 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2031 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2032 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2033 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2034 |
|
2884
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2035 if self._value is None: |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2036 return '' |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2037 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2038 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2039 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2040 def pretty(self, format="%0.3f"): |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2041 '''Pretty print number using printf format specifier. |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2042 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2043 If value is not convertable, returns str(_value) or "" |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2044 if None. |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2045 ''' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2046 try: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2047 return format % self._value |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2048 except TypeError: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2049 value = self._value |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2050 if value is None: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2051 return '' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2052 else: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2053 return str(value) |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2054 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2055 def field(self, size=30, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2056 """ Render a form edit field for the property. |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2057 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2058 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2059 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2060 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2061 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2062 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2063 value = self._value |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2064 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2065 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2066 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2067 return self.input(name=self._formname, value=value, size=size, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2068 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2069 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2070 def __int__(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2071 """ Return an int of me |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2072 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2073 return int(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2074 |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2075 def __float__(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2076 """ Return a float of me |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2077 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2078 return float(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2079 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2080 |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2081 class IntegerHTMLProperty(HTMLProperty): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2082 def plain(self, escape=0): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2083 """ Render a "plain" representation of the property |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2084 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2085 if not self.is_view_ok(): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2086 return self._('[hidden]') |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2087 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2088 if self._value is None: |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2089 return '' |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2090 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2091 return str(self._value) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2092 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2093 def field(self, size=30, **kwargs): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2094 """ Render a form edit field for the property. |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2095 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2096 If not editable, just display the value via plain(). |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2097 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2098 if not self.is_edit_ok(): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2099 return self.plain(escape=1) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2100 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2101 value = self._value |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2102 if value is None: |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2103 value = '' |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2104 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2105 return self.input(name=self._formname, value=value, size=size, |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2106 **kwargs) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2107 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2108 def __int__(self): |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2109 """ Return an int of me |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2110 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2111 return int(self._value) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2112 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2113 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2114 class BooleanHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2115 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2116 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2117 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2118 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2119 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2120 |
|
1289
257f0ab00d50
bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents:
1284
diff
changeset
|
2121 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2122 return '' |
|
3354
201dbcf63a30
use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3338
diff
changeset
|
2123 return self._value and self._("Yes") or self._("No") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2124 |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2125 def field(self, labelfirst=False, y_label=None, n_label=None, |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2126 u_label=None, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2127 """ Render a form edit field for the property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2128 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2129 If not editable, just display the value via plain(). |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2130 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2131 In addition to being able to set arbitrary html properties |
|
7866
9bbc1d951677
issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents:
7864
diff
changeset
|
2132 using prop=val arguments, the three arguments: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2133 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2134 y_label, n_label, u_label let you control the labels |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2135 associated with the yes, no (and optionally unknown/empty) |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2136 values. |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2137 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2138 Also the labels can be placed before the radiobuttons by setting |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2139 labelfirst=True. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2140 """ |
|
2113
30aeb17e5b04
Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents:
2106
diff
changeset
|
2141 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2142 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2143 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2144 value = self._value |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2145 if is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2146 value = value.strip().lower() in ('checked', 'yes', 'true', |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2147 'on', '1') |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2148 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2149 if (not y_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2150 y_label = '<label class="rblabel" for="%s_%s">' % ( |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2151 self._formname, 'yes') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2152 y_label += self._('Yes') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2153 y_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2154 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2155 if (not n_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2156 n_label = '<label class="rblabel" for="%s_%s">' % ( |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2157 self._formname, 'no') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2158 n_label += self._('No') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2159 n_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2160 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2161 checked = value and "checked" or "" |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2162 if value: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2163 y_rb = self.input(type="radio", name=self._formname, value="yes", |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2164 checked="checked", id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2165 self._formname, 'yes'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2166 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2167 n_rb = self.input(type="radio", name=self._formname, value="no", |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2168 id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2169 self._formname, 'no'), **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2170 else: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2171 y_rb = self.input(type="radio", name=self._formname, value="yes", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2172 id="%s_%s" % (self._formname, 'yes'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2173 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2174 n_rb = self.input(type="radio", name=self._formname, value="no", |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2175 checked="checked", id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2176 self._formname, 'no'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2177 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2178 if (u_label): |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2179 if (u_label is True): # it was set via u_label=True |
|
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2180 u_label = '' # make it empty but a string not boolean |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2181 u_rb = self.input(type="radio", name=self._formname, value="", |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2182 id="%s_%s" % (self._formname, 'unk'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2183 else: |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2184 # don't generate a trivalue radiobutton. |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2185 u_label = '' |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2186 u_rb = '' |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2187 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2188 if (labelfirst): |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2189 s = u_label + u_rb + y_label + y_rb + n_label + n_rb |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2190 else: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2191 s = u_label + u_rb + y_rb + y_label + n_rb + n_label |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2192 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2193 return s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2194 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2195 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2196 class DateHTMLProperty(HTMLProperty): |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2197 |
|
7757
ab679558bb28
fix: remove mutable object as default for method/function values
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
2198 _marker = ('HTMLPropertyMarker') |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2199 |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2200 def __init__(self, client, classname, nodeid, prop, name, value, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2201 anonymous=0, offset=None): |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2202 HTMLProperty.__init__(self, client, classname, nodeid, prop, name, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2203 value, anonymous=anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2204 if self._value and not is_us(self._value): |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
2205 self._value.setTranslator(self._client.translator) |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2206 self._offset = offset |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2207 if self._offset is None: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
2208 self._offset = self._prop.offset(self._db) |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2209 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2210 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2211 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2212 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2213 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2214 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2215 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2216 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2217 return '' |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2218 if self._offset is None: |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2219 offset = self._db.getUserTimezone() |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2220 else: |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2221 offset = self._offset |
|
4842
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2222 try: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2223 return str(self._value.local(offset)) |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2224 except AttributeError: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2225 # not a date value, e.g. from unsaved form data |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2226 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2227 |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
2228 def now(self, str_interval=None): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2229 """ Return the current time. |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2230 |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2231 This is useful for defaulting a new value. Returns a |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2232 DateHTMLProperty. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2233 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2234 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2235 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2236 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2237 ret = date.Date('.', translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2238 |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2239 if is_us(str_interval): |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2240 sign = 1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2241 if str_interval[0] == '-': |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2242 sign = -1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2243 str_interval = str_interval[1:] |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2244 interval = date.Interval(str_interval, translator=self._client) |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2245 if sign > 0: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2246 ret = ret + interval |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2247 else: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2248 ret = ret - interval |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2249 |
| 2037 | 2250 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2251 self._prop, self._formname, ret) |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2252 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2253 def field(self, size=30, default=None, format=_marker, popcal=True, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2254 **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2255 """Render a form edit field for the property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2256 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2257 If not editable, just display the value via plain(). |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2258 |
|
3649
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2259 If "popcal" then include the Javascript calendar editor. |
|
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2260 Default=yes. |
|
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2261 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2262 The format string is a standard python strftime format string. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2263 """ |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2264 if not self.is_edit_ok(): |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2265 if format is self._marker: |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2266 return self.plain(escape=1) |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2267 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2268 return self.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2269 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2270 value = self._value |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2271 |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2272 if value is None: |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2273 if default is None: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2274 raw_value = None |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2275 else: |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2276 if is_us(default): |
|
3832
bbc977e1cd2c
Fix handling of defaults for date fields
Richard Jones <richard@users.sourceforge.net>
parents:
3785
diff
changeset
|
2277 raw_value = date.Date(default, translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2278 elif isinstance(default, date.Date): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2279 raw_value = default |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2280 elif isinstance(default, DateHTMLProperty): |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2281 raw_value = default._value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2282 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2283 raise ValueError(self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2284 'default value for ' |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2285 'DateHTMLProperty must be either DateHTMLProperty ' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2286 'or string date representation.')) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2287 elif is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2288 # most likely erroneous input to be passed back to user |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2289 value = us2s(value) |
|
4927
c120f747e0b4
In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
2290 s = self.input(name=self._formname, value=value, size=size, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2291 **kwargs) |
|
4927
c120f747e0b4
In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
2292 if popcal: |
|
c120f747e0b4
In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
2293 s += self.popcal() |
|
c120f747e0b4
In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4880
diff
changeset
|
2294 return s |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2295 else: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2296 raw_value = value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2297 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2298 if raw_value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2299 value = '' |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2300 elif is_us(raw_value): |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2301 if format is self._marker: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2302 value = raw_value |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2303 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2304 value = date.Date(raw_value).pretty(format) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2305 else: |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2306 if self._offset is None: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2307 offset = self._db.getUserTimezone() |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2308 else: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2309 offset = self._offset |
|
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2310 value = raw_value.local(offset) |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2311 if format is not self._marker: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2312 value = value.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2313 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2314 s = self.input(name=self._formname, value=value, size=size, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2315 **kwargs) |
|
3649
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2316 if popcal: |
|
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2317 s += self.popcal() |
|
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2318 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2319 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2320 def reldate(self, pretty=1): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2321 """ Render the interval between the date and now. |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2322 |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2323 If the "pretty" flag is true, then make the display pretty. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2324 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2325 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2326 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2327 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2328 if not self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2329 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2330 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2331 # figure the interval |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
2332 interval = self._value - date.Date('.', translator=self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2333 if pretty: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2334 return interval.pretty() |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2335 return str(interval) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2336 |
|
1453
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
2337 def pretty(self, format=_marker): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2338 """ Render the date in a pretty format (eg. month names, spaces). |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2339 |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2340 The format string is a standard python strftime format string. |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2341 Note that if the day is zero, and appears at the start of the |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2342 string, then it'll be stripped from the output. This is handy |
|
3479
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2343 for the situation when a date only specifies a month and a year. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2344 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2345 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2346 return self._('[hidden]') |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2347 |
|
3479
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2348 if self._offset is None: |
|
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2349 offset = self._db.getUserTimezone() |
|
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2350 else: |
|
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2351 offset = self._offset |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2352 |
|
6377
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2353 try: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2354 if not self._value: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2355 return '' |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2356 elif format is not self._marker: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2357 return self._value.local(offset).pretty(format) |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2358 else: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2359 return self._value.local(offset).pretty() |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2360 except AttributeError: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2361 # not a date value, e.g. from unsaved form data |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2362 return str(self._value) |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2363 |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2364 def local(self, offset): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2365 """ Return the date/time as a local (timezone offset) date/time. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2366 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2367 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2368 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2369 |
|
2036
bc5ff0519b8b
fixed bug in args to new DateHTMLProperty in the local() method [SF#901444]
Richard Jones <richard@users.sourceforge.net>
parents:
2031
diff
changeset
|
2370 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2371 self._prop, self._formname, self._value, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2372 offset=offset) |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2373 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
2374 def popcal(self, width=300, height=200, label="(cal)", |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2375 form="itemSynopsis"): |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2376 """Generate a link to a calendar pop-up window. |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2377 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2378 item: HTMLProperty e.g.: context.deadline |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2379 """ |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2380 if self.isset(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2381 date = "&date=%s" % self._value |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2382 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2383 date = "" |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2384 |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2385 data_attr = { |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
2386 "data-calurl": '%s?@template=calendar&property=%s&form=%s%s' % ( |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
2387 self._classname, self._name, form, date), |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2388 "data-width": width, |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2389 "data-height": height |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2390 } |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2391 |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2392 return ('<a class="classhelp" %s href="javascript:help_window(' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2393 "'%s?@template=calendar&property=%s&form=%s%s', %d, %d)" |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2394 '">%s</a>' % (self.cgi_escape_attrs(**data_attr), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2395 self._classname, self._name, form, date, width, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2396 height, label)) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2397 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2398 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2399 class IntervalHTMLProperty(HTMLProperty): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2400 def __init__(self, client, classname, nodeid, prop, name, value, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2401 anonymous=0): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2402 HTMLProperty.__init__(self, client, classname, nodeid, prop, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2403 name, value, anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2404 if self._value and not is_us(self._value): |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
2405 self._value.setTranslator(self._client.translator) |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2406 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2407 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2408 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2409 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2410 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2411 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2412 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2413 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2414 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2415 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2416 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2417 def pretty(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2418 """ Render the interval in a pretty format (eg. "yesterday") |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2419 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2420 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2421 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2422 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2423 return self._value.pretty() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2424 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2425 def field(self, size=30, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2426 """ Render a form edit field for the property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2427 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2428 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2429 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2430 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2431 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2432 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2433 value = self._value |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2434 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2435 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2436 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2437 return self.input(name=self._formname, value=value, size=size, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2438 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2439 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2440 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2441 class LinkHTMLProperty(HTMLProperty): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2442 """ Link HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2443 Include the above as well as being able to access the class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2444 information. Stringifying the object itself results in the value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2445 from the item being displayed. Accessing attributes of this object |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2446 result in the appropriate entry from the class being queried for the |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2447 property accessed (so item/assignedto/name would look up the user |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2448 entry identified by the assignedto property on item, and then the |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2449 name property of that user) |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2450 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
2451 def __init__(self, *args, **kw): |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
2452 HTMLProperty.__init__(self, *args, **kw) |
|
1323
80eef084069a
Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents:
1322
diff
changeset
|
2453 # if we're representing a form value, then the -1 from the form really |
|
80eef084069a
Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents:
1322
diff
changeset
|
2454 # should be a None |
|
80eef084069a
Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents:
1322
diff
changeset
|
2455 if str(self._value) == '-1': |
|
80eef084069a
Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents:
1322
diff
changeset
|
2456 self._value = None |
|
80eef084069a
Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents:
1322
diff
changeset
|
2457 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2458 def __getattr__(self, attr): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2459 """ return a new HTMLItem """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2460 if not self._value: |
|
3394
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2461 # handle a special page templates lookup |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2462 if attr == '__render_with_namespace__': |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2463 def nothing(*args, **kw): |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2464 return '' |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2465 return nothing |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2466 msg = self._('Attempt to look up %(attr)s on a missing value') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2467 return MissingValue(msg % locals()) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
2468 i = HTMLItem(self._client, self._prop.classname, self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2469 return getattr(i, attr) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2470 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2471 def __getitem__(self, item): |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2472 """Explicitly define __getitem__ -- this used to work earlier |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2473 due to __getattr__ returning the __getitem__ of HTMLItem -- this |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2474 lookup doesn't work for new-style classes. |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2475 """ |
|
4879
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2476 if not self._value: |
|
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2477 msg = self._('Attempt to look up %(item)s on a missing value') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2478 return MissingValue(msg % locals()) |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2479 i = HTMLItem(self._client, self._prop.classname, self._value) |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2480 return i[item] |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2481 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2482 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2483 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2484 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2485 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2486 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2487 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2488 if self._value is None: |
|
1099
7362dc1f0226
Made "creator" property a String like it should be (we can't lookup()
Richard Jones <richard@users.sourceforge.net>
parents:
1097
diff
changeset
|
2489 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2490 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2491 k = linkcl.labelprop(1) |
|
3936
63d58cc1394a
make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents:
3909
diff
changeset
|
2492 if num_re.match(self._value): |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2493 try: |
|
6620
b7093aa16895
issue2551196 - Unset labelprop of a Multilink can lead to Python error when using context/history
John Rouillard <rouilj@ieee.org>
parents:
6593
diff
changeset
|
2494 value = str(linkcl.get(self._value, k, |
|
b7093aa16895
issue2551196 - Unset labelprop of a Multilink can lead to Python error when using context/history
John Rouillard <rouilj@ieee.org>
parents:
6593
diff
changeset
|
2495 default=self._("[label is missing]"))) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2496 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2497 value = self._value |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2498 else: |
|
3936
63d58cc1394a
make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents:
3909
diff
changeset
|
2499 value = self._value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2500 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
2501 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2502 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2503 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2504 def field(self, showid=0, size=None, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2505 """ Render a form edit field for the property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2506 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2507 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2508 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2509 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2510 return self.plain(escape=1) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2511 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2512 # edit field |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2513 linkcl = self._db.getclass(self._prop.classname) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2514 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2515 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2516 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2517 k = linkcl.getkey() |
|
4958
9b1302f9fb11
Fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4945
diff
changeset
|
2518 idparse = self._prop.try_id_parsing |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2519 if k and num_re.match(self._value): |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2520 try: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2521 value = linkcl.get(self._value, k) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2522 except IndexError: |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2523 if idparse: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2524 raise |
|
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2525 value = '' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2526 else: |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
2527 value = self._value |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2528 return self.input(name=self._formname, value=value, size=size, |
|
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2529 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2530 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2531 def menu(self, size=None, height=None, showid=0, additional=[], value=None, |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2532 sort_on=None, html_kwargs={}, translate=True, showdef=None, **conditions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2533 """ Render a form select list for this property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2534 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2535 "size" is used to limit the length of the list labels |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2536 "height" is used to set the <select> tag's "size" attribute |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2537 "showid" includes the item ids in the list labels |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2538 "value" specifies which item is pre-selected |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2539 "additional" lists properties which should be included in the |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2540 label |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2541 "sort_on" indicates the property to sort the list on as |
|
3361
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2542 (direction, property) where direction is '+' or '-'. A |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2543 single string with the direction prepended may be used. |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2544 For example: ('-', 'order'), '+name'. |
|
4537
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2545 "html_kwargs" specified additional html args for the |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2546 generated html <select> |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2547 "translate" indicates if we should do translation of labels |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2548 using gettext -- this is often desired (e.g. for status |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2549 labels) but sometimes not. |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2550 "showdef" marks the default value with the string passed |
|
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2551 as the showdef argument. It is appended to the selected |
|
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2552 value so the user can reset the menu to the original value. |
|
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2553 Note that the marker may be removed if the length of |
|
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2554 the option label and the marker exceed the size. |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2555 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2556 The remaining keyword arguments are used as conditions for |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2557 filtering the items in the list - they're passed as the |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2558 "filterspec" argument to a Class.filter() call. |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2559 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2560 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2561 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2562 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2563 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2564 |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2565 # Since None indicates the default, we need another way to |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2566 # indicate "no selection". We use -1 for this purpose, as |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2567 # that is the value we use when submitting a form without the |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2568 # value set. |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2569 if value is None: |
|
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2570 value = self._value |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2571 elif value == '-1': |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2572 value = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2573 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2574 linkcl = self._db.getclass(self._prop.classname) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2575 html = ['<select %s>' % self.cgi_escape_attrs(name=self._formname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2576 **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2577 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2578 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2579 if value is None: |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
2580 s = 'selected="selected" ' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2581 html.append(self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2582 '<option %svalue="-1">- no selection -</option>') % s) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2583 |
|
3361
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2584 if sort_on is not None: |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2585 if not isinstance(sort_on, tuple): |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2586 if sort_on[0] in '+-': |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2587 sort_on = (sort_on[0], sort_on[1:]) |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2588 else: |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2589 sort_on = ('+', sort_on) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2590 else: |
| 4032 | 2591 sort_on = ('+', linkcl.orderprop()) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2592 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2593 options = [opt |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2594 for opt in linkcl.filter( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2595 None, conditions, sort_on, (None, None)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2596 if self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2597 "View", self._client.userid, linkcl.classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2598 itemid=opt)] |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2599 |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2600 # make sure we list the current value if it's retired |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2601 if value and value not in options: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2602 options.insert(0, value) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2603 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2604 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2605 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2606 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2607 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2608 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2609 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2610 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2611 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2612 fn = lambda optionid, cl=cl, linkcl=linkcl, \ |
|
4847
843886af0ea1
Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4846
diff
changeset
|
2613 propname=propname, labelprop=labelprop: \ |
|
843886af0ea1
Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4846
diff
changeset
|
2614 cl.get(linkcl.get(optionid, propname), labelprop) |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2615 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2616 fn = lambda optionid, linkcl=linkcl, propname=propname: \ |
|
4847
843886af0ea1
Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4846
diff
changeset
|
2617 linkcl.get(optionid, propname) |
|
4846
3e36a3bc0335
issue2550822: Fix showing more than one additional property in class menu
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4842
diff
changeset
|
2618 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2619 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2620 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2621 # get the option value, and if it's None use an empty string |
|
6404
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2622 try: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2623 option = linkcl.get(optionid, k) or '' |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2624 except IndexError: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2625 # optionid does not exist. E.G. |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2626 # IndexError: no such queue z |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2627 # can be set using ?queue=z in URL for |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2628 # a new issue |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2629 continue |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2630 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2631 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2632 s = '' |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2633 # record the marker for the selected item if requested |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2634 selected_mark = '' |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2635 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2636 if value in [optionid, option]: |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
2637 s = 'selected="selected" ' |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2638 if (showdef): |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2639 selected_mark = showdef |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2640 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2641 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2642 if showid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2643 lab = '%s%s: %s' % (self._prop.classname, optionid, option) |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2644 elif not option: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2645 lab = '%s%s' % (self._prop.classname, optionid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2646 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2647 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2648 |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2649 lab = lab + selected_mark |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2650 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2651 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2652 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2653 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2654 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2655 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2656 m.append(str(fn(optionid))) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2657 lab = lab + ' (%s)' % ', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2658 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2659 # and generate |
|
4537
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2660 tr = str |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2661 if translate: |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2662 tr = self._ |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
2663 lab = html_escape(tr(lab)) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2664 html.append( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2665 '<option %svalue="%s">%s</option>' % (s, optionid, lab)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2666 html.append('</select>') |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2667 return '\n'.join(html) |
|
7025
66149a18f09e
flake8 E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7024
diff
changeset
|
2668 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2669 # def checklist(self, ...) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2670 |
|
3194
f887e55edc94
replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
Richard Jones <richard@users.sourceforge.net>
parents:
3188
diff
changeset
|
2671 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2672 class MultilinkHTMLProperty(HTMLProperty): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2673 """ Multilink HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2674 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2675 Also be iterable, returning a wrapper object like the Link case for |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2676 each entry in the multilink. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2677 """ |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2678 def __init__(self, *args, **kwargs): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2679 HTMLProperty.__init__(self, *args, **kwargs) |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2680 if self._value: |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2681 display_value = lookupIds(self._db, self._prop, self._value, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2682 fail_ok=1, do_lookup=False) |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2683 keyfun = make_key_function(self._db, self._prop.classname) |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2684 # sorting fails if the value contains |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2685 # items not yet stored in the database |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2686 # ignore these errors to preserve user input |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2687 try: |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2688 display_value.sort(key=keyfun) |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2689 except: |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2690 pass |
|
3271
572bbe7fa236
typo in recent fix
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3270
diff
changeset
|
2691 self._value = display_value |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2692 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2693 def __len__(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2694 """ length of the multilink """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2695 return len(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2696 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2697 def __getattr__(self, attr): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2698 """ no extended attribute accesses make sense here """ |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2699 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2700 |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2701 def viewableGenerator(self, values): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2702 """Used to iterate over only the View'able items in a class.""" |
|
3198
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2703 check = self._db.security.hasPermission |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2704 userid = self._client.userid |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2705 classname = self._prop.classname |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2706 if check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2707 for value in values: |
|
5221
24945480d24c
Iterate over multilink items if they labelprop is accessible to the
John Rouillard <rouilj@ieee.org>
parents:
5217
diff
changeset
|
2708 if check('View', userid, classname, |
|
24945480d24c
Iterate over multilink items if they labelprop is accessible to the
John Rouillard <rouilj@ieee.org>
parents:
5217
diff
changeset
|
2709 itemid=value, |
|
24945480d24c
Iterate over multilink items if they labelprop is accessible to the
John Rouillard <rouilj@ieee.org>
parents:
5217
diff
changeset
|
2710 property=self._db.getclass(classname).labelprop(default_to_id=1)): |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2711 yield HTMLItem(self._client, classname, value) |
|
3198
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2712 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2713 def __iter__(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2714 """ iterate and return a new HTMLItem |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2715 """ |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2716 return self.viewableGenerator(self._value) |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2717 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2718 def reverse(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2719 """ return the list in reverse order |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2720 """ |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2721 mylist = self._value[:] |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2722 mylist.reverse() |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2723 return self.viewableGenerator(mylist) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2724 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2725 def sorted(self, property, reverse=False, NoneFirst=False): |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2726 """ Return this multilink sorted by the given property |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2727 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2728 Set Nonefirst to True to sort None/unset property |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2729 before a property with a valid value. |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2730 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2731 """ |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2732 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2733 # use 2 if NoneFirst is False to sort None last |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2734 # 0 to sort to sort None first |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2735 # 1 is used to sort the integer values. |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2736 NoneCode = (2, 0)[NoneFirst] |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2737 |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2738 value = list(self.__iter__()) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2739 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2740 if not value: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2741 # return empty list, nothing to sort. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2742 return value |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2743 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2744 # determine orderprop for property if property is a link or multilink |
|
7479
d267b0454500
Fix bug reported by Gabor Nagy in MultilinkHTMLProperty::sorted
John Rouillard <rouilj@ieee.org>
parents:
7122
diff
changeset
|
2745 prop = self._db.getclass(self._prop.classname).getprops()[property] |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2746 if type(prop) in [hyperdb.Link, hyperdb.Multilink]: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2747 orderprop = value[0]._db.getclass(prop.classname).orderprop() |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2748 sort_by_link = True |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2749 else: |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2750 orderprop = property |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2751 sort_by_link = False |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2752 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2753 def keyfunc(v): |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2754 # Return tuples made of (group order (int), base python |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2755 # type) to sort function. |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2756 # Do not return v[property] as that returns an HTMLProperty |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2757 # type/subtype that throws an exception when sorting |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2758 # python type (int. str ...) against None. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2759 prop = v[property] |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2760 if not prop._value: |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2761 return (NoneCode, None) |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2762 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2763 if sort_by_link: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2764 val = prop[orderprop]._value |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2765 else: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2766 val = prop._value |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2767 |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2768 if val is None: # verify orderprop is set to a value |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2769 return (NoneCode, None) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2770 return (1, val) # val should be base python type |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2771 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2772 value.sort(key=keyfunc, reverse=reverse) |
|
2883
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2773 return value |
|
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2774 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2775 def __contains__(self, value): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2776 """ Support the "in" operator. We have to make sure the passed-in |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2777 value is a string first, not a HTMLProperty. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2778 """ |
|
1325
2e5a9fc7abd5
allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents:
1323
diff
changeset
|
2779 return str(value) in self._value |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2780 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2781 def isset(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2782 """Is my _value not []?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
2783 return self._value != [] |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2784 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2785 def plain(self, escape=0): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2786 """ Render a "plain" representation of the property |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2787 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2788 if not self.is_view_ok(): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2789 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2790 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2791 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2792 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2793 labels = [] |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2794 for v in self._value: |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2795 if num_re.match(v): |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2796 try: |
|
6620
b7093aa16895
issue2551196 - Unset labelprop of a Multilink can lead to Python error when using context/history
John Rouillard <rouilj@ieee.org>
parents:
6593
diff
changeset
|
2797 label = linkcl.get(v, k, |
|
b7093aa16895
issue2551196 - Unset labelprop of a Multilink can lead to Python error when using context/history
John Rouillard <rouilj@ieee.org>
parents:
6593
diff
changeset
|
2798 default=self._("[label is missing]")) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2799 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2800 label = None |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2801 # fall back to designator if label is None |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2802 if label is None: |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2803 label = '%s%s' % (self._prop.classname, k) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2804 else: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2805 label = v |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
2806 labels.append(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2807 value = ', '.join(labels) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2808 if escape: |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
2809 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2810 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2811 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2812 def field(self, size=30, showid=0, **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2813 """ Render a form edit field for the property |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2814 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2815 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2816 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2817 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2818 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2819 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2820 linkcl = self._db.getclass(self._prop.classname) |
|
4339
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2821 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2822 if 'value' not in kwargs: |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2823 value = self._value[:] |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2824 # map the id to the label property |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2825 if not linkcl.getkey(): |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2826 showid = 1 |
|
4339
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2827 if not showid: |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2828 k = linkcl.labelprop(1) |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2829 value = lookupKeys(linkcl, k, value) |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2830 value = ','.join(value) |
|
4356
05a65559d873
undo regression in 1.4.12: Multilink edit fields lose their values
Richard Jones <richard@users.sourceforge.net>
parents:
4339
diff
changeset
|
2831 kwargs["value"] = value |
|
4339
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2832 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2833 return self.input(name=self._formname, size=size, **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2834 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2835 def menu(self, size=None, height=None, showid=0, additional=[], |
|
4537
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2836 value=None, sort_on=None, html_kwargs={}, translate=True, |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2837 **conditions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2838 """ Render a form <select> list for this property. |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2839 |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2840 "size" is used to limit the length of the list labels |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2841 "height" is used to set the <select> tag's "size" attribute |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2842 "showid" includes the item ids in the list labels |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2843 "additional" lists properties which should be included in the |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2844 label |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2845 "value" specifies which item is pre-selected |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2846 "sort_on" indicates the property to sort the list on as |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2847 (direction, property) where direction is '+' or '-'. A |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2848 single string with the direction prepended may be used. |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2849 For example: ('-', 'order'), '+name'. |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2850 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2851 The remaining keyword arguments are used as conditions for |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2852 filtering the items in the list - they're passed as the |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2853 "filterspec" argument to a Class.filter() call. |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2854 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2855 If not editable, just display the value via plain(). |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2856 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2857 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2858 return self.plain(escape=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2859 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2860 if value is None: |
|
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2861 value = self._value |
|
5548
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2862 # When rendering from form contents, 'value' may contain |
|
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2863 # elements starting '-' from '- no selection -' having been |
|
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2864 # selected on a previous form submission. |
|
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2865 value = [v for v in value if not v.startswith('-')] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2866 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2867 linkcl = self._db.getclass(self._prop.classname) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2868 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2869 if sort_on is not None: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2870 if not isinstance(sort_on, tuple): |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2871 if sort_on[0] in '+-': |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2872 sort_on = (sort_on[0], sort_on[1:]) |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2873 else: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2874 sort_on = ('+', sort_on) |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2875 else: |
| 4032 | 2876 sort_on = ('+', linkcl.orderprop()) |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2877 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2878 options = [opt |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2879 for opt in linkcl.filter(None, conditions, sort_on) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2880 if self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2881 "View", self._client.userid, linkcl.classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2882 itemid=opt)] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2883 |
|
4042
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2884 # make sure we list the current values if they're retired |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2885 for val in value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2886 if val not in options: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2887 options.insert(0, val) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2888 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2889 if not height: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2890 height = len(options) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2891 if value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2892 # The "no selection" option. |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2893 height += 1 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2894 height = min(height, 7) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2895 html = ['<select multiple %s>' % self.cgi_escape_attrs( |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2896 name=self._formname, size=height, **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2897 k = linkcl.labelprop(1) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2898 |
|
5995
b4b5b7afacd9
issue2551007 - Selection fields are not translated
John Rouillard <rouilj@ieee.org>
parents:
5991
diff
changeset
|
2899 if value: # FIXME '- no selection -' mark for translation |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2900 html.append('<option value="%s">- no selection -</option>' |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2901 % ','.join(['-' + v for v in value])) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2902 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2903 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2904 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2905 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2906 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2907 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2908 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2909 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2910 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2911 fn = lambda optionid, cl=cl, linkcl=linkcl, \ |
|
4848
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2912 propname=propname, labelprop=labelprop: \ |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2913 cl.get(linkcl.get(optionid, propname), labelprop) |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2914 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2915 fn = lambda optionid, linkcl=linkcl, propname=propname: \ |
|
4848
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2916 linkcl.get(optionid, propname) |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2917 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2918 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2919 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2920 # get the option value, and if it's None use an empty string |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2921 option = linkcl.get(optionid, k) or '' |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2922 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2923 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2924 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2925 if optionid in value or option in value: |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
2926 s = 'selected="selected" ' |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2927 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2928 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2929 if showid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2930 lab = '%s%s: %s' % (self._prop.classname, optionid, option) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2931 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2932 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2933 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2934 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2935 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2936 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2937 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2938 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2939 m.append(str(fn(optionid))) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2940 lab = lab + ' (%s)' % ', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2941 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2942 # and generate |
|
4537
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2943 tr = str |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2944 if translate: |
|
61cd652da1cd
Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4524
diff
changeset
|
2945 tr = self._ |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
2946 lab = html_escape(tr(lab)) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2947 html.append('<option %svalue="%s">%s</option>' % (s, optionid, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2948 lab)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2949 html.append('</select>') |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2950 return '\n'.join(html) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2951 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2952 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2953 # set the propclasses for HTMLItem |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2954 propclasses = [ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2955 (hyperdb.String, StringHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2956 (hyperdb.Number, NumberHTMLProperty), |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2957 (hyperdb.Integer, IntegerHTMLProperty), |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2958 (hyperdb.Boolean, BooleanHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2959 (hyperdb.Date, DateHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2960 (hyperdb.Interval, IntervalHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2961 (hyperdb.Password, PasswordHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2962 (hyperdb.Link, LinkHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2963 (hyperdb.Multilink, MultilinkHTMLProperty), |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2964 ] |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2965 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2966 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2967 def register_propclass(prop, cls): |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2968 for index, propclass in enumerate(propclasses): |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2969 p, c = propclass |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2970 if prop == p: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2971 propclasses[index] = (prop, cls) |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2972 break |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2973 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2974 propclasses.append((prop, cls)) |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2975 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2976 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2977 def make_key_function(db, classname, sort_on=None): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2978 """Make a sort key function for a given class. |
|
4417
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2979 |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2980 The list being sorted may contain mixed ids and labels. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2981 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2982 linkcl = db.getclass(classname) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2983 if sort_on is None: |
| 4032 | 2984 sort_on = linkcl.orderprop() |
|
7121
cb39a6c95cd3
Fix Traceback on empty numeric order attribute
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7060
diff
changeset
|
2985 prop = linkcl.getprops()[sort_on] |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2986 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2987 def keyfunc(a): |
|
4417
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2988 if num_re.match(a): |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2989 a = linkcl.get(a, sort_on) |
|
7122
94a5a9e6f0d2
Fix traceback on integer order attribute, fix comment
John Rouillard <rouilj@ieee.org>
parents:
7121
diff
changeset
|
2990 # In Python3 we may not compare numbers/strings and None |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2991 if a is None: |
|
7122
94a5a9e6f0d2
Fix traceback on integer order attribute, fix comment
John Rouillard <rouilj@ieee.org>
parents:
7121
diff
changeset
|
2992 if isinstance(prop, (hyperdb.Number, hyperdb.Integer)): |
|
7121
cb39a6c95cd3
Fix Traceback on empty numeric order attribute
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7060
diff
changeset
|
2993 return 0 |
|
6689
994893cf3e1a
Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6658
diff
changeset
|
2994 return '' |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2995 return a |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2996 return keyfunc |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2997 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2998 |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
2999 def handleListCGIValue(value): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3000 """ Value is either a single item or a list of items. Each item has a |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3001 .value that we're actually interested in. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3002 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3003 if isinstance(value, type([])): |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
3004 return [value.value for value in value] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3005 else: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3006 value = value.value.strip() |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3007 if not value: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3008 return [] |
|
3972
eee76dd4a09f
'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents:
3971
diff
changeset
|
3009 return [v.strip() for v in value.split(',')] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3010 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3011 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3012 class HTMLRequest(HTMLInputMixin): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3013 """The *request*, holding the CGI form and environment. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3014 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3015 - "form" the CGI form as a cgi.FieldStorage |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3016 - "env" the CGI environment variables |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3017 - "base" the base URL for this instance |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
3018 - "user" a HTMLItem instance for this user |
|
3968
5857cd1a0db9
add language to the "request" template var
Richard Jones <richard@users.sourceforge.net>
parents:
3936
diff
changeset
|
3019 - "language" as determined by the browser or config |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3020 - "classname" the current classname (possibly None) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3021 - "template" the current template (suffix, also possibly None) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3022 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3023 Index args: |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3024 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3025 - "columns" dictionary of the columns to display in an index page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3026 - "show" a convenience access to columns - request/show/colname will |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3027 be true if the columns should be displayed, false otherwise |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3028 - "sort" index sort column (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3029 - "group" index grouping property (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3030 - "filter" properties to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3031 - "filterspec" values to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3032 - "search_text" text to perform a full-text search on for an index |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3033 """ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
3034 def __repr__(self): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3035 return '<HTMLRequest %r>' % self.__dict__ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
3036 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3037 def __init__(self, client): |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3038 # _client is needed by HTMLInputMixin |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3039 self._client = self.client = client |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3040 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3041 # easier access vars |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3042 self.form = client.form |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3043 self.env = client.env |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3044 self.base = client.base |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
3045 self.user = HTMLItem(client, 'user', client.userid) |
|
3968
5857cd1a0db9
add language to the "request" template var
Richard Jones <richard@users.sourceforge.net>
parents:
3936
diff
changeset
|
3046 self.language = client.language |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3047 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3048 # store the current class name and action |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3049 self.classname = client.classname |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3050 self.nodeid = client.nodeid |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
3051 self.template = client.template |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3052 |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3053 # the special char to use for special vars |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3054 self.special_char = '@' |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3055 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3056 HTMLInputMixin.__init__(self) |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
3057 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3058 self._post_init() |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3059 |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3060 def current_url(self): |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3061 url = self.base |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3062 if self.classname: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3063 url += self.classname |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3064 if self.nodeid: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3065 url += self.nodeid |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3066 args = {} |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3067 if self.template: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3068 args['@template'] = self.template |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3069 return self.indexargs_url(url, args) |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3070 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3071 def _parse_sort(self, var, name): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3072 """ Parse sort/group options. Append to var |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3073 """ |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3074 fields = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3075 dirs = [] |
|
3698
c2d232b377d5
optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3696
diff
changeset
|
3076 for special in '@:': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3077 idx = 0 |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3078 key = '%s%s%d' % (special, name, idx) |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3079 while self._form_has_key(key): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3080 self.special_char = special |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3081 fields.append(self.form.getfirst(key)) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3082 dirkey = '%s%sdir%d' % (special, name, idx) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3083 if dirkey in self.form: |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3084 dirs.append(self.form.getfirst(dirkey)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3085 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3086 dirs.append(None) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3087 idx += 1 |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3088 key = '%s%s%d' % (special, name, idx) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3089 # backward compatible (and query) URL format |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3090 key = special + name |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3091 dirkey = key + 'dir' |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3092 if self._form_has_key(key) and not fields: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3093 fields = handleListCGIValue(self.form[key]) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3094 if dirkey in self.form: |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3095 dirs.append(self.form.getfirst(dirkey)) |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3096 if fields: # only try other special char if nothing found |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3097 break |
| 5095 | 3098 |
| 3099 # sometimes requests come in without a class | |
| 3100 # chances are they won't have any filter params, | |
| 3101 # in that case anyway but... | |
| 3102 if self.classname: | |
| 3103 cls = self.client.db.getclass(self.classname) | |
|
5399
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
3104 for f, d in zip_longest(fields, dirs): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3105 if f.startswith('-'): |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3106 direction, propname = '-', f[1:] |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3107 elif d: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3108 direction, propname = '-', f |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3109 else: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3110 direction, propname = '+', f |
| 5095 | 3111 # if no classname, just append the propname unchecked. |
| 3112 # this may be valid for some actions that bypass classes. | |
| 3113 if self.classname and cls.get_transitive_prop(propname) is None: | |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3114 self.client.add_error_message("Unknown %s property %s" % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3115 name, propname)) |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3116 else: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3117 var.append((direction, propname)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3118 |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3119 def _form_has_key(self, name): |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3120 try: |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3121 return name in self.form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3122 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3123 pass |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3124 return False |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3125 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3126 def _post_init(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3127 """ Set attributes based on self.form |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3128 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3129 # extract the index display information from the form |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3130 self.columns = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3131 for name in ':columns @columns'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3132 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3133 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3134 self.columns = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3135 break |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3136 self.show = support.TruthDict(self.columns) |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3137 security = self._client.db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3138 userid = self._client.userid |
| 1002 | 3139 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3140 # sorting and grouping |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3141 self.sort = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3142 self.group = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3143 self._parse_sort(self.sort, 'sort') |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3144 self._parse_sort(self.group, 'group') |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3145 self.sort = security.filterSortspec(userid, self.classname, self.sort) |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3146 self.group = security.filterSortspec(userid, self.classname, self.group) |
| 1002 | 3147 |
| 3148 # filtering | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3149 self.filter = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3150 for name in ':filter @filter'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3151 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3152 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3153 self.filter = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3154 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3155 self.filterspec = {} |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
3156 db = self.client.db |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3157 if self.classname is not None: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3158 cls = db.getclass(self.classname) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3159 for name in self.filter: |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3160 if not self._form_has_key(name): |
|
1631
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3161 continue |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3162 prop = cls.get_transitive_prop(name) |
|
1631
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3163 fv = self.form[name] |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3164 if (isinstance(prop, hyperdb.Link) or |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3165 isinstance(prop, hyperdb.Multilink)): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3166 self.filterspec[name] = lookupIds(db, prop, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3167 handleListCGIValue(fv)) |
|
1631
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3168 else: |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3169 if isinstance(fv, type([])): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3170 self.filterspec[name] = [v.value for v in fv] |
|
3461
fb82ab9461b0
fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents:
3401
diff
changeset
|
3171 elif name == 'id': |
|
fb82ab9461b0
fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents:
3401
diff
changeset
|
3172 # special case "id" property |
|
fb82ab9461b0
fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents:
3401
diff
changeset
|
3173 self.filterspec[name] = handleListCGIValue(fv) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3174 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3175 self.filterspec[name] = fv.value |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3176 self.filterspec = security.filterFilterspec(userid, self.classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3177 self.filterspec) |
| 1002 | 3178 |
| 3179 # full-text search argument | |
| 3180 self.search_text = None | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3181 for name in ':search_text @search_text'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3182 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3183 self.special_char = name[0] |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3184 self.search_text = self.form.getfirst(name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3185 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3186 # pagination - size and start index |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3187 # figure batch args |
|
3158
cf824afdb76b
*cough* nothing to see here
Richard Jones <richard@users.sourceforge.net>
parents:
3157
diff
changeset
|
3188 self.pagesize = 50 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3189 for name in ':pagesize @pagesize'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3190 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3191 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3192 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3193 self.pagesize = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3194 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3195 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3196 pass |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3197 |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3198 self.startwith = 0 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3199 for name in ':startwith @startwith'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3200 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3201 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3202 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3203 self.startwith = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3204 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3205 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3206 pass |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3207 |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3208 # dispname |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3209 if self._form_has_key('@dispname'): |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3210 self.dispname = self.form.getfirst('@dispname') |
|
3689
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3211 else: |
|
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3212 self.dispname = None |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3213 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3214 def updateFromURL(self, url): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3215 """ Parse the URL for query args, and update my attributes using the |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3216 values. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3217 """ |
|
1693
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3218 env = {'QUERY_STRING': url} |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3219 self.form = cgi.FieldStorage(environ=env) |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3220 |
|
1097
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3221 self._post_init() |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
3222 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3223 def update(self, kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3224 """ Update my attributes using the keyword args |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3225 """ |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3226 self.__dict__.update(kwargs) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3227 if 'columns' in kwargs: |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3228 self.show = support.TruthDict(self.columns) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3229 |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3230 def description(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3231 """ Return a description of the request - handle for the page title. |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3232 """ |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1080
diff
changeset
|
3233 s = [self.client.db.config.TRACKER_NAME] |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3234 if self.classname: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3235 if self.client.nodeid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3236 s.append('- %s%s' % (self.classname, self.client.nodeid)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3237 else: |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3238 if self.template == 'item': |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3239 s.append('- new %s' % self.classname) |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3240 elif self.template == 'index': |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3241 s.append('- %s index' % self.classname) |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3242 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3243 s.append('- %s %s' % (self.classname, self.template)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3244 else: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3245 s.append('- home') |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3246 return ' '.join(s) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3247 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3248 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3249 d = {} |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3250 d.update(self.__dict__) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3251 f = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3252 for k in self.form.keys(): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3253 f += '\n %r=%r' % (k, handleListCGIValue(self.form[k])) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3254 d['form'] = f |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3255 e = '' |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3256 for k, v in self.env.items(): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3257 e += '\n %r=%r' % (k, v) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3258 d['env'] = e |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3259 return """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3260 form: %(form)s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3261 base: %(base)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3262 classname: %(classname)r |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
3263 template: %(template)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3264 columns: %(columns)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3265 sort: %(sort)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3266 group: %(group)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3267 filter: %(filter)r |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3268 search_text: %(search_text)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3269 pagesize: %(pagesize)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3270 startwith: %(startwith)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3271 env: %(env)s |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3272 """ % d |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3273 |
| 1002 | 3274 def indexargs_form(self, columns=1, sort=1, group=1, filter=1, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3275 filterspec=1, search_text=1, exclude=[]): |
|
5082
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3276 """ return the current index args as form elements |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3277 |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3278 This routine generates an html form with hidden elements. |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3279 If you want to have visible form elements in your tal/jinja |
|
7903
7d621b3ba8ba
doc: fix spelling in docstring.
John Rouillard <rouilj@ieee.org>
parents:
7866
diff
changeset
|
3280 generated templates use the exclude array to list the names for |
|
5082
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3281 these elements. This wll prevent the function from creating |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3282 these elements in its output. |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3283 """ |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3284 html = [] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3285 sc = self.special_char |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
3286 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3287 def add(k, v): |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3288 html.append(self.input(type="hidden", name=k, value=v)) |
| 1002 | 3289 if columns and self.columns: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3290 add(sc+'columns', ','.join(self.columns)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3291 if sort: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3292 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3293 for direction, attr in self.sort: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3294 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3295 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3296 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3297 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3298 add(sc+'sort', ','.join(val)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3299 if group: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3300 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3301 for direction, attr in self.group: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3302 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3303 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3304 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3305 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3306 add(sc+'group', ','.join(val)) |
| 1002 | 3307 if filter and self.filter: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3308 add(sc+'filter', ','.join(self.filter)) |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3309 if self.classname and filterspec: |
|
4051
047402c4ec9b
Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents:
4043
diff
changeset
|
3310 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3311 for k, v in self.filterspec.items(): |
|
5082
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3312 if k in exclude: |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3313 continue |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3314 if isinstance(v, list): |
|
5184
a40ea636a2ad
Issue2550934 - templating.py-indexargs_form() returns id's as space separated list not comma separated
John Rouillard <rouilj@ieee.org>
parents:
5183
diff
changeset
|
3315 # id's are stored as strings but should be treated |
|
a40ea636a2ad
Issue2550934 - templating.py-indexargs_form() returns id's as space separated list not comma separated
John Rouillard <rouilj@ieee.org>
parents:
5183
diff
changeset
|
3316 # as integers in lists. |
|
a40ea636a2ad
Issue2550934 - templating.py-indexargs_form() returns id's as space separated list not comma separated
John Rouillard <rouilj@ieee.org>
parents:
5183
diff
changeset
|
3317 if (isinstance(cls.get_transitive_prop(k), hyperdb.String) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3318 and k != 'id'): |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3319 add(k, ' '.join(v)) |
|
3049
393f6ab17c07
handle spaces in String index params in batching [SF#1054224]
Richard Jones <richard@users.sourceforge.net>
parents:
3040
diff
changeset
|
3320 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3321 add(k, ','.join(v)) |
|
1353
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
3322 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3323 add(k, v) |
|
3159
b2fc512f145d
allow suppression of search_text in indexargs_form [SF#1101548]
Richard Jones <richard@users.sourceforge.net>
parents:
3158
diff
changeset
|
3324 if search_text and self.search_text: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3325 add(sc+'search_text', self.search_text) |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3326 add(sc+'pagesize', self.pagesize) |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3327 add(sc+'startwith', self.startwith) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3328 return '\n'.join(html) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3329 |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3330 def indexargs_url(self, url, args): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3331 """ Embed the current index args in a URL |
| 5192 | 3332 |
| 3333 If the value of an arg (in args dict) is None, | |
| 3334 the argument is excluded from the url. If you want | |
| 3335 an empty value use an empty string '' as the value. | |
| 3336 Use this in templates to conditionally | |
| 3337 include an arg if it is set to a value. E.G. | |
| 3338 {..., '@queryname': request.dispname or None, ...} | |
| 3339 will include @queryname in the url if there is a | |
| 3340 dispname otherwise the parameter will be omitted | |
| 3341 from the url. | |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3342 """ |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
3343 q = urllib_.quote |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3344 sc = self.special_char |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3345 l = ['%s=%s' % (k, is_us(v) and q(v) or v) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3346 for k, v in args.items() if v is not None] |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3347 # pull out the special values (prefixed by @ or :) |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3348 specials = {} |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3349 for key in args.keys(): |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3350 if key[0] in '@:': |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3351 specials[key[1:]] = args[key] |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3352 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3353 # ok, now handle the specials we received in the request |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3354 if self.columns and 'columns' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3355 l.append(sc+'columns=%s' % (','.join(self.columns))) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3356 if self.sort and 'sort' not in specials: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3357 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3358 for direction, attr in self.sort: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3359 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3360 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3361 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3362 val.append(attr) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3363 l.append(sc+'sort=%s' % (','.join(val))) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3364 if self.group and 'group' not in specials: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3365 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3366 for direction, attr in self.group: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3367 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3368 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3369 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3370 val.append(attr) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3371 l.append(sc+'group=%s' % (','.join(val))) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3372 if self.filter and 'filter' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3373 l.append(sc+'filter=%s' % (','.join(self.filter))) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3374 if self.search_text and 'search_text' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3375 l.append(sc+'search_text=%s' % q(self.search_text)) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3376 if 'pagesize' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3377 l.append(sc+'pagesize=%s' % self.pagesize) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3378 if 'startwith' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3379 l.append(sc+'startwith=%s' % self.startwith) |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3380 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3381 # finally, the remainder of the filter args in the request |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3382 if self.classname and self.filterspec: |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3383 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3384 for k, v in self.filterspec.items(): |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3385 if k not in args: |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3386 if isinstance(v, list): |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3387 prop = cls.get_transitive_prop(k) |
|
3909
e89bcb28f683
indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3905
diff
changeset
|
3388 if k != 'id' and isinstance(prop, hyperdb.String): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3389 l.append('%s=%s' % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3390 k, '%20'.join([q(i) for i in v]))) |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3391 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3392 l.append('%s=%s' % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3393 k, ','.join([q(i) for i in v]))) |
|
3049
393f6ab17c07
handle spaces in String index params in batching [SF#1054224]
Richard Jones <richard@users.sourceforge.net>
parents:
3040
diff
changeset
|
3394 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3395 l.append('%s=%s' % (k, q(v))) |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3396 return '%s?%s' % (url, '&'.join(l)) |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3397 indexargs_href = indexargs_url |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3398 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3399 def base_javascript(self): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3400 return """ |
|
5217
17b213eab274
Add nonce to embedded script references.
John Rouillard <rouilj@ieee.org>
parents:
5211
diff
changeset
|
3401 <script nonce="%s" type="text/javascript"> |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3402 submitted = false; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3403 function submit_once() { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3404 if (submitted) { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3405 alert("Your request is being processed.\\nPlease be patient."); |
|
5172
fac171f0f27b
Fix submit_once Javascript function
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5166
diff
changeset
|
3406 return false; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3407 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3408 submitted = true; |
|
5172
fac171f0f27b
Fix submit_once Javascript function
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5166
diff
changeset
|
3409 return true; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3410 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3411 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3412 function help_window(helpurl, width, height) { |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
3413 HelpWin = window.open('%s' + helpurl, 'RoundupHelpWindow', 'scrollbars=yes,resizable=yes,toolbar=no,height='+height+',width='+width); |
|
5006
bb97f61e1b73
Help-Window now gets focus
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4959
diff
changeset
|
3414 HelpWin.focus () |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3415 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3416 </script> |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3417 """ % (self._client.client_nonce, self.base) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3418 |
|
4524
68bbefb72825
Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4483
diff
changeset
|
3419 def batch(self, permission='View'): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3420 """ Return a batch object for results from the "current search" |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3421 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3422 check = self._client.db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3423 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3424 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3425 return Batch(self.client, [], self.pagesize, self.startwith, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3426 classname=self.classname) |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3427 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3428 filterspec = self.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3429 sort = self.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3430 group = self.group |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3431 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3432 # get the list of ids we're batching over |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3433 klass = self.client.db.getclass(self.classname) |
| 1002 | 3434 if self.search_text: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3435 indexer = self.client.db.indexer |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3436 if indexer.query_language: |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3437 try: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3438 matches = indexer.search( |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3439 [self.search_text], klass) |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3440 except Exception as e: |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3441 self.client.add_error_message(" ".join(e.args)) |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3442 raise |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3443 else: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3444 matches = indexer.search( |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3445 [u2s(w.upper()) for w in re.findall( |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3446 r'(?u)\b\w{%s,%s}\b' % (indexer.minlength, |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3447 indexer.maxlength), |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3448 s2u(self.search_text, "replace") |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3449 )], klass) |
| 1002 | 3450 else: |
| 3451 matches = None | |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3452 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3453 # filter for visibility |
|
7777
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3454 allowed = [itemid for itemid in klass.filter(matches, filterspec, |
|
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3455 sort, group) |
|
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3456 if check(permission, userid, self.classname, itemid=itemid)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3457 |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3458 # return the batch object, using IDs only |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3459 return Batch(self.client, allowed, self.pagesize, self.startwith, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3460 classname=self.classname) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3461 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3462 |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3463 # extend the standard ZTUtils Batch object to remove dependency on |
|
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3464 # Acquisition and add a couple of useful methods |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3465 class Batch(ZTUtils.Batch): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3466 """ Use me to turn a list of items, or item ids of a given class, into a |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3467 series of batches. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3468 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3469 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3470 Parameter Usage |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3471 ========= ======================================================== |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3472 sequence a list of HTMLItems or item ids |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3473 classname if sequence is a list of ids, this is the class of item |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3474 size how big to make the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3475 start where to start (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3476 end where to end (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3477 orphan if the next batch would contain less items than this |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3478 value, then it is combined with this batch |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3479 overlap the number of items shared between adjacent batches |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3480 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3481 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3482 Attributes: Note that the "start" attribute, unlike the |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3483 argument, is a 1-based index (I know, lame). "first" is the |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3484 0-based index. "length" is the actual number of elements in |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3485 the batch. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3486 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3487 "sequence_length" is the length of the original, unbatched, sequence. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3488 """ |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3489 def __init__(self, client, sequence, size, start, end=0, orphan=0, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3490 overlap=0, classname=None): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3491 self.client = client |
| 1002 | 3492 self.last_index = self.last_item = None |
| 3493 self.current_item = None | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3494 self.classname = classname |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3495 self.sequence_length = len(sequence) |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3496 ZTUtils.Batch.__init__(self, sequence, size, start, end, orphan, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3497 overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3498 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3499 # overwrite so we can late-instantiate the HTMLItem instance |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3500 def __getitem__(self, index): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3501 if index < 0: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3502 if index + self.end < self.first: |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3503 raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3504 return self._sequence[index + self.end] |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
3505 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3506 if index >= self.length: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3507 raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3508 |
| 1002 | 3509 # move the last_item along - but only if the fetched index changes |
| 3510 # (for some reason, index 0 is fetched twice) | |
| 3511 if index != self.last_index: | |
| 3512 self.last_item = self.current_item | |
| 3513 self.last_index = index | |
| 3514 | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3515 item = self._sequence[index + self.first] |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3516 if self.classname: |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3517 # map the item ids to instances |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
3518 item = HTMLItem(self.client, self.classname, item) |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3519 self.current_item = item |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3520 return item |
| 1002 | 3521 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3522 def propchanged(self, *properties): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3523 """ Detect if one of the properties marked as being a group |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3524 property changed in the last iteration fetch |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3525 """ |
|
3369
18f1631c9b85
sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents:
3363
diff
changeset
|
3526 # we poke directly at the _value here since MissingValue can screw |
|
18f1631c9b85
sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents:
3363
diff
changeset
|
3527 # us up and cause Nones to compare strangely |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3528 if self.last_item is None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3529 return 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3530 for property in properties: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3531 if property == 'id' or property.endswith('.id')\ |
|
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3532 or isinstance(self.last_item[property], list): |
|
3700
9cc2566cc7d9
This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3699
diff
changeset
|
3533 if (str(self.last_item[property]) != |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3534 str(self.current_item[property])): |
|
3699
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3535 return 1 |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3536 else: |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3537 if (self.last_item[property]._value != |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3538 self.current_item[property]._value): |
|
3699
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3539 return 1 |
| 1002 | 3540 return 0 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3541 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3542 # override these 'cos we don't have access to acquisition |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3543 def previous(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3544 if self.start == 1: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3545 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3546 return Batch(self.client, self._sequence, self.size, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3547 self.first - self._size + self.overlap, 0, self.orphan, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3548 self.overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3549 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3550 def next(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3551 try: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3552 self._sequence[self.end] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3553 except IndexError: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3554 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3555 return Batch(self.client, self._sequence, self.size, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3556 self.end - self.overlap, 0, self.orphan, self.overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3557 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3558 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3559 class TemplatingUtils: |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3560 """ Utilities for templating |
|
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3561 """ |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3562 def __init__(self, client): |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3563 self.client = client |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3564 self._ = self.client._ |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3565 |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3566 def Batch(self, sequence, size, start, end=0, orphan=0, overlap=0): |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3567 return Batch(self.client, sequence, size, start, end, orphan, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3568 overlap) |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3569 |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
3570 def anti_csrf_nonce(self, lifetime=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
3571 return anti_csrf_nonce(self.client, lifetime=lifetime) |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
3572 |
|
5973
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3573 def timestamp(self): |
|
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3574 return pack_timestamp() |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
3575 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3576 def url_quote(self, url): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3577 """URL-quote the supplied text.""" |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
3578 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3579 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3580 def html_quote(self, html): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3581 """HTML-quote the supplied text.""" |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5684
diff
changeset
|
3582 return html_escape(html) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3583 |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3584 def __getattr__(self, name): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3585 """Try the tracker's templating_utils.""" |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3586 if not hasattr(self.client.instance, 'templating_utils'): |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3587 # backwards-compatibility |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3588 raise AttributeError(name) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
3589 if name not in self.client.instance.templating_utils: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3590 raise AttributeError(name) |
|
3006
50b0f8e98247
fix API for templating utils extensions - remove "utils" arg
Richard Jones <richard@users.sourceforge.net>
parents:
2994
diff
changeset
|
3591 return self.client.instance.templating_utils[name] |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3592 |
|
4466
f1fe6fd0aa61
Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4463
diff
changeset
|
3593 def keywords_expressions(self, request): |
|
f1fe6fd0aa61
Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4463
diff
changeset
|
3594 return render_keywords_expression_editor(request) |
|
f1fe6fd0aa61
Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4463
diff
changeset
|
3595 |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3596 def html_calendar(self, request): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3597 """Generate a HTML calendar. |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3598 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3599 `request` the roundup.request object |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3600 - @template : name of the template |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3601 - form : name of the form to store back the date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3602 - property : name of the property of the form to store |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3603 back the date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3604 - date : current date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3605 - display : when browsing, specifies year and month |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3606 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3607 html will simply be a table. |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3608 """ |
| 4333 | 3609 tz = request.client.db.getUserTimezone() |
|
4331
7327b102920f
Display 'today' in the account user's timezone, thanks David Wolever
Richard Jones <richard@users.sourceforge.net>
parents:
4329
diff
changeset
|
3610 current_date = date.Date(".").local(tz) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3611 date_str = request.form.getfirst("date", current_date) |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3612 display = request.form.getfirst("display", date_str) |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3613 template = request.form.getfirst("@template", "calendar") |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3614 form = request.form.getfirst("form") |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3615 aproperty = request.form.getfirst("property") |
|
5191
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3616 curr_date = "" |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3617 try: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3618 # date_str and display can be set to an invalid value |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3619 # if user submits a value like "d4" and gets an edit error. |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3620 # If either or both invalid just ignore that we can't parse it |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3621 # and assign them to today. |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3622 curr_date = date.Date(date_str) # to highlight |
|
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3623 display = date.Date(display) # to show |
|
5191
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3624 except ValueError: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3625 # we couldn't parse the date |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3626 # just let the calendar display |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3627 curr_date = current_date |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3628 display = current_date |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3629 day = display.day |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3630 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3631 # for navigation |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3632 try: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3633 date_prev_month = display + date.Interval("-1m") |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3634 except ValueError: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3635 date_prev_month = None |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3636 try: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3637 date_next_month = display + date.Interval("+1m") |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3638 except ValueError: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3639 date_next_month = None |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3640 try: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3641 date_prev_year = display + date.Interval("-1y") |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3642 except ValueError: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3643 date_prev_year = None |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3644 try: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3645 date_next_year = display + date.Interval("+1y") |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3646 except ValueError: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3647 date_next_year = None |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3648 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3649 res = [] |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3650 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3651 base_link = "%s?@template=%s&property=%s&form=%s&date=%s" % \ |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3652 (request.classname, template, aproperty, form, curr_date) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3653 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3654 # navigation |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3655 # month |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3656 res.append('<table class="calendar"><tr><td>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3657 res.append(' <table width="100%" class="calendar_nav"><tr>') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3658 link = "&display=%s" % date_prev_month |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3659 if date_prev_month: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3660 res.append(' <td><a href="%s&display=%s"><</a></td>' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3661 % (base_link, date_prev_month)) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3662 else: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3663 res.append(' <td></td>') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3664 res.append(' <td>%s</td>' % calendar.month_name[display.month]) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3665 if date_next_month: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3666 res.append(' <td><a href="%s&display=%s">></a></td>' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3667 % (base_link, date_next_month)) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3668 else: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3669 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3670 # spacer |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3671 res.append(' <td width="100%"></td>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3672 # year |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3673 if date_prev_year: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3674 res.append(' <td><a href="%s&display=%s"><</a></td>' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3675 % (base_link, date_prev_year)) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3676 else: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3677 res.append(' <td></td>') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3678 res.append(' <td>%s</td>' % display.year) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3679 if date_next_year: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3680 res.append(' <td><a href="%s&display=%s">></a></td>' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3681 % (base_link, date_next_year)) |
|
4651
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3682 else: |
|
beb8d43f4d9d
issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents:
4647
diff
changeset
|
3683 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3684 res.append(' </tr></table>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3685 res.append(' </td></tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3686 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3687 # the calendar |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3688 res.append(' <tr><td><table class="calendar_display">') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3689 res.append(' <tr class="weekdays">') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3690 for day in calendar.weekheader(3).split(): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3691 res.append(' <td>%s</td>' % day) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3692 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3693 for week in calendar.monthcalendar(display.year, display.month): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3694 res.append(' <tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3695 for day in week: |
|
5180
f95650727b1c
got the indent wrong in the last change for templating.py
John Rouillard <rouilj@ieee.org>
parents:
5179
diff
changeset
|
3696 link = "javascript:form[field].value = '%d-%02d-%02d'; " \ |
|
f95650727b1c
got the indent wrong in the last change for templating.py
John Rouillard <rouilj@ieee.org>
parents:
5179
diff
changeset
|
3697 "if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); form[field].dispatchEvent(evt); } else { form[field].fireEvent('onchange'); }" \ |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3698 "window.close ();" % (display.year, display.month, day) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3699 if (day == curr_date.day and display.month == curr_date.month |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3700 and display.year == curr_date.year): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3701 # highlight |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3702 style = "today" |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3703 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3704 style = "" |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3705 if day: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3706 res.append(' <td class="%s"><a href="%s">%s</a></td>' % ( |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3707 style, link, day)) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3708 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3709 res.append(' <td></td>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3710 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3711 res.append('</table></td></tr></table>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3712 return "\n".join(res) |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3713 |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3714 def readfile(self, name, optional=False): |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3715 """Used to inline a file from the template directory. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3716 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3717 Used to inline file content into a template. If file |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3718 is not found in the template directory and |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3719 optional=False, it reports an error to the user via a |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3720 NoTemplate exception. If optional=True it returns an |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3721 empty string when it can't find the file. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3722 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3723 Useful for inlining JavaScript kept in an external |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3724 file where you can use linters/minifiers and other |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3725 tools on it. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3726 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3727 A TAL example: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3728 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3729 <script tal:attributes="nonce request/client/client_nonce" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3730 tal:content="python:utils.readfile('mylibrary.js')"></script> |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3731 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3732 This method does not expands any tokens in the file. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3733 See expandfile() for replacing tokens in the file. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3734 """ |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3735 file_result = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3736 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3737 if file_result is None: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3738 if optional: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3739 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3740 template_name = self.client.selectTemplate( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3741 self.client.classname, self.client.template) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3742 raise NoTemplate(self._( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3743 "Unable to read or expand file '%(name)s' " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3744 "in template '%(template)s'.") % { |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3745 "name": name, 'template': template_name}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3746 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3747 fullpath, name = file_result |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3748 with open(fullpath) as f: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3749 contents = f.read() |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3750 return contents |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3751 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3752 def expandfile(self, name, values=None, optional=False): |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3753 """Read a file and replace token placeholders. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3754 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3755 Given a file name and a dict of tokens and |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3756 replacements, read the file from the tracker template |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3757 directory. Then replace all tokens of the form |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3758 '%(token_name)s' with the values in the dict. If the |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3759 values dict is set to None, it acts like |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3760 readfile(). In addition to values passed into the |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3761 method, the value for the tracker base directory taken |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3762 from TRACKER_WEB is available as the 'base' token. The |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3763 client_nonce used for Content Security Policy (CSP) is |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3764 available as 'client_nonce'. If a token is not in the |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3765 dict, an empty string is returned and an error log |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3766 message is logged. See readfile for an usage example. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3767 """ |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3768 # readfile() raises NoTemplate if optional = false and |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3769 # the file is not found. Returns empty string if file not |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3770 # found and optional = true. File contents otherwise. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3771 contents = self.readfile(name, optional=optional) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3772 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3773 if values is None or not contents: # nothing to expand |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3774 return contents |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3775 tokens = {'base': self.client.db.config.TRACKER_WEB, |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3776 'client_nonce': self.client.client_nonce} |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3777 tokens.update(values) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3778 try: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3779 return contents % tokens |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3780 except KeyError as e: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3781 template_name = self.client.selectTemplate( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3782 self.client.classname, self.client.template) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3783 fullpath, name = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3784 logger.error( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3785 "When running expandfile('%(fullpath)s') in " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3786 "'%(template)s' there was no value for token: '%(token)s'.", |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3787 {'fullpath': fullpath, 'token': e.args[0], |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3788 'template': template_name}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3789 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3790 except ValueError as e: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3791 fullpath, name = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3792 logger.error(self._( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3793 "Found an incorrect token when expandfile applied " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3794 "string subsitution on '%(fullpath)s'. " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3795 "ValueError('%(issue)s') was raised. Check the format " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3796 "of your named conversion specifiers."), |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3797 {'fullpath': fullpath, 'issue': e.args[0]}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3798 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3799 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3800 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
3801 class MissingValue(object): |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3802 def __init__(self, description, **kwargs): |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3803 self.__description = description |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3804 for key, value in kwargs.items(): |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3805 self.__dict__[key] = value |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3806 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3807 def __call__(self, *args, **kwargs): return MissingValue(self.__description) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3808 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3809 def __getattr__(self, name): |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3810 # This allows assignments which assume all intermediate steps are Null |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3811 # objects if they don't exist yet. |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3812 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3813 # For example (with just 'client' defined): |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3814 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3815 # client.db.config.TRACKER_WEB = 'BASE/' |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3816 self.__dict__[name] = MissingValue(self.__description) |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3817 return getattr(self, name) |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3818 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3819 def __getitem__(self, key): return self |
|
5457
a35d4cc8cd1a
fix MissingValue / MockNull to return False on __bool__ and add a
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5448
diff
changeset
|
3820 def __bool__(self): return False |
|
5404
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
3821 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
3822 __nonzero__ = __bool__ |
|
5457
a35d4cc8cd1a
fix MissingValue / MockNull to return False on __bool__ and add a
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5448
diff
changeset
|
3823 def __contains__(self, key): return False |
|
5461
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3824 def __eq__(self, rhs): return False |
|
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3825 def __ne__(self, rhs): return False |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3826 def __str__(self): return '[%s]' % self.__description |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3827 def __repr__(self): return '<MissingValue 0x%x "%s">' % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3828 id(self), self.__description) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3829 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3830 def gettext(self, str): return str |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3831 _ = gettext |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3832 |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
3833 # vim: set et sts=4 sw=4 : |
