Mercurial > p > roundup > code
annotate roundup/cgi/templating.py @ 7923:29a666d8a70d
issue2551285 - Remove StructuredText support
Asked on the users mailing list if anybody was using it. Got no responses.
I have never seen CI installing structuredtext packages so it's
untested as well.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 30 Apr 2024 22:27:57 -0400 |
| parents | 7d621b3ba8ba |
| children | a9b136565838 |
| 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 |
|
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
|
567 # 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
|
568 # 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
|
569 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
|
570 l.append(entry) |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
571 return l |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
572 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
573 |
|
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
|
574 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
|
575 """ 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
|
576 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
|
577 """ |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
578 l = [] |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
579 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
|
580 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
|
581 try: |
|
5193
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
582 label = linkcl.get(entry, key) |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
583 except IndexError: |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
584 # 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
|
585 label = entry |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
586 # 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
|
587 if label is None: |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
588 label = '%s%s' % (linkcl.classname, entry) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
589 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
|
590 else: |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
591 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
|
592 return l |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
593 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
594 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
595 def _set_input_default_args(dic): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
596 # 'text' is the default value anyway -- |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
597 # 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
|
598 dic.setdefault('type', 'text') |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
599 # 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
|
600 if 'id' not in dic: |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
601 try: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
602 if dic['text'] in ('radio', 'checkbox'): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
603 dic['id'] = '%(name)s-%(value)s' % dic |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
604 else: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
605 dic['id'] = dic['name'] |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
606 except KeyError: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
607 pass |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
608 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
609 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
610 def html4_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
611 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
612 are represented without a value. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
613 <input required ..> not <input required="required" ...> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
614 The latter is xhtml. Recognize booleans by: |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
615 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
616 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
|
617 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
618 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
|
619 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
|
620 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
|
621 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
622 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
623 def xhtml_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
624 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
625 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
|
626 the attribute name.. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
627 <input required="required" ...> not <input required ..> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
628 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
|
629 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
630 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
|
631 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
632 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
|
633 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
|
634 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
|
635 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
636 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
637 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
|
638 """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
|
639 _set_input_default_args(attrs) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
640 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
|
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_xhtml(**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' (xhtml) element with given attributes""" |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
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/>' % 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
|
647 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
648 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
649 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
|
650 """ 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
|
651 def __init__(self): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
652 html_version = 'html4' |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
653 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
|
654 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
|
655 if html_version == 'xhtml': |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
656 self.input = input_xhtml |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
657 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
|
658 else: |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
659 self.input = input_html4 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
660 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
|
661 # 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
|
662 # 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
|
663 self._context = None |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
664 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
665 def gettext(self, msgid): |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
666 """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
|
667 if self._context is None: |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
668 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
|
669 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
|
670 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
|
671 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
672 _ = gettext |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
673 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
674 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
675 class HTMLPermissions(object): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
676 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
677 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
|
678 """ 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
|
679 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
|
680 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
681 if not self.is_view_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
682 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
|
683 translator=self._client.translator) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
684 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
685 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
|
686 """ 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
|
687 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
|
688 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
689 if not self.is_edit_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
690 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
|
691 translator=self._client.translator) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
692 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
693 def retire_check(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
694 """ 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
|
695 retire items of this class. |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
696 """ |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
697 if not self.is_retire_ok(): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
698 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
|
699 translator=self._client.translator) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
700 |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
701 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
702 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
|
703 """ 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
|
704 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
705 def __init__(self, client, classname, anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
706 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
|
707 self._ = client._ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
708 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
|
709 self._anonymous = anonymous |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
710 |
|
1136
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
711 # 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
|
712 # consistent API for extending Class/Item |
|
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
713 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
|
714 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
|
715 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
716 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
717 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
|
718 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
719 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
|
720 """ 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
|
721 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
722 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
|
723 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
|
724 '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
|
725 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
726 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
727 """ 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
|
728 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
729 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
|
730 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
|
731 'Retire', self._client.userid, self._classname) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
732 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
733 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
734 """ 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
|
735 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
736 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
|
737 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
|
738 'Restore', self._client.userid, self._classname) |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
739 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
740 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
|
741 """ 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
|
742 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
743 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
|
744 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
|
745 '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
|
746 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
747 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
|
748 """ 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
|
749 """ |
|
2651
17bab083c8a0
Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
750 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
|
751 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
752 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
753 return '<HTMLClass(0x%x) %s>' % (id(self), self.classname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
754 |
| 1002 | 755 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
|
756 """ 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
|
757 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
758 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
759 # we don't exist |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
760 if item == 'id': |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
761 return None |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
762 |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
763 # get the property |
|
2056
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
764 try: |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
765 prop = self._props[item] |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
766 except KeyError: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
767 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
|
768 self.classname)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
769 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
770 # look up the correct HTMLProperty class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
771 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
|
772 if not isinstance(prop, klass): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
773 continue |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3770
diff
changeset
|
774 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
|
775 None, self._anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
776 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
777 # no good |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
778 raise KeyError(item) |
| 1002 | 779 |
| 780 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
|
781 """ convenience access """ |
| 1002 | 782 try: |
| 783 return self[attr] | |
| 784 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
785 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
786 |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
787 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
|
788 """ 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
|
789 return self._classname |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
790 |
|
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
|
791 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
|
792 """ 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
|
793 """ |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
794 # 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
|
795 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
|
796 itemid = self._klass.lookup(itemid) |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
797 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
798 return HTMLItem(self._client, self.classname, itemid) |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
799 |
|
5222
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
800 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
|
801 """ 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
|
802 |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
803 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
|
804 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
|
805 search. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
806 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
807 l = [] |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
808 canSearch = self._db.security.hasSearchPermission |
|
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
809 userid = self._client.userid |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
810 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
|
811 if cansearch and \ |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
812 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
|
813 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
814 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
815 if isinstance(prop, klass): |
|
4481
9bbf3758c16a
Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents:
4466
diff
changeset
|
816 value = prop.get_default_value() |
|
1450
7a9db3f9022a
... and a classname
Richard Jones <richard@users.sourceforge.net>
parents:
1449
diff
changeset
|
817 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
|
818 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
|
819 if sort: |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
820 l.sort(key=lambda a: a._name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
821 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
822 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
823 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
|
824 """ 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
|
825 """ |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
826 # 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
|
827 class_list = self._klass.list() |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
828 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
|
829 class_list.sort(key=keyfunc) |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
830 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
831 # check perms |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
832 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
|
833 userid = self._client.userid |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
834 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
835 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
836 |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
837 class_list = [HTMLItem(self._client, self._classname, itemid) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
838 for itemid in class_list if |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
839 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
|
840 |
|
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
841 return class_list |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
842 |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
843 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
|
844 """ 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
|
845 """ |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
846 props = self.propnames() |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5416
diff
changeset
|
847 s = StringIO() |
|
3179
88dbe6b3d891
merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents:
3169
diff
changeset
|
848 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
|
849 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
|
850 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
|
851 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
852 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
853 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
854 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
|
855 l = [] |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
856 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
|
857 # 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
|
858 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
|
859 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
|
860 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
|
861 translator=self._client.translator) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
862 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
|
863 if value is None: |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
864 l.append('') |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
865 elif isinstance(value, type([])): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
866 l.append(':'.join(map(str, value))) |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
867 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
868 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
|
869 writer.writerow(l) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
870 return s.getvalue() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
871 |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
872 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
|
873 """ 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
|
874 """ |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
875 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
|
876 return ['id'] + idlessprops |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
877 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
878 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
|
879 """ 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
|
880 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
|
881 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
882 "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
|
883 """ |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
884 security = self._db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
885 userid = self._client.userid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
886 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
|
887 # 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
|
888 # security-filtered |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
889 filterspec = request.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
890 sort = request.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
891 group = request.group |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
892 else: |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
893 cn = self.classname |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
894 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
|
895 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
|
896 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
|
897 |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
898 check = security.hasPermission |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
899 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
900 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
901 |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
902 filtered = [HTMLItem(self._client, self.classname, itemid) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
903 for itemid in self._klass.filter(None, filterspec, |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
904 sort, group) |
|
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
905 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
|
906 return filtered |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
907 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
908 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
|
909 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
|
910 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
|
911 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
|
912 """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
|
913 |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
914 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
|
915 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
|
916 "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
|
917 (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
|
918 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
|
919 activity). |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
920 |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
921 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
|
922 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
|
923 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
|
924 properties). |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
925 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
926 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
|
927 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
|
928 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
|
929 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
930 The popup window will be resizable and scrollable. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
931 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
932 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
|
933 javascript help_window function. |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
934 |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
935 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
|
936 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
|
937 |
|
2827
43e3a7ac1190
fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2761
diff
changeset
|
938 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
|
939 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
|
940 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
|
941 """ |
|
1113
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
942 if properties is None: |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
943 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
|
944 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
|
945 if sort is None: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
946 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
|
947 sort = 'username' |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
948 else: |
| 4032 | 949 sort = self._klass.orderprop() |
|
3610
1dbaa664be28
sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents:
3594
diff
changeset
|
950 sort = '&@sort=' + sort |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
951 if group: |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
952 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
|
953 if property: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
954 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
|
955 if form: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
956 form = '&form=%s' % form |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
957 if inputtype: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
958 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
|
959 if filter: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
960 filterprops = filter.split(';') |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
961 filtervalues = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
962 names = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
963 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
|
964 (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
|
965 names.append(name) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
966 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
|
967 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
|
968 else: |
|
7036
7847c9bdb631
flake8 fixes: lambda assign squash, over/under indent, var names
John Rouillard <rouilj@ieee.org>
parents:
7035
diff
changeset
|
969 filter = '' |
|
3169
d8d1ebd80930
fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents:
3164
diff
changeset
|
970 help_url = "%s?@startwith=0&@template=help&"\ |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
971 "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
|
972 (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
|
973 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
|
974 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
|
975 (help_url, width, height) |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
976 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
|
977 'data-width="%s" data-height="%s" href="%s" ' |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
978 'onclick="%s" %s>%s</a>') % ( |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
979 help_url, width, height, |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
980 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
|
981 self._(label)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
982 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
983 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
|
984 """ 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
|
985 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
986 "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
|
987 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
988 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
989 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
|
990 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
991 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
|
992 return '' |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
993 |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
994 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
995 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
|
996 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
|
997 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
998 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
|
999 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
|
1000 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1001 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
|
1002 |
|
6428
32a04dc87b30
Make HTMLClass::history signature compatible to _HTMLItem::history
John Rouillard <rouilj@ieee.org>
parents:
6422
diff
changeset
|
1003 def history(self, **args): |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1004 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
|
1005 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
|
1006 return self._('New node - no history') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1007 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1008 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
|
1009 """ 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
|
1010 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1011 # 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
|
1012 req = HTMLRequest(self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1013 req.classname = self.classname |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1014 req.update(kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1015 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1016 # 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
|
1017 # [ ] 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
|
1018 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
|
1019 pt = self._client.instance.templates.load(tplname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1020 |
|
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
|
1021 # use our fabricated request |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1022 args = { |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
1023 'ok_message': self._client._ok_message, |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
1024 '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
|
1025 } |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1026 return pt.render(self._client, self.classname, req, **args) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1027 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1028 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1029 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
|
1030 """ 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
|
1031 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1032 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
|
1033 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1034 self._db = client.db |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1035 self._classname = classname |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1036 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1037 self._klass = self._db.getclass(classname) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1038 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1039 |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1040 # 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
|
1041 self._anonymous = anonymous |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1042 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1043 HTMLInputMixin.__init__(self) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1044 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1045 def is_edit_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1046 """ 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
|
1047 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1048 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
|
1049 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
|
1050 '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
|
1051 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1052 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1053 """ 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
|
1054 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1055 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
|
1056 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
|
1057 '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
|
1058 itemid=self._nodeid) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1059 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1060 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1061 """ Is the user allowed to restore this item? |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1062 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1063 perm = self._db.security.hasPermission |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1064 return perm('Web Access', self._client.userid) and perm( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1065 'Restore', self._client.userid, self._classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1066 itemid=self._nodeid) |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1067 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1068 def is_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1069 """ 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
|
1070 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1071 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
|
1072 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
|
1073 '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
|
1074 itemid=self._nodeid): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1075 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1076 return self.is_edit_ok() |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1077 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1078 def is_only_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1079 """ 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
|
1080 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1081 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
|
1082 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1083 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1084 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
|
1085 self._nodeid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1086 |
| 1002 | 1087 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
|
1088 """ return an HTMLProperty instance |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1089 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
|
1090 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
|
1091 """ |
| 1002 | 1092 if item == 'id': |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1093 return self._nodeid |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1094 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1095 items = item.split('.', 1) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1096 has_rest = len(items) > 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1097 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1098 # get the property |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1099 prop = self._props[items[0]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1100 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1101 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
|
1102 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1103 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1104 # 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
|
1105 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
|
1106 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
|
1107 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
|
1108 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
|
1109 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
|
1110 value = self._nodeid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1111 if value is None: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1112 if isinstance(prop, hyperdb.Multilink): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1113 value = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1114 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1115 # look up the correct HTMLProperty class |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1116 htmlprop = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1117 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1118 if isinstance(prop, klass): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1119 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
|
1120 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
|
1121 value, self._anonymous) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1122 if htmlprop is not None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1123 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
|
1124 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
|
1125 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
|
1126 return htmlprop[items[1]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1127 return htmlprop |
| 1002 | 1128 |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1129 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1130 |
| 1002 | 1131 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
|
1132 """ convenience access to properties """ |
| 1002 | 1133 try: |
| 1134 return self[attr] | |
| 1135 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1136 raise AttributeError(attr) |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1137 |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1138 def designator(self): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1139 """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
|
1140 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
|
1141 |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1142 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
|
1143 """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
|
1144 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
|
1145 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1146 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
|
1147 """Generate a submit button. |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1148 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1149 "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
|
1150 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1151 |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1152 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
|
1153 """ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1154 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1155 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
|
1156 value=self._(label), **html_kwargs) + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1157 '\n' + \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1158 self.input(type="hidden", name="@lastactivity", |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1159 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
|
1160 '\n' + \ |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1161 self.input(type="hidden", name="@csrf", |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
1162 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
|
1163 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1164 self.input(type="hidden", name="@action", value=action) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1165 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1166 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
|
1167 """ 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
|
1168 """ |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1169 # XXX do this |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1170 return [] |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1171 |
| 5809 | 1172 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
|
1173 limit=None, showall=False): |
|
5112
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1174 """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
|
1175 |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1176 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
|
1177 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
|
1178 shown. |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1179 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1180 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
|
1181 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1182 |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1183 # 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
|
1184 # 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
|
1185 # 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
|
1186 orig_form_wins = self._client.form_wins |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1187 self._client.form_wins = False |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1188 |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1189 # get the journal, sort and reverse |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1190 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
|
1191 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
|
1192 history.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1193 |
|
4233
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1194 # restrict the volume |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1195 if limit: |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1196 history = history[:limit] |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1197 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1394
diff
changeset
|
1198 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
|
1199 l = [] |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1200 current = {} |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1201 comments = {} |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1202 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
|
1203 date_s = str(evt_date.local(timezone)).replace(".", " ") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1204 arg_s = '' |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1205 if action in ['link', 'unlink'] and isinstance(args, tuple): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1206 if len(args) == 3: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1207 linkcl, linkid, key = args |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1208 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
|
1209 linkcl, linkid, linkcl, linkid, key) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1210 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1211 arg_s = str(args) |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1212 elif isinstance(args, dict): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1213 cell = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1214 for k in args.keys(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1215 # try to get the relevant property and treat it |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1216 # specially |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1217 try: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1218 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
|
1219 except KeyError: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1220 prop = None |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1221 if prop is None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1222 # property no longer exists |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1223 comments['no_exist'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1224 "<em>The indicated property no longer exists</em>") |
|
7060
2c89bdc88923
Remove translation marker.
John Rouillard <rouilj@ieee.org>
parents:
7037
diff
changeset
|
1225 cell.append('<em>%s: %s</em>\n' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1226 % (self._(k), str(args[k]))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1227 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1228 |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1229 # 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
|
1230 # haven't already) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1231 if k not in current: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1232 val = self[k] |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1233 if not isinstance(val, HTMLProperty): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1234 current[k] = None |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1235 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1236 current[k] = val.plain(escape=1) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1237 # make link if hrefable |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1238 if (isinstance(prop, hyperdb.Link)): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1239 classname = prop.classname |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1240 try: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1241 template = self._client.selectTemplate(classname, 'item') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1242 if template.startswith('_generic.'): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1243 raise NoTemplate('not really...') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1244 except NoTemplate: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1245 pass |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1246 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1247 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
|
1248 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
|
1249 classname, linkid, current[k]) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1250 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1251 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
|
1252 isinstance(prop, hyperdb.Link)): |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1253 # figure what the link class is |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1254 classname = prop.classname |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1255 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1256 linkcl = self._db.getclass(classname) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1257 except KeyError: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1258 labelprop = None |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1259 comments[classname] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1260 "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
|
1261 ) % locals() |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1262 labelprop = linkcl.labelprop(1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1263 try: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1264 template = self._client.selectTemplate(classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1265 'item') |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1266 if template.startswith('_generic.'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1267 raise NoTemplate('not really...') |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1268 hrefable = 1 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1269 except NoTemplate: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1270 hrefable = 0 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1271 |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1272 if isinstance(prop, hyperdb.Multilink) and args[k]: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1273 ml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1274 for linkid in args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1275 if isinstance(linkid, type(())): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1276 sublabel = linkid[0] + ' ' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1277 linkids = linkid[1] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1278 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1279 sublabel = '' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1280 linkids = [linkid] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1281 subml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1282 for linkid in linkids: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1283 # We're seeing things like |
|
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1284 # {'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
|
1285 if linkid is None: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1286 continue |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1287 label = classname + linkid |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1288 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1289 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1290 # there's no labelprop! |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1291 try: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1292 if labelprop is not None and \ |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1293 labelprop != 'id': |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1294 label = linkcl.get( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1295 linkid, labelprop, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1296 default=self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1297 "[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
|
1298 label = html_escape(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1299 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1300 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1301 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1302 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1303 subml.append('<strike>%s</strike>' % label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1304 else: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1305 if hrefable: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1306 subml.append( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1307 '<a rel="nofollow noopener" ' |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1308 'href="%s%s">%s</a>' % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1309 classname, linkid, label)) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
1310 elif label is None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1311 subml.append('%s%s' % (classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1312 linkid)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1313 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1314 subml.append(label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1315 ml.append(sublabel + ', '.join(subml)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1316 cell.append('%s:\n %s' % (self._(k), ', '.join(ml))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1317 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1318 label = classname + args[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1319 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1320 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1321 # there's no labelprop! |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1322 if labelprop is not None and labelprop != 'id': |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1323 try: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1324 label = html_escape( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1325 linkcl.get(args[k], |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1326 labelprop, default=self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1327 "[label is missing]"))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1328 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1329 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1330 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1331 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1332 cell.append(' <strike>%s</strike>,\n' % label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1333 # "flag" this is done .... euwww |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1334 label = None |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1335 if label is not None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1336 if hrefable: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1337 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
|
1338 classname, args[k], label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1339 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1340 old = label |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
1341 cell.append('%s: %s' % (self._(k), old)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1342 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
|
1343 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1344 current[k] = old |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1345 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1346 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1347 if args[k] is None: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1348 d = '' |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1349 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1350 d = date.Date( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1351 args[k], |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1352 translator=self._client).local(timezone) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1353 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
|
1354 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
|
1355 cell[-1] += ' -> %s' % current[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1356 current[k] = str(d) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1357 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1358 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
|
1359 val = str(date.Interval(args[k], |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1360 translator=self._client)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1361 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1362 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
|
1363 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1364 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1365 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1366 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
|
1367 val = html_escape(args[k]) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1368 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1369 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
|
1370 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1371 current[k] = val |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1372 |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1373 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
|
1374 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
|
1375 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1376 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
|
1377 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1378 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1379 |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1380 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
|
1381 val = args[k].dummystr() |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1382 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1383 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
|
1384 cell[-1] += ' -> %s' % current[k] |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1385 current[k] = val |
|
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1386 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1387 elif not args[k]: |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1388 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
|
1389 cell.append('%s: %s' % (self._(k), current[k])) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1390 current[k] = '(no value)' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1391 else: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1392 cell.append(self._('%s: (no value)') % self._(k)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1393 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1394 else: |
|
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), str(args[k]))) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1396 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
|
1397 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1398 current[k] = str(args[k]) |
|
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 arg_s = '<br />'.join(cell) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1401 else: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1402 if action in ('retired', 'restored'): |
|
5947
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1403 # args = None for these actions |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1404 pass |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1405 else: |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1406 # unknown event!! |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1407 comments['unknown'] = self._( |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1408 "<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
|
1409 " 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
|
1410 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
|
1411 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1412 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
|
1413 # 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
|
1414 # have the username) |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1415 if dre.match(user): |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1416 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
|
1417 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
|
1418 date_s, html_escape(user), self._(action), arg_s)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1419 if comments: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1420 l.append(self._( |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1421 '<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1422 for entry in comments.values(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1423 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
|
1424 |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1425 if direction == 'ascending': |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1426 l.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1427 |
|
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
|
1428 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
|
1429 '<tr><th colspan="4" class="header">', |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1430 self._('History'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1431 '</th></tr><tr>', |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1432 self._('<th>Date</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1433 self._('<th>User</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1434 self._('<th>Action</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1435 self._('<th>Args</th>'), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1436 '</tr>'] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1437 l.append('</table>') |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1438 |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1439 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
|
1440 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1441 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1442 |
|
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
|
1443 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
|
1444 """ 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
|
1445 """ |
|
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
|
1446 # 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
|
1447 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
|
1448 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
|
1449 name = self._klass.get(self._nodeid, 'name') |
|
899c6ced2abe
include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents:
1272
diff
changeset
|
1450 req.updateFromURL(self._klass.get(self._nodeid, 'url') + |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1451 '&@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
|
1452 |
|
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 # 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
|
1454 # [ ] 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
|
1455 # generic templating module (techtonik) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1456 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
|
1457 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
|
1458 # 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
|
1459 # node. |
|
885069b5f328
Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents:
4056
diff
changeset
|
1460 self._client.nodeid = None |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
1461 |
|
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
|
1462 # 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
|
1463 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
|
1464 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1465 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
|
1466 """ 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
|
1467 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
|
1468 """ |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1469 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
|
1470 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
|
1471 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1472 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1473 def copy_url(self, exclude=("messages", "files")): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1474 """Construct a URL for creating a copy of this item |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1475 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1476 "exclude" is an optional list of properties that should |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1477 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
|
1478 includes "messages" and "files" properties. Note that |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1479 "id" property cannot be copied. |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1480 |
|
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 = ("id", "activity", "actor", "creation", "creator") \ |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1483 + tuple(exclude) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1484 query = { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1485 "@template": "item", |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1486 "@note": self._("Copy of %(class)s %(id)s") % { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1487 "class": self._(self._classname), "id": self._nodeid}, |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1488 } |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1489 for name in self._props.keys(): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1490 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
|
1491 prop = self._props[name] |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1492 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
|
1493 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
|
1494 else: |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1495 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
|
1496 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1497 return self._classname + "?" + "&".join( |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
1498 ["%s=%s" % (key, urllib_.quote(value)) |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1499 for key, value in query.items()]) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1500 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1501 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1502 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
|
1503 """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
|
1504 """ |
|
7757
ab679558bb28
fix: remove mutable object as default for method/function values
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
1505 _marker = ('_HTMLUserMarker') |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1506 |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1507 def hasPermission(self, permission, classname=_marker, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1508 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
|
1509 """Determine if the user has the Permission. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1510 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1511 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
|
1512 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
|
1513 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1514 if classname is self._marker: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1515 classname = self._client.classname |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1516 return self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1517 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
|
1518 |
|
4306
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1519 def hasRole(self, *rolenames): |
|
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1520 """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
|
1521 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
|
1522 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1523 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1524 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
|
1525 if classname == 'user': |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1526 return _HTMLUser(client, classname, nodeid, anonymous) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1527 else: |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1528 return _HTMLItem(client, classname, nodeid, anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1529 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1530 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1531 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
|
1532 """ String, Integer, Number, Date, Interval HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1533 |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1534 Has useful attributes: |
|
1080
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1535 |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1536 _name the name of the property |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1537 _value the value of the property if any |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1538 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1539 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
|
1540 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1541 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
|
1542 anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1543 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1544 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
|
1545 self._ = client._ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1546 self._classname = classname |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1547 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1548 self._prop = prop |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1549 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
|
1550 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
|
1551 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
|
1552 if not anonymous: |
|
4286
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1553 if nodeid: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1554 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
|
1555 else: |
|
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1556 # 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
|
1557 # non-anonymous class. |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1558 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
|
1559 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
|
1560 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
|
1561 |
| 4056 | 1562 # If no value is already present for this property, see if one |
| 1563 # is specified in the current form. | |
| 1564 form = self._client.form | |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1565 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
|
1566 is_in = self._formname in form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1567 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1568 is_in = False |
|
5166
232c74973a56
issue1408570: fix that form values are lost
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5156
diff
changeset
|
1569 if is_in and (not self._value or self._client.form_wins): |
| 4056 | 1570 if isinstance(prop, hyperdb.Multilink): |
| 1571 value = lookupIds(self._db, prop, | |
| 1572 handleListCGIValue(form[self._formname]), | |
| 1573 fail_ok=1) | |
| 1574 elif isinstance(prop, hyperdb.Link): | |
| 1575 value = form.getfirst(self._formname).strip() | |
| 1576 if value: | |
| 1577 value = lookupIds(self._db, prop, [value], | |
| 1578 fail_ok=1)[0] | |
| 1579 else: | |
| 1580 value = None | |
| 1581 else: | |
| 1582 value = form.getfirst(self._formname).strip() or None | |
| 1583 self._value = value | |
| 1584 | |
|
6404
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1585 # 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
|
1586 if self._value is None: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1587 self._value = prop.get_default_value() |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1588 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1589 HTMLInputMixin.__init__(self) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1590 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1591 def __repr__(self): |
|
4463
1bd86e82422b
Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents:
4437
diff
changeset
|
1592 classname = self.__class__.__name__ |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1593 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
|
1594 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
|
1595 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1596 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1597 return self.plain() |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1598 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1599 def __lt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1600 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1601 return self._value < other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1602 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
|
1603 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1604 def __le__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1605 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1606 return self._value <= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1607 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
|
1608 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1609 def __eq__(self, other): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1610 if isinstance(other, HTMLProperty): |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1611 return self._value == other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1612 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
|
1613 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1614 def __ne__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1615 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1616 return self._value != other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1617 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
|
1618 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1619 def __gt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1620 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1621 return self._value > other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1622 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
|
1623 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1624 def __ge__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1625 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1626 return self._value >= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1627 return self._value >= other |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1628 |
|
5404
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1629 def __bool__(self): |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1630 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
|
1631 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1632 __nonzero__ = __bool__ |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1633 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1634 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
|
1635 """Is my _value not None?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1636 return self._value is not None |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1637 |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1638 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
|
1639 """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
|
1640 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
|
1641 ones. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1642 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1643 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1644 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
|
1645 if self._nodeid: |
|
4329
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1646 if not perm('Web Access', userid): |
|
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1647 return False |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1648 return perm('Edit', userid, self._classname, self._name, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1649 self._nodeid) |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1650 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
|
1651 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
|
1652 |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1653 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
|
1654 """ 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
|
1655 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1656 perm = self._db.security.hasPermission |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1657 if perm('Web Access', self._client.userid) and perm( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1658 'View', self._client.userid, self._classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1659 self._name, self._nodeid): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1660 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1661 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
|
1662 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1663 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1664 class StringHTMLProperty(HTMLProperty): |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1665 hyper_re = re.compile(r'''( |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1666 (?P<url> |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1667 ( |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1668 (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
|
1669 ([\w]+(:\w+)?@)? # username/password |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1670 ([\w\-]+) # hostname |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1671 ((\.[\w-]+)+)? # .domain.etc |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1672 | # ... or ... |
|
4010
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1673 ([\w]+(:\w+)?@)? # username/password |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1674 www\. # "www." |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1675 ([\w\-]+\.)+ # hostname |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1676 [\w]{2,5} # TLD |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1677 ) |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1678 (:[\d]{1,5})? # port |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1679 (/[\w\-$.+!*(),;:@&=?/~\\#%]*)? # path etc. |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1680 )| |
|
7561
91725f12b239
Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents:
7479
diff
changeset
|
1681 (?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
|
1682 (?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
|
1683 )''', re.X | re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1684 protocol_re = re.compile('^(ht|f)tp(s?)://', re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1685 |
|
6098
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1686 # disable rst directives that have security implications |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1687 rst_defaults = {'file_insertion_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1688 'raw_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1689 '_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
|
1690 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1691 valid_schemes = {} |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1692 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1693 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
|
1694 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
|
1695 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
|
1696 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
|
1697 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
|
1698 elif len(match.group('id')) < 10: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1699 return self._hyper_repl_item( |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1700 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
|
1701 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1702 # 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
|
1703 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
|
1704 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1705 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
|
1706 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
|
1707 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
|
1708 u = 'http://' + s |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1709 end = '' |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1710 if '>' in s: |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1711 # 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
|
1712 pos = s.find('>') |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1713 end = s[pos:] |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1714 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
|
1715 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
|
1716 # 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
|
1717 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
|
1718 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
|
1719 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
|
1720 # 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
|
1721 pos = s.rfind(')') |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1722 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
|
1723 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
|
1724 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
|
1725 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1726 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
|
1727 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
|
1728 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
|
1729 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1730 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
|
1731 item = match.group('item') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1732 cls = match.group('class').lower() |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1733 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
|
1734 fragment = match.group('fragment') |
|
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1735 if fragment is None: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
1736 fragment = "" |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1737 try: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1738 # 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
|
1739 cl = self._db.getclass(cls) |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1740 if not cl.hasnode(itemid): |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1741 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1742 return replacement % locals() |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1743 except KeyError: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1744 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1745 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1746 def _hyper_repl_rst(self, match): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1747 if match.group('url'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1748 s = match.group('url') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1749 return '`%s <%s>`_' % (s, s) |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1750 elif match.group('email'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1751 s = match.group('email') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1752 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
|
1753 elif len(match.group('id')) < 10: |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1754 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
|
1755 else: |
|
4288
ce684080e968
issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents:
4286
diff
changeset
|
1756 # 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
|
1757 return match.group(0) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1758 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1759 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
|
1760 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
|
1761 if match.group(group): |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1762 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
|
1763 end = match.end(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1764 if start >= 0: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1765 prefix = match.string[start] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1766 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
|
1767 suffix = match.string[end] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1768 if (prefix, suffix) in { |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1769 ('<', '>'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1770 ('(', ')'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1771 }: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1772 continue |
|
6299
fd0bdcbc68e4
issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents:
6284
diff
changeset
|
1773 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
|
1774 continue |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1775 s = match.group(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1776 return '<%s>' % s |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
1777 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
|
1778 # Pass through markdown style links: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1779 # [issue1](https://....) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1780 # [issue1](issue1) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1781 # 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
|
1782 # https://issues.roundup-tracker.org/issue2551108 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1783 start = match.start('item') - 1 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1784 end = match.end('item') |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1785 if start >= 0: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1786 prefix = match.string[start] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1787 if end < len(match.string): |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1788 suffix = match.string[end] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1789 if (prefix, suffix) in {('[', ']')}: |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
1790 if match.string[end+1] == '(': # find following ( |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1791 return match.group(0) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1792 if (prefix, suffix) in {('(', ')')}: |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1793 if match.string[start-1] == ']': |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1794 return match.group(0) |
|
7776
710f998c0d5b
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7775
diff
changeset
|
1795 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
|
1796 else: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1797 # just return the matched text |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1798 return match.group(0) |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1799 |
|
5156
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1800 def url_quote(self): |
|
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1801 """ 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
|
1802 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
|
1803 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1804 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
|
1805 """ Render a "hyperlinked" version of the text """ |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1806 return self.plain(hyperlink=1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1807 |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1808 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
|
1809 """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
|
1810 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1811 - "escape" turns on/off HTML quoting |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1812 - "hyperlink" turns on/off in-text hyperlinking of URLs, email |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1813 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
|
1814 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1815 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
|
1816 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1817 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1818 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1819 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1820 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
|
1821 s = html_escape(str(self._value)) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1822 else: |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1823 s = str(self._value) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1824 if hyperlink: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1825 # no, we *must* escape this text |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1826 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
|
1827 s = html_escape(s) |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1828 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
|
1829 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1830 |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1831 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
|
1832 """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
|
1833 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1834 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
|
1835 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
|
1836 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1837 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
|
1838 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
|
1839 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1840 - "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
|
1841 - "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
|
1842 addresses and designators |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1843 - "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
|
1844 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
|
1845 """ |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1846 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
|
1847 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
|
1848 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1849 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
|
1850 return '' |
|
7864
b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents:
7836
diff
changeset
|
1851 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
|
1852 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
|
1853 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
|
1854 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
|
1855 if hyperlink: |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1856 # 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
|
1857 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
|
1858 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
|
1859 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
|
1860 return s |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1861 |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1862 def rst(self, hyperlink=1): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1863 """ 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
|
1864 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1865 This requires docutils to be installed separately. |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1866 """ |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1867 if not self.is_view_ok(): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1868 return self._('[hidden]') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1869 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1870 if not ReStructuredText: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1871 return self.plain(escape=0, hyperlink=hyperlink) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1872 s = self.plain(escape=0, hyperlink=0) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1873 if hyperlink: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1874 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
|
1875 |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1876 # 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
|
1877 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
|
1878 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
|
1879 # 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
|
1880 # 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
|
1881 # 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
|
1882 # 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
|
1883 # 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
|
1884 # 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
|
1885 # 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
|
1886 # 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
|
1887 try: |
| 7572 | 1888 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
|
1889 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
|
1890 except KeyError: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1891 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
|
1892 pass |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1893 else: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1894 raise |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1895 |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1896 return u2s(ReStructuredText( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1897 s, writer_name="html", |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1898 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
|
1899 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1900 def markdown(self, hyperlink=1): |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1901 """ 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
|
1902 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1903 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
|
1904 """ |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1905 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
|
1906 return self._('[hidden]') |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1907 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1908 if not markdown: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1909 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
|
1910 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
|
1911 if hyperlink: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1912 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
|
1913 try: |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
1914 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
|
1915 except Exception: # when markdown formatting fails return markup |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1916 return self.plain(escape=0, hyperlink=hyperlink) |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1917 return s |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1918 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1919 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
|
1920 """ 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
|
1921 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1922 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
|
1923 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1924 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1925 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
|
1926 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
1927 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
|
1928 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1929 value = '' |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1930 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1931 kwargs.setdefault("size", 30) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1932 kwargs.update({"name": self._formname, "value": value}) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1933 return self.input(**kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1934 |
|
3905
6733a7cce7f4
multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3903
diff
changeset
|
1935 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
|
1936 """ 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
|
1937 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1938 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
|
1939 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1940 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
|
1941 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
|
1942 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1943 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1944 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1945 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
|
1946 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
|
1947 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1948 value = '"'.join(value.split('"')) |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1949 name = self._formname |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
1950 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
|
1951 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
|
1952 ' rows="%(rows)s" cols="%(cols)s">' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
1953 '%(value)s</textarea>') % locals() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1954 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1955 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
|
1956 """ 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
|
1957 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1958 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
|
1959 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1960 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1961 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1962 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1963 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1964 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
|
1965 split = value.split('@') |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1966 if len(split) == 2: |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1967 name, domain = split |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1968 domain = ' '.join(domain.split('.')[:-1]) |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1969 name = name.replace('.', ' ') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1970 value = '%s at %s ...' % (name, domain) |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1971 else: |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1972 value = value.replace('.', ' ') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1973 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
|
1974 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1975 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1976 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1977 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1978 class PasswordHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1979 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
|
1980 """ 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
|
1981 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1982 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
|
1983 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1984 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1985 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1986 return '' |
|
5182
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1987 try: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1988 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
|
1989 except AttributeError: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1990 value = self._('[hidden]') |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1991 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
|
1992 value = html_escape(value) |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1993 return value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1994 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
1995 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
|
1996 """ 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
|
1997 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1998 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
|
1999 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2000 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2001 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
|
2002 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2003 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
|
2004 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2005 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
2006 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
|
2007 """ 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
|
2008 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
|
2009 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
|
2010 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2011 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
|
2012 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2013 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
|
2014 return '' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2015 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2016 return self.input(type="password", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2017 name="@confirm@%s" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2018 id="%s-confirm" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2019 size=size) |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
2020 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2021 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2022 class NumberHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2023 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
|
2024 """ 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
|
2025 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2026 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
|
2027 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2028 |
|
2884
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2029 if self._value is None: |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2030 return '' |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
2031 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2032 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2033 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2034 def pretty(self, format="%0.3f"): |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2035 '''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
|
2036 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2037 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
|
2038 if None. |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2039 ''' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2040 try: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2041 return format % self._value |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2042 except TypeError: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2043 value = self._value |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2044 if value is None: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2045 return '' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2046 else: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2047 return str(value) |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2048 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2049 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
|
2050 """ 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
|
2051 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2052 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
|
2053 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2054 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2055 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
|
2056 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2057 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
|
2058 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2059 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2060 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2061 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
|
2062 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2063 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2064 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
|
2065 """ 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
|
2066 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2067 return int(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2068 |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2069 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
|
2070 """ 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
|
2071 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2072 return float(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2073 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2074 |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2075 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
|
2076 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
|
2077 """ 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
|
2078 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2079 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
|
2080 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
|
2081 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2082 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
|
2083 return '' |
|
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 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
|
2086 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2087 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
|
2088 """ 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
|
2089 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2090 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
|
2091 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2092 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
|
2093 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
|
2094 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2095 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
|
2096 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
|
2097 value = '' |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2098 |
|
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.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
|
2100 **kwargs) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2101 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2102 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
|
2103 """ 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
|
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 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
|
2106 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2107 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2108 class BooleanHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2109 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
|
2110 """ 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
|
2111 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2112 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
|
2113 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2114 |
|
1289
257f0ab00d50
bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents:
1284
diff
changeset
|
2115 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2116 return '' |
|
3354
201dbcf63a30
use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3338
diff
changeset
|
2117 return self._value and self._("Yes") or self._("No") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2118 |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2119 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
|
2120 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
|
2121 """ 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
|
2122 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2123 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
|
2124 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2125 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
|
2126 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
|
2127 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2128 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
|
2129 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
|
2130 values. |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2131 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2132 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
|
2133 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
|
2134 """ |
|
2113
30aeb17e5b04
Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents:
2106
diff
changeset
|
2135 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2136 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
|
2137 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2138 value = self._value |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2139 if is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2140 value = value.strip().lower() in ('checked', 'yes', 'true', |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2141 'on', '1') |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2142 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2143 if (not y_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2144 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
|
2145 self._formname, 'yes') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2146 y_label += self._('Yes') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2147 y_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2148 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2149 if (not n_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2150 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
|
2151 self._formname, 'no') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2152 n_label += self._('No') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2153 n_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2154 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2155 checked = value and "checked" or "" |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2156 if value: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2157 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
|
2158 checked="checked", id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2159 self._formname, 'yes'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2160 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2161 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
|
2162 id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2163 self._formname, 'no'), **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2164 else: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2165 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
|
2166 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
|
2167 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2168 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
|
2169 checked="checked", id="%s_%s" % ( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2170 self._formname, 'no'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2171 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2172 if (u_label): |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2173 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
|
2174 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
|
2175 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
|
2176 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
|
2177 else: |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2178 # 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
|
2179 u_label = '' |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2180 u_rb = '' |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2181 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2182 if (labelfirst): |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2183 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
|
2184 else: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2185 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
|
2186 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2187 return s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2188 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2189 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2190 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
|
2191 |
|
7757
ab679558bb28
fix: remove mutable object as default for method/function values
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
2192 _marker = ('HTMLPropertyMarker') |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2193 |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2194 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
|
2195 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
|
2196 HTMLProperty.__init__(self, client, classname, nodeid, prop, name, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2197 value, anonymous=anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2198 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
|
2199 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
|
2200 self._offset = offset |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2201 if self._offset is None: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
2202 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
|
2203 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2204 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
|
2205 """ 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
|
2206 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2207 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
|
2208 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2209 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2210 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2211 return '' |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2212 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
|
2213 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
|
2214 else: |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2215 offset = self._offset |
|
4842
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2216 try: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2217 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
|
2218 except AttributeError: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2219 # 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
|
2220 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2221 |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
2222 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
|
2223 """ Return the current time. |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2224 |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2225 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
|
2226 DateHTMLProperty. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2227 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2228 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
|
2229 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2230 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2231 ret = date.Date('.', translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2232 |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2233 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
|
2234 sign = 1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2235 if str_interval[0] == '-': |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2236 sign = -1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2237 str_interval = str_interval[1:] |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2238 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
|
2239 if sign > 0: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2240 ret = ret + interval |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2241 else: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2242 ret = ret - interval |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2243 |
| 2037 | 2244 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2245 self._prop, self._formname, ret) |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2246 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2247 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
|
2248 **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2249 """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
|
2250 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2251 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
|
2252 |
|
3649
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2253 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
|
2254 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
|
2255 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2256 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
|
2257 """ |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2258 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
|
2259 if format is self._marker: |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2260 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
|
2261 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2262 return self.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2263 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2264 value = self._value |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2265 |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2266 if value is None: |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2267 if default is None: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2268 raw_value = None |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2269 else: |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2270 if is_us(default): |
|
3832
bbc977e1cd2c
Fix handling of defaults for date fields
Richard Jones <richard@users.sourceforge.net>
parents:
3785
diff
changeset
|
2271 raw_value = date.Date(default, translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2272 elif isinstance(default, date.Date): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2273 raw_value = default |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2274 elif isinstance(default, DateHTMLProperty): |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2275 raw_value = default._value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2276 else: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2277 raise ValueError(self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2278 'default value for ' |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2279 'DateHTMLProperty must be either DateHTMLProperty ' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2280 'or string date representation.')) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2281 elif is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2282 # 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
|
2283 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
|
2284 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
|
2285 **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
|
2286 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
|
2287 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
|
2288 return s |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2289 else: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2290 raw_value = value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2291 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2292 if raw_value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2293 value = '' |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2294 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
|
2295 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
|
2296 value = raw_value |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2297 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2298 value = date.Date(raw_value).pretty(format) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2299 else: |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2300 if self._offset is None: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2301 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
|
2302 else: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2303 offset = self._offset |
|
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2304 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
|
2305 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
|
2306 value = value.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2307 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2308 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
|
2309 **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
|
2310 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
|
2311 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
|
2312 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2313 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2314 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
|
2315 """ 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
|
2316 |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2317 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
|
2318 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2319 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
|
2320 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2321 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2322 if not self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2323 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2324 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2325 # figure the interval |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
2326 interval = self._value - date.Date('.', translator=self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2327 if pretty: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2328 return interval.pretty() |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2329 return str(interval) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2330 |
|
1453
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
2331 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
|
2332 """ 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
|
2333 |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2334 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
|
2335 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
|
2336 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
|
2337 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
|
2338 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2339 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
|
2340 return self._('[hidden]') |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2341 |
|
3479
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2342 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
|
2343 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
|
2344 else: |
|
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2345 offset = self._offset |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2346 |
|
6377
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2347 try: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2348 if not self._value: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2349 return '' |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2350 elif format is not self._marker: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2351 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
|
2352 else: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2353 return self._value.local(offset).pretty() |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2354 except AttributeError: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2355 # 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
|
2356 return str(self._value) |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2357 |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2358 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
|
2359 """ 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
|
2360 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2361 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
|
2362 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2363 |
|
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
|
2364 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2365 self._prop, self._formname, self._value, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2366 offset=offset) |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2367 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
2368 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
|
2369 form="itemSynopsis"): |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2370 """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
|
2371 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2372 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
|
2373 """ |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2374 if self.isset(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2375 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
|
2376 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2377 date = "" |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2378 |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2379 data_attr = { |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
2380 "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
|
2381 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
|
2382 "data-width": width, |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2383 "data-height": height |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2384 } |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2385 |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2386 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
|
2387 "'%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
|
2388 '">%s</a>' % (self.cgi_escape_attrs(**data_attr), |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2389 self._classname, self._name, form, date, width, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2390 height, label)) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2391 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2392 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2393 class IntervalHTMLProperty(HTMLProperty): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2394 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
|
2395 anonymous=0): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2396 HTMLProperty.__init__(self, client, classname, nodeid, prop, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2397 name, value, anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2398 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
|
2399 self._value.setTranslator(self._client.translator) |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2400 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2401 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
|
2402 """ 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
|
2403 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2404 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
|
2405 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2406 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2407 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2408 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2409 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2410 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2411 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
|
2412 """ 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
|
2413 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2414 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
|
2415 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2416 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2417 return self._value.pretty() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2418 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2419 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
|
2420 """ 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
|
2421 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2422 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
|
2423 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2424 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2425 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
|
2426 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2427 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
|
2428 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2429 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2430 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2431 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
|
2432 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2433 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2434 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2435 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
|
2436 """ Link HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2437 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
|
2438 information. Stringifying the object itself results in the value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2439 from the item being displayed. Accessing attributes of this object |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2440 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
|
2441 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
|
2442 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
|
2443 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
|
2444 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
2445 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
|
2446 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
|
2447 # 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
|
2448 # 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
|
2449 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
|
2450 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
|
2451 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2452 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
|
2453 """ return a new HTMLItem """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2454 if not self._value: |
|
3394
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2455 # handle a special page templates lookup |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2456 if attr == '__render_with_namespace__': |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2457 def nothing(*args, **kw): |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2458 return '' |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2459 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
|
2460 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
|
2461 return MissingValue(msg % locals()) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
2462 i = HTMLItem(self._client, self._prop.classname, self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2463 return getattr(i, attr) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2464 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2465 def __getitem__(self, item): |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2466 """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
|
2467 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
|
2468 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
|
2469 """ |
|
4879
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2470 if not self._value: |
|
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2471 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
|
2472 return MissingValue(msg % locals()) |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2473 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
|
2474 return i[item] |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2475 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2476 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
|
2477 """ 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
|
2478 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2479 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
|
2480 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2481 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2482 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
|
2483 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2484 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2485 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
|
2486 if num_re.match(self._value): |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2487 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
|
2488 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
|
2489 default=self._("[label is missing]"))) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2490 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2491 value = self._value |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2492 else: |
|
3936
63d58cc1394a
make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents:
3909
diff
changeset
|
2493 value = self._value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2494 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
|
2495 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2496 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2497 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2498 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
|
2499 """ 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
|
2500 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2501 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
|
2502 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2503 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2504 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
|
2505 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2506 # edit field |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2507 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
|
2508 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2509 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2510 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2511 k = linkcl.getkey() |
|
4958
9b1302f9fb11
Fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4945
diff
changeset
|
2512 idparse = self._prop.try_id_parsing |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2513 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
|
2514 try: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2515 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
|
2516 except IndexError: |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2517 if idparse: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2518 raise |
|
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2519 value = '' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2520 else: |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
2521 value = self._value |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2522 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
|
2523 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2524 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2525 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
|
2526 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
|
2527 """ 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
|
2528 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2529 "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
|
2530 "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
|
2531 "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
|
2532 "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
|
2533 "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
|
2534 label |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2535 "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
|
2536 (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
|
2537 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
|
2538 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
|
2539 "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
|
2540 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
|
2541 "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
|
2542 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
|
2543 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
|
2544 "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
|
2545 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
|
2546 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
|
2547 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
|
2548 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
|
2549 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2550 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
|
2551 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
|
2552 "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
|
2553 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2554 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
|
2555 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2556 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2557 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
|
2558 |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2559 # 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
|
2560 # 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
|
2561 # 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
|
2562 # 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
|
2563 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
|
2564 value = self._value |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2565 elif value == '-1': |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2566 value = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2567 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2568 linkcl = self._db.getclass(self._prop.classname) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2569 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
|
2570 **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2571 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2572 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2573 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
|
2574 s = 'selected="selected" ' |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2575 html.append(self._( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2576 '<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
|
2577 |
|
3361
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2578 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
|
2579 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
|
2580 if sort_on[0] in '+-': |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2581 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
|
2582 else: |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2583 sort_on = ('+', sort_on) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2584 else: |
| 4032 | 2585 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
|
2586 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2587 options = [opt |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2588 for opt in linkcl.filter( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2589 None, conditions, sort_on, (None, None)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2590 if self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2591 "View", self._client.userid, linkcl.classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2592 itemid=opt)] |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2593 |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2594 # 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
|
2595 if value and value not in options: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2596 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
|
2597 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2598 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2599 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2600 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2601 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2602 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2603 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2604 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2605 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2606 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
|
2607 propname=propname, labelprop=labelprop: \ |
|
843886af0ea1
Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4846
diff
changeset
|
2608 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
|
2609 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2610 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
|
2611 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
|
2612 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2613 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2614 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2615 # 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
|
2616 try: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2617 option = linkcl.get(optionid, k) or '' |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2618 except IndexError: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2619 # optionid does not exist. E.G. |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2620 # IndexError: no such queue z |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2621 # 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
|
2622 # a new issue |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2623 continue |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2624 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2625 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2626 s = '' |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2627 # 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
|
2628 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
|
2629 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2630 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
|
2631 s = 'selected="selected" ' |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2632 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
|
2633 selected_mark = showdef |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2634 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2635 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2636 if showid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2637 lab = '%s%s: %s' % (self._prop.classname, optionid, option) |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2638 elif not option: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2639 lab = '%s%s' % (self._prop.classname, optionid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2640 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2641 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2642 |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2643 lab = lab + selected_mark |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2644 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2645 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2646 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2647 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2648 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2649 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2650 m.append(str(fn(optionid))) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2651 lab = lab + ' (%s)' % ', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2652 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2653 # 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
|
2654 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
|
2655 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
|
2656 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
|
2657 lab = html_escape(tr(lab)) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2658 html.append( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2659 '<option %svalue="%s">%s</option>' % (s, optionid, lab)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2660 html.append('</select>') |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2661 return '\n'.join(html) |
|
7025
66149a18f09e
flake8 E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7024
diff
changeset
|
2662 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2663 # def checklist(self, ...) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2664 |
|
3194
f887e55edc94
replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
Richard Jones <richard@users.sourceforge.net>
parents:
3188
diff
changeset
|
2665 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2666 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
|
2667 """ Multilink HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2668 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2669 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
|
2670 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
|
2671 """ |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2672 def __init__(self, *args, **kwargs): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2673 HTMLProperty.__init__(self, *args, **kwargs) |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2674 if self._value: |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2675 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
|
2676 fail_ok=1, do_lookup=False) |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2677 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
|
2678 # 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
|
2679 # 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
|
2680 # 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
|
2681 try: |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2682 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
|
2683 except: |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2684 pass |
|
3271
572bbe7fa236
typo in recent fix
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3270
diff
changeset
|
2685 self._value = display_value |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2686 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2687 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
|
2688 """ length of the multilink """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2689 return len(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2690 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2691 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
|
2692 """ no extended attribute accesses make sense here """ |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2693 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2694 |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2695 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
|
2696 """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
|
2697 check = self._db.security.hasPermission |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2698 userid = self._client.userid |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2699 classname = self._prop.classname |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2700 if check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2701 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
|
2702 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
|
2703 itemid=value, |
|
24945480d24c
Iterate over multilink items if they labelprop is accessible to the
John Rouillard <rouilj@ieee.org>
parents:
5217
diff
changeset
|
2704 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
|
2705 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
|
2706 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2707 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
|
2708 """ 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
|
2709 """ |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2710 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
|
2711 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2712 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
|
2713 """ 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
|
2714 """ |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2715 mylist = self._value[:] |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2716 mylist.reverse() |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2717 return self.viewableGenerator(mylist) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2718 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2719 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
|
2720 """ 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
|
2721 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2722 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
|
2723 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
|
2724 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2725 """ |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2726 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2727 # 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
|
2728 # 0 to sort to sort None first |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2729 # 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
|
2730 NoneCode = (2, 0)[NoneFirst] |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2731 |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2732 value = list(self.__iter__()) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2733 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2734 if not value: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2735 # return empty list, nothing to sort. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2736 return value |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2737 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2738 # 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
|
2739 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
|
2740 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
|
2741 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
|
2742 sort_by_link = True |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2743 else: |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2744 orderprop = property |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2745 sort_by_link = False |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2746 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2747 def keyfunc(v): |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2748 # 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
|
2749 # type) to sort function. |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2750 # 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
|
2751 # 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
|
2752 # python type (int. str ...) against None. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2753 prop = v[property] |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2754 if not prop._value: |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2755 return (NoneCode, None) |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2756 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2757 if sort_by_link: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2758 val = prop[orderprop]._value |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2759 else: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2760 val = prop._value |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2761 |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2762 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
|
2763 return (NoneCode, None) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2764 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
|
2765 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2766 value.sort(key=keyfunc, reverse=reverse) |
|
2883
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2767 return value |
|
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2768 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2769 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
|
2770 """ 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
|
2771 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
|
2772 """ |
|
1325
2e5a9fc7abd5
allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents:
1323
diff
changeset
|
2773 return str(value) in self._value |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2774 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2775 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
|
2776 """Is my _value not []?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
2777 return self._value != [] |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2778 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2779 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
|
2780 """ 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
|
2781 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2782 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
|
2783 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2784 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2785 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2786 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2787 labels = [] |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2788 for v in self._value: |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2789 if num_re.match(v): |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2790 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
|
2791 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
|
2792 default=self._("[label is missing]")) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2793 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2794 label = None |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2795 # fall back to designator if label is None |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2796 if label is None: |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2797 label = '%s%s' % (self._prop.classname, k) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2798 else: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2799 label = v |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
2800 labels.append(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2801 value = ', '.join(labels) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2802 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
|
2803 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2804 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2805 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2806 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
|
2807 """ 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
|
2808 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2809 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
|
2810 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2811 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2812 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
|
2813 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2814 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
|
2815 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2816 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
|
2817 value = self._value[:] |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2818 # 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
|
2819 if not linkcl.getkey(): |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2820 showid = 1 |
|
4339
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2821 if not showid: |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2822 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
|
2823 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
|
2824 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
|
2825 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
|
2826 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2827 return self.input(name=self._formname, size=size, **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2828 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2829 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
|
2830 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
|
2831 **conditions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2832 """ 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
|
2833 |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2834 "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
|
2835 "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
|
2836 "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
|
2837 "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
|
2838 label |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2839 "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
|
2840 "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
|
2841 (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
|
2842 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
|
2843 For example: ('-', 'order'), '+name'. |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2844 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2845 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
|
2846 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
|
2847 "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
|
2848 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2849 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
|
2850 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2851 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2852 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
|
2853 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2854 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
|
2855 value = self._value |
|
5548
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2856 # 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
|
2857 # 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
|
2858 # 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
|
2859 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
|
2860 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2861 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
|
2862 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2863 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
|
2864 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
|
2865 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
|
2866 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
|
2867 else: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2868 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
|
2869 else: |
| 4032 | 2870 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
|
2871 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2872 options = [opt |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2873 for opt in linkcl.filter(None, conditions, sort_on) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2874 if self._db.security.hasPermission( |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2875 "View", self._client.userid, linkcl.classname, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2876 itemid=opt)] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2877 |
|
4042
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2878 # 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
|
2879 for val in value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2880 if val not in options: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2881 options.insert(0, val) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2882 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2883 if not height: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2884 height = len(options) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2885 if value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2886 # The "no selection" option. |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2887 height += 1 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2888 height = min(height, 7) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2889 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
|
2890 name=self._formname, size=height, **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2891 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
|
2892 |
|
5995
b4b5b7afacd9
issue2551007 - Selection fields are not translated
John Rouillard <rouilj@ieee.org>
parents:
5991
diff
changeset
|
2893 if value: # FIXME '- no selection -' mark for translation |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2894 html.append('<option value="%s">- no selection -</option>' |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2895 % ','.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
|
2896 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2897 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2898 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2899 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2900 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2901 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2902 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2903 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2904 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2905 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
|
2906 propname=propname, labelprop=labelprop: \ |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2907 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
|
2908 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2909 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
|
2910 linkcl.get(optionid, propname) |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2911 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2912 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2913 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2914 # 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
|
2915 option = linkcl.get(optionid, k) or '' |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2916 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2917 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2918 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2919 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
|
2920 s = 'selected="selected" ' |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2921 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2922 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2923 if showid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2924 lab = '%s%s: %s' % (self._prop.classname, optionid, option) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2925 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2926 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2927 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2928 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2929 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2930 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2931 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2932 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2933 m.append(str(fn(optionid))) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
2934 lab = lab + ' (%s)' % ', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2935 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2936 # 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
|
2937 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
|
2938 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
|
2939 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
|
2940 lab = html_escape(tr(lab)) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2941 html.append('<option %svalue="%s">%s</option>' % (s, optionid, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2942 lab)) |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2943 html.append('</select>') |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
2944 return '\n'.join(html) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2945 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2946 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2947 # 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
|
2948 propclasses = [ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2949 (hyperdb.String, StringHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2950 (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
|
2951 (hyperdb.Integer, IntegerHTMLProperty), |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2952 (hyperdb.Boolean, BooleanHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2953 (hyperdb.Date, DateHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2954 (hyperdb.Interval, IntervalHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2955 (hyperdb.Password, PasswordHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2956 (hyperdb.Link, LinkHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2957 (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
|
2958 ] |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2959 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2960 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2961 def register_propclass(prop, cls): |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2962 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
|
2963 p, c = propclass |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2964 if prop == p: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2965 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
|
2966 break |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2967 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2968 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
|
2969 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2970 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2971 def make_key_function(db, classname, sort_on=None): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2972 """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
|
2973 |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2974 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
|
2975 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2976 linkcl = db.getclass(classname) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2977 if sort_on is None: |
| 4032 | 2978 sort_on = linkcl.orderprop() |
|
7121
cb39a6c95cd3
Fix Traceback on empty numeric order attribute
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7060
diff
changeset
|
2979 prop = linkcl.getprops()[sort_on] |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2980 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2981 def keyfunc(a): |
|
4417
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2982 if num_re.match(a): |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2983 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
|
2984 # 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
|
2985 if a is None: |
|
7122
94a5a9e6f0d2
Fix traceback on integer order attribute, fix comment
John Rouillard <rouilj@ieee.org>
parents:
7121
diff
changeset
|
2986 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
|
2987 return 0 |
|
6689
994893cf3e1a
Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6658
diff
changeset
|
2988 return '' |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2989 return a |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2990 return keyfunc |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2991 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2992 |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
2993 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
|
2994 """ 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
|
2995 .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
|
2996 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2997 if isinstance(value, type([])): |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
2998 return [value.value for value in value] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2999 else: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3000 value = value.value.strip() |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3001 if not value: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
3002 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
|
3003 return [v.strip() for v in value.split(',')] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3004 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3005 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3006 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
|
3007 """The *request*, holding the CGI form and environment. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3008 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3009 - "form" the CGI form as a cgi.FieldStorage |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3010 - "env" the CGI environment variables |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3011 - "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
|
3012 - "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
|
3013 - "language" as determined by the browser or config |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3014 - "classname" the current classname (possibly None) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3015 - "template" the current template (suffix, also possibly None) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3016 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3017 Index args: |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3018 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3019 - "columns" dictionary of the columns to display in an index page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3020 - "show" a convenience access to columns - request/show/colname will |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3021 be true if the columns should be displayed, false otherwise |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3022 - "sort" index sort column (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3023 - "group" index grouping property (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3024 - "filter" properties to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3025 - "filterspec" values to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
3026 - "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
|
3027 """ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
3028 def __repr__(self): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3029 return '<HTMLRequest %r>' % self.__dict__ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
3030 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3031 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
|
3032 # _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
|
3033 self._client = self.client = client |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3034 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3035 # easier access vars |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3036 self.form = client.form |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3037 self.env = client.env |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3038 self.base = client.base |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
3039 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
|
3040 self.language = client.language |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3041 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3042 # store the current class name and action |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3043 self.classname = client.classname |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3044 self.nodeid = client.nodeid |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
3045 self.template = client.template |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3046 |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3047 # the special char to use for special vars |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3048 self.special_char = '@' |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3049 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
3050 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
|
3051 |
|
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
|
3052 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
|
3053 |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3054 def current_url(self): |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3055 url = self.base |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3056 if self.classname: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3057 url += self.classname |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3058 if self.nodeid: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3059 url += self.nodeid |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3060 args = {} |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3061 if self.template: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3062 args['@template'] = self.template |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3063 return self.indexargs_url(url, args) |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3064 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3065 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
|
3066 """ 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
|
3067 """ |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3068 fields = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3069 dirs = [] |
|
3698
c2d232b377d5
optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3696
diff
changeset
|
3070 for special in '@:': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3071 idx = 0 |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3072 key = '%s%s%d' % (special, name, idx) |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3073 while self._form_has_key(key): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3074 self.special_char = special |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3075 fields.append(self.form.getfirst(key)) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3076 dirkey = '%s%sdir%d' % (special, name, idx) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3077 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
|
3078 dirs.append(self.form.getfirst(dirkey)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3079 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3080 dirs.append(None) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3081 idx += 1 |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3082 key = '%s%s%d' % (special, name, idx) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3083 # backward compatible (and query) URL format |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3084 key = special + name |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3085 dirkey = key + 'dir' |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3086 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
|
3087 fields = handleListCGIValue(self.form[key]) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3088 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
|
3089 dirs.append(self.form.getfirst(dirkey)) |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3090 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
|
3091 break |
| 5095 | 3092 |
| 3093 # sometimes requests come in without a class | |
| 3094 # chances are they won't have any filter params, | |
| 3095 # in that case anyway but... | |
| 3096 if self.classname: | |
| 3097 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
|
3098 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
|
3099 if f.startswith('-'): |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3100 direction, propname = '-', f[1:] |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3101 elif d: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3102 direction, propname = '-', f |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3103 else: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3104 direction, propname = '+', f |
| 5095 | 3105 # if no classname, just append the propname unchecked. |
| 3106 # this may be valid for some actions that bypass classes. | |
| 3107 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
|
3108 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
|
3109 name, propname)) |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3110 else: |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3111 var.append((direction, propname)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3112 |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3113 def _form_has_key(self, name): |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3114 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
|
3115 return name in self.form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3116 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3117 pass |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3118 return False |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3119 |
|
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
|
3120 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
|
3121 """ 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
|
3122 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3123 # 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
|
3124 self.columns = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3125 for name in ':columns @columns'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3126 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3127 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3128 self.columns = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3129 break |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3130 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
|
3131 security = self._client.db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3132 userid = self._client.userid |
| 1002 | 3133 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3134 # sorting and grouping |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3135 self.sort = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3136 self.group = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3137 self._parse_sort(self.sort, 'sort') |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3138 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
|
3139 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
|
3140 self.group = security.filterSortspec(userid, self.classname, self.group) |
| 1002 | 3141 |
| 3142 # filtering | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3143 self.filter = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3144 for name in ':filter @filter'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3145 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3146 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3147 self.filter = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3148 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3149 self.filterspec = {} |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
3150 db = self.client.db |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3151 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
|
3152 cls = db.getclass(self.classname) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3153 for name in self.filter: |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3154 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
|
3155 continue |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3156 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
|
3157 fv = self.form[name] |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3158 if (isinstance(prop, hyperdb.Link) or |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3159 isinstance(prop, hyperdb.Multilink)): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3160 self.filterspec[name] = lookupIds(db, prop, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3161 handleListCGIValue(fv)) |
|
1631
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3162 else: |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3163 if isinstance(fv, type([])): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3164 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
|
3165 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
|
3166 # 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
|
3167 self.filterspec[name] = handleListCGIValue(fv) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3168 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3169 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
|
3170 self.filterspec = security.filterFilterspec(userid, self.classname, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3171 self.filterspec) |
| 1002 | 3172 |
| 3173 # full-text search argument | |
| 3174 self.search_text = None | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3175 for name in ':search_text @search_text'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3176 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3177 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
|
3178 self.search_text = self.form.getfirst(name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3179 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3180 # pagination - size and start index |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3181 # figure batch args |
|
3158
cf824afdb76b
*cough* nothing to see here
Richard Jones <richard@users.sourceforge.net>
parents:
3157
diff
changeset
|
3182 self.pagesize = 50 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3183 for name in ':pagesize @pagesize'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3184 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3185 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3186 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3187 self.pagesize = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3188 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3189 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3190 pass |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3191 |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3192 self.startwith = 0 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3193 for name in ':startwith @startwith'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3194 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3195 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3196 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3197 self.startwith = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3198 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3199 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3200 pass |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3201 |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3202 # dispname |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3203 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
|
3204 self.dispname = self.form.getfirst('@dispname') |
|
3689
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3205 else: |
|
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3206 self.dispname = None |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3207 |
|
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
|
3208 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
|
3209 """ 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
|
3210 values. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3211 """ |
|
1693
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3212 env = {'QUERY_STRING': url} |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3213 self.form = cgi.FieldStorage(environ=env) |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3214 |
|
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
|
3215 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
|
3216 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3217 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
|
3218 """ 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
|
3219 """ |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3220 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
|
3221 if 'columns' in kwargs: |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3222 self.show = support.TruthDict(self.columns) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3223 |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3224 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
|
3225 """ 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
|
3226 """ |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1080
diff
changeset
|
3227 s = [self.client.db.config.TRACKER_NAME] |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3228 if self.classname: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3229 if self.client.nodeid: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3230 s.append('- %s%s' % (self.classname, self.client.nodeid)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3231 else: |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3232 if self.template == 'item': |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3233 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
|
3234 elif self.template == 'index': |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3235 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
|
3236 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3237 s.append('- %s %s' % (self.classname, self.template)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3238 else: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3239 s.append('- home') |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3240 return ' '.join(s) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3241 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3242 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3243 d = {} |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3244 d.update(self.__dict__) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3245 f = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3246 for k in self.form.keys(): |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3247 f += '\n %r=%r' % (k, handleListCGIValue(self.form[k])) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3248 d['form'] = f |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3249 e = '' |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3250 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
|
3251 e += '\n %r=%r' % (k, v) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3252 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
|
3253 return """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3254 form: %(form)s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3255 base: %(base)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3256 classname: %(classname)r |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
3257 template: %(template)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3258 columns: %(columns)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3259 sort: %(sort)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3260 group: %(group)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3261 filter: %(filter)r |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3262 search_text: %(search_text)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3263 pagesize: %(pagesize)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3264 startwith: %(startwith)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3265 env: %(env)s |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3266 """ % d |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3267 |
| 1002 | 3268 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
|
3269 filterspec=1, search_text=1, exclude=[]): |
|
5082
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3270 """ 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
|
3271 |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3272 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
|
3273 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
|
3274 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
|
3275 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
|
3276 these elements in its output. |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3277 """ |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3278 html = [] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3279 sc = self.special_char |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
3280 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3281 def add(k, v): |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3282 html.append(self.input(type="hidden", name=k, value=v)) |
| 1002 | 3283 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
|
3284 add(sc+'columns', ','.join(self.columns)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3285 if sort: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3286 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3287 for direction, attr in self.sort: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3288 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3289 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3290 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3291 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3292 add(sc+'sort', ','.join(val)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3293 if group: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3294 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3295 for direction, attr in self.group: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3296 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3297 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3298 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3299 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3300 add(sc+'group', ','.join(val)) |
| 1002 | 3301 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
|
3302 add(sc+'filter', ','.join(self.filter)) |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3303 if self.classname and filterspec: |
|
4051
047402c4ec9b
Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents:
4043
diff
changeset
|
3304 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3305 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
|
3306 if k in exclude: |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3307 continue |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3308 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
|
3309 # 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
|
3310 # 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
|
3311 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
|
3312 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
|
3313 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
|
3314 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3315 add(k, ','.join(v)) |
|
1353
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
3316 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3317 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
|
3318 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
|
3319 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
|
3320 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
|
3321 add(sc+'startwith', self.startwith) |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3322 return '\n'.join(html) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3323 |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3324 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
|
3325 """ Embed the current index args in a URL |
| 5192 | 3326 |
| 3327 If the value of an arg (in args dict) is None, | |
| 3328 the argument is excluded from the url. If you want | |
| 3329 an empty value use an empty string '' as the value. | |
| 3330 Use this in templates to conditionally | |
| 3331 include an arg if it is set to a value. E.G. | |
| 3332 {..., '@queryname': request.dispname or None, ...} | |
| 3333 will include @queryname in the url if there is a | |
| 3334 dispname otherwise the parameter will be omitted | |
| 3335 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
|
3336 """ |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
3337 q = urllib_.quote |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3338 sc = self.special_char |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3339 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
|
3340 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
|
3341 # 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
|
3342 specials = {} |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3343 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
|
3344 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
|
3345 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
|
3346 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3347 # 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
|
3348 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
|
3349 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
|
3350 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
|
3351 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3352 for direction, attr in self.sort: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3353 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3354 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3355 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3356 val.append(attr) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3357 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
|
3358 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
|
3359 val = [] |
|
7775
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3360 for direction, attr in self.group: |
|
b8e63e65d9a8
chore: replace use of dir with template_dir.
John Rouillard <rouilj@ieee.org>
parents:
7758
diff
changeset
|
3361 if direction == '-': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3362 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3363 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3364 val.append(attr) |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3365 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
|
3366 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
|
3367 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
|
3368 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
|
3369 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
|
3370 if 'pagesize' not in specials: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3371 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
|
3372 if 'startwith' 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+'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
|
3374 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3375 # 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
|
3376 if self.classname and self.filterspec: |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3377 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3378 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
|
3379 if k not in args: |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3380 if isinstance(v, list): |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3381 prop = cls.get_transitive_prop(k) |
|
3909
e89bcb28f683
indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3905
diff
changeset
|
3382 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
|
3383 l.append('%s=%s' % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3384 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
|
3385 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3386 l.append('%s=%s' % ( |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3387 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
|
3388 else: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3389 l.append('%s=%s' % (k, q(v))) |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3390 return '%s?%s' % (url, '&'.join(l)) |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3391 indexargs_href = indexargs_url |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3392 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3393 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
|
3394 return """ |
|
5217
17b213eab274
Add nonce to embedded script references.
John Rouillard <rouilj@ieee.org>
parents:
5211
diff
changeset
|
3395 <script nonce="%s" type="text/javascript"> |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3396 submitted = false; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3397 function submit_once() { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3398 if (submitted) { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3399 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
|
3400 return false; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3401 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3402 submitted = true; |
|
5172
fac171f0f27b
Fix submit_once Javascript function
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5166
diff
changeset
|
3403 return true; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3404 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3405 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3406 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
|
3407 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
|
3408 HelpWin.focus () |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3409 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3410 </script> |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3411 """ % (self._client.client_nonce, self.base) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3412 |
|
4524
68bbefb72825
Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4483
diff
changeset
|
3413 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
|
3414 """ 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
|
3415 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3416 check = self._client.db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3417 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3418 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3419 return Batch(self.client, [], self.pagesize, self.startwith, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3420 classname=self.classname) |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3421 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3422 filterspec = self.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3423 sort = self.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3424 group = self.group |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3425 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3426 # get the list of ids we're batching over |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3427 klass = self.client.db.getclass(self.classname) |
| 1002 | 3428 if self.search_text: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3429 indexer = self.client.db.indexer |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3430 if indexer.query_language: |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3431 try: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3432 matches = indexer.search( |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3433 [self.search_text], klass) |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3434 except Exception as e: |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3435 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
|
3436 raise |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3437 else: |
|
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 [u2s(w.upper()) for w in re.findall( |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3440 r'(?u)\b\w{%s,%s}\b' % (indexer.minlength, |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3441 indexer.maxlength), |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3442 s2u(self.search_text, "replace") |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3443 )], klass) |
| 1002 | 3444 else: |
| 3445 matches = None | |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3446 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3447 # filter for visibility |
|
7777
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3448 allowed = [itemid for itemid in klass.filter(matches, filterspec, |
|
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3449 sort, group) |
|
173cc61d7474
chore: replace id with itemid
John Rouillard <rouilj@ieee.org>
parents:
7776
diff
changeset
|
3450 if check(permission, userid, self.classname, itemid=itemid)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3451 |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3452 # return the batch object, using IDs only |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3453 return Batch(self.client, allowed, self.pagesize, self.startwith, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3454 classname=self.classname) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3455 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3456 |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3457 # 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
|
3458 # Acquisition and add a couple of useful methods |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3459 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
|
3460 """ 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
|
3461 series of batches. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3462 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3463 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3464 Parameter Usage |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3465 ========= ======================================================== |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3466 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
|
3467 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
|
3468 size how big to make the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3469 start where to start (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3470 end where to end (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3471 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
|
3472 value, then it is combined with this batch |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3473 overlap the number of items shared between adjacent batches |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3474 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3475 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3476 Attributes: Note that the "start" attribute, unlike the |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3477 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
|
3478 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
|
3479 the batch. |
|
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 "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
|
3482 """ |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3483 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
|
3484 overlap=0, classname=None): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3485 self.client = client |
| 1002 | 3486 self.last_index = self.last_item = None |
| 3487 self.current_item = None | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3488 self.classname = classname |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3489 self.sequence_length = len(sequence) |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3490 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
|
3491 overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3492 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3493 # overwrite so we can late-instantiate the HTMLItem instance |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3494 def __getitem__(self, index): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3495 if index < 0: |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3496 if index + self.end < self.first: |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3497 raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3498 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
|
3499 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3500 if index >= self.length: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3501 raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3502 |
| 1002 | 3503 # move the last_item along - but only if the fetched index changes |
| 3504 # (for some reason, index 0 is fetched twice) | |
| 3505 if index != self.last_index: | |
| 3506 self.last_item = self.current_item | |
| 3507 self.last_index = index | |
| 3508 | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3509 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
|
3510 if self.classname: |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3511 # 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
|
3512 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
|
3513 self.current_item = item |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3514 return item |
| 1002 | 3515 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3516 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
|
3517 """ 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
|
3518 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
|
3519 """ |
|
3369
18f1631c9b85
sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents:
3363
diff
changeset
|
3520 # 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
|
3521 # 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
|
3522 if self.last_item is None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3523 return 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3524 for property in properties: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3525 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
|
3526 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
|
3527 if (str(self.last_item[property]) != |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3528 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
|
3529 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
|
3530 else: |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3531 if (self.last_item[property]._value != |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3532 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
|
3533 return 1 |
| 1002 | 3534 return 0 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3535 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3536 # override these 'cos we don't have access to acquisition |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3537 def previous(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3538 if self.start == 1: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3539 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3540 return Batch(self.client, self._sequence, self.size, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3541 self.first - self._size + self.overlap, 0, self.orphan, |
|
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3542 self.overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3543 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3544 def next(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3545 try: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3546 self._sequence[self.end] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3547 except IndexError: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3548 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3549 return Batch(self.client, self._sequence, self.size, |
|
7037
22183e7d1443
flake8 whitepace, indents, var names
John Rouillard <rouilj@ieee.org>
parents:
7036
diff
changeset
|
3550 self.end - self.overlap, 0, self.orphan, self.overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3551 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3552 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3553 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
|
3554 """ 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
|
3555 """ |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3556 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
|
3557 self.client = client |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3558 self._ = self.client._ |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3559 |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3560 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
|
3561 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
|
3562 overlap) |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3563 |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
3564 def anti_csrf_nonce(self, lifetime=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
3565 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
|
3566 |
|
5973
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3567 def timestamp(self): |
|
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3568 return pack_timestamp() |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
3569 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3570 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
|
3571 """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
|
3572 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3573 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3574 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
|
3575 """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
|
3576 return html_escape(html) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3577 |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3578 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
|
3579 """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
|
3580 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
|
3581 # backwards-compatibility |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3582 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
|
3583 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
|
3584 raise AttributeError(name) |
|
3006
50b0f8e98247
fix API for templating utils extensions - remove "utils" arg
Richard Jones <richard@users.sourceforge.net>
parents:
2994
diff
changeset
|
3585 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
|
3586 |
|
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
|
3587 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
|
3588 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
|
3589 |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3590 def html_calendar(self, request): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3591 """Generate a HTML calendar. |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3592 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3593 `request` the roundup.request object |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3594 - @template : name of the template |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3595 - 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
|
3596 - 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
|
3597 back the date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3598 - date : current date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3599 - 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
|
3600 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3601 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
|
3602 """ |
| 4333 | 3603 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
|
3604 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
|
3605 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
|
3606 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
|
3607 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
|
3608 form = request.form.getfirst("form") |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3609 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
|
3610 curr_date = "" |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3611 try: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3612 # 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
|
3613 # 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
|
3614 # 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
|
3615 # and assign them to today. |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3616 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
|
3617 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
|
3618 except ValueError: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3619 # 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
|
3620 # 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
|
3621 curr_date = current_date |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3622 display = current_date |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3623 day = display.day |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3624 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3625 # 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
|
3626 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
|
3627 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
|
3628 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
|
3629 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
|
3630 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
|
3631 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
|
3632 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
|
3633 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
|
3634 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
|
3635 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
|
3636 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
|
3637 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
|
3638 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
|
3639 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
|
3640 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
|
3641 date_next_year = None |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3642 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3643 res = [] |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3644 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3645 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
|
3646 (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
|
3647 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3648 # navigation |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3649 # month |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3650 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
|
3651 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
|
3652 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
|
3653 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
|
3654 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
|
3655 % (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
|
3656 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
|
3657 res.append(' <td></td>') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3658 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
|
3659 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
|
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_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
|
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>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3664 # spacer |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3665 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
|
3666 # 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
|
3667 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
|
3668 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
|
3669 % (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
|
3670 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
|
3671 res.append(' <td></td>') |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3672 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
|
3673 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
|
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_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
|
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>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3678 res.append(' </tr></table>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3679 res.append(' </td></tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3680 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3681 # the calendar |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3682 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
|
3683 res.append(' <tr class="weekdays">') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3684 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
|
3685 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
|
3686 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3687 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
|
3688 res.append(' <tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3689 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
|
3690 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
|
3691 "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
|
3692 "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
|
3693 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
|
3694 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
|
3695 # highlight |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3696 style = "today" |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3697 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3698 style = "" |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3699 if day: |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3700 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
|
3701 style, link, day)) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3702 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3703 res.append(' <td></td>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3704 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3705 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
|
3706 return "\n".join(res) |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3707 |
|
7836
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3708 def readfile(self, name, optional=False): |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3709 """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
|
3710 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3711 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
|
3712 is not found in the template directory and |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3713 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
|
3714 NoTemplate exception. If optional=True it returns an |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3715 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
|
3716 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3717 Useful for inlining JavaScript kept in an external |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3718 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
|
3719 tools on it. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3720 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3721 A TAL example: |
|
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 <script tal:attributes="nonce request/client/client_nonce" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3724 tal:content="python:utils.readfile('mylibrary.js')"></script> |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3725 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3726 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
|
3727 See expandfile() for replacing tokens in the file. |
|
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 file_result = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3730 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3731 if file_result is None: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3732 if optional: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3733 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3734 template_name = self.client.selectTemplate( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3735 self.client.classname, self.client.template) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3736 raise NoTemplate(self._( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3737 "Unable to read or expand file '%(name)s' " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3738 "in template '%(template)s'.") % { |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3739 "name": name, 'template': template_name}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3740 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3741 fullpath, name = file_result |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3742 with open(fullpath) as f: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3743 contents = f.read() |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3744 return contents |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3745 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3746 def expandfile(self, name, values=None, optional=False): |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3747 """Read a file and replace token placeholders. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3748 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3749 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
|
3750 replacements, read the file from the tracker template |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3751 directory. Then replace all tokens of the form |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3752 '%(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
|
3753 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
|
3754 readfile(). In addition to values passed into the |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3755 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
|
3756 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
|
3757 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
|
3758 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
|
3759 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
|
3760 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
|
3761 """ |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3762 # readfile() raises NoTemplate if optional = false and |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3763 # 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
|
3764 # found and optional = true. File contents otherwise. |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3765 contents = self.readfile(name, optional=optional) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3766 |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3767 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
|
3768 return contents |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3769 tokens = {'base': self.client.db.config.TRACKER_WEB, |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3770 'client_nonce': self.client.client_nonce} |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3771 tokens.update(values) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3772 try: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3773 return contents % tokens |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3774 except KeyError as e: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3775 template_name = self.client.selectTemplate( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3776 self.client.classname, self.client.template) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3777 fullpath, name = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3778 logger.error( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3779 "When running expandfile('%(fullpath)s') in " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3780 "'%(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
|
3781 {'fullpath': fullpath, 'token': e.args[0], |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3782 'template': template_name}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3783 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3784 except ValueError as e: |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3785 fullpath, name = self.client.instance.templates._find(name) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3786 logger.error(self._( |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3787 "Found an incorrect token when expandfile applied " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3788 "string subsitution on '%(fullpath)s'. " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3789 "ValueError('%(issue)s') was raised. Check the format " |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3790 "of your named conversion specifiers."), |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3791 {'fullpath': fullpath, 'issue': e.args[0]}) |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3792 return "" |
|
219fc5804345
issue2551270 - Better templating support for JavaScript
John Rouillard <rouilj@ieee.org>
parents:
7777
diff
changeset
|
3793 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3794 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
3795 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
|
3796 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
|
3797 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
|
3798 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
|
3799 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
|
3800 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3801 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
|
3802 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3803 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
|
3804 # 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
|
3805 # 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
|
3806 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3807 # 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
|
3808 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3809 # 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
|
3810 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
|
3811 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
|
3812 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3813 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
|
3814 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
|
3815 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
3816 __nonzero__ = __bool__ |
|
5457
a35d4cc8cd1a
fix MissingValue / MockNull to return False on __bool__ and add a
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5448
diff
changeset
|
3817 def __contains__(self, key): return False |
|
5461
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3818 def __eq__(self, rhs): return False |
|
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3819 def __ne__(self, rhs): return False |
|
7035
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3820 def __str__(self): return '[%s]' % self.__description |
|
edaf7086cb2e
flake8 E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7034
diff
changeset
|
3821 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
|
3822 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
|
3823 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3824 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
|
3825 _ = gettext |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3826 |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
3827 # vim: set et sts=4 sw=4 : |
