Mercurial > p > roundup > code
annotate roundup/cgi/templating.py @ 7034:036267634a89
flake8 fix E228 missing whitespace around modulo operator
about 1/2 of them in this commit. Also rewraped some tuples where
needed to keep line legth under 80.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 10 Oct 2022 14:35:50 -0400 |
| parents | f529cca242dc |
| children | edaf7086cb2e |
| 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 cgi |
| 24 import csv | |
| 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 |
|
3188
7faae85e1e33
merge from branch
Richard Jones <richard@users.sourceforge.net>
parents:
3183
diff
changeset
|
29 from roundup import hyperdb, date, support |
| 7032 | 30 from roundup.anypy import urllib_ |
| 31 from roundup.anypy.html import html_escape | |
| 32 from roundup.anypy.strings import is_us, us2s, s2u, u2s, StringIO | |
| 33 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
|
34 from roundup.cgi.timestamp import pack_timestamp |
| 7032 | 35 from roundup.exceptions import RoundupException |
| 36 from .KeywordsExpr import render_keywords_expression_editor | |
| 37 | |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
38 try: |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
39 from StructuredText.StructuredText import HTML as StructuredText |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 except ImportError: |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
41 try: # older version |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
42 import StructuredText |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
43 except ImportError: |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
44 StructuredText = None |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
45 try: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
46 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
|
47 except ImportError: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
48 ReStructuredText = None |
|
5399
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
49 try: |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
50 from itertools import zip_longest |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
51 except ImportError: |
|
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
52 from itertools import izip_longest as zip_longest |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 |
| 7032 | 54 |
| 55 # List of schemes that are not rendered as links in rst and markdown. | |
| 56 _disable_url_schemes = ['javascript', 'data'] | |
| 6125 | 57 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
58 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
59 def _import_markdown2(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
60 try: |
| 7032 | 61 import markdown2 |
| 62 import re | |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
63 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
64 class Markdown(markdown2.Markdown): |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
65 # don't allow disabled protocols in links |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
66 _safe_protocols = re.compile('(?!' + ':|'.join([ |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
67 re.escape(s) for s in _disable_url_schemes]) |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
68 + ':)', re.IGNORECASE) |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
69 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
70 def _extras(config): |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
71 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
|
72 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
73 extras['break-on-newline'] = True |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
74 return extras |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
75 |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
76 markdown = lambda s, c: Markdown(safe_mode='escape', extras=_extras(c)).convert(s) |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
77 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
78 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
79 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
80 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
81 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
82 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
83 def _import_markdown(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
84 try: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
85 from markdown import markdown as markdown_impl |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
86 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
|
87 from markdown.treeprocessors import Treeprocessor |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
88 |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
89 class RestrictLinksProcessor(Treeprocessor): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
90 def run(self, root): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
91 for el in root.iter('a'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
92 if 'href' in el.attrib: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
93 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
|
94 for s in _disable_url_schemes: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
95 if url.startswith(s + ':'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
96 el.attrib['href'] = '#' |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
97 |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
98 class LinkRendererWithRel(Treeprocessor): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
99 ''' 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
|
100 for links. ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
101 rel_value = "nofollow noopener" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
102 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
103 def run(self, root): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
104 for el in root.iter('a'): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
105 if 'href' in el.attrib: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
106 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
|
107 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
|
108 continue |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
109 el.set('rel', self.rel_value) |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
110 |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
111 # 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
|
112 # 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
|
113 class SafeHtml(MarkdownExtension): |
|
6100
d4ce26b14cf5
backward compatibility with older Markdown modules that pass globals arg
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6099
diff
changeset
|
114 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
|
115 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
|
116 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
|
117 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
|
118 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
|
119 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
|
120 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
|
121 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
|
122 del md.inlinePatterns['html'] |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
123 |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
124 if hasattr(md.preprocessors, 'register'): |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
125 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
|
126 else: |
|
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
127 md.treeprocessors['restrict_links'] = RestrictLinksProcessor() |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
128 if hasattr(md.preprocessors, 'register'): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
129 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
|
130 else: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
131 md.treeprocessors['add_link_rel'] = LinkRendererWithRel() |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
132 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
133 def _extensions(config): |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
134 extensions = [SafeHtml(), 'fenced_code'] |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
135 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
136 extensions.append('nl2br') |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
137 return extensions |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
138 |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
139 markdown = lambda s, c: markdown_impl(s, extensions=_extensions(c)) |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
140 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
141 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
142 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
143 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
144 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
145 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
146 def _import_mistune(): |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
147 try: |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
148 import mistune |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
149 from mistune import Renderer, escape_link, escape |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
150 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
151 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
|
152 |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
153 class LinkRendererWithRel(Renderer): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
154 ''' 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
|
155 for links. ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
156 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
157 rel_value = "nofollow noopener" |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
158 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
159 def autolink(self, link, is_email=False): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
160 ''' handle <url or email> style explicit links ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
161 text = link = escape_link(link) |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
162 if is_email: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
163 link = 'mailto:%s' % link |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
164 return '<a href="%(href)s">%(text)s</a>' % { |
|
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
165 'href': link, 'text': text} |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
166 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
|
167 '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
|
168 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
169 def link(self, link, title, content): |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
170 ''' 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
|
171 links ''' |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
172 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
173 values = { |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
174 'content': escape(content), |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
175 'href': escape_link(link), |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
176 'rel': self.rel_value, |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
177 'title': escape(title) if title else '', |
|
6282
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
178 } |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
179 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
180 if title: |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
181 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
|
182 'title="%(title)s">%(content)s</a>' % values |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
183 |
|
d30501bafdfb
issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents:
6280
diff
changeset
|
184 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
|
185 |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
186 def _options(config): |
|
7029
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
187 options = {'renderer': LinkRendererWithRel(escape=True)} |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
188 if config['MARKDOWN_BREAK_ON_NEWLINE']: |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
189 options['hard_wrap'] = True |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
190 return options |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
191 |
|
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
192 markdown = lambda s, c: mistune.markdown(s, **_options(c)) |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
193 except ImportError: |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
194 markdown = None |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
195 |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
196 return markdown |
|
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
197 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
198 |
|
6099
55c56ceacb8e
escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6098
diff
changeset
|
199 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
|
200 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
201 |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
202 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
|
203 ''' 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
|
204 |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
205 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
|
206 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
|
207 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
|
208 module/function. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
209 ''' |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
210 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
|
211 key = otks.getUniqueKey() |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
212 # lifetime is in minutes. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
213 if lifetime is None: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
214 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
|
215 |
|
6814
3f60a71b0812
Summary: Support selecion session/otk data store. Add redis as data store.
John Rouillard <rouilj@ieee.org>
parents:
6706
diff
changeset
|
216 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
|
217 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
|
218 sid=client.session_api._sid, |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
219 __timestamp=ts) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5264
diff
changeset
|
220 otks.commit() |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
221 return key |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
222 |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
223 # templating |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
224 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
225 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6104
diff
changeset
|
226 class NoTemplate(RoundupException): |
|
1068
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
227 pass |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
228 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
229 |
|
6123
c177e7128dc9
issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents:
6104
diff
changeset
|
230 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
|
231 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
|
232 self.action = action |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
233 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
|
234 if translator: |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
235 self._ = translator.gettext |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
236 else: |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
237 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
|
238 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
239 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
|
240 return self._('You are not allowed to %(action)s ' |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
241 'items of class %(class)s') % { |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
242 '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
|
243 |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
244 |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
245 # --- Template Loader API |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
246 |
|
4719
05fe39f1d823
API break, bumping version to 1.15.0, renamed TemplatesBase to
anatoly techtonik <techtonik@gmail.com>
parents:
4696
diff
changeset
|
247 class LoaderBase: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
248 """ Base for engine-specific template Loader class.""" |
|
4743
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
249 def __init__(self, dir): |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
250 # 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
|
251 pass |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
252 |
|
4748
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4747
diff
changeset
|
253 def precompile(self): |
|
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4747
diff
changeset
|
254 """ 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
|
255 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
|
256 """ |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
257 pass |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
258 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
259 def load(self, tplname): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
260 """ 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
|
261 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
262 "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
|
263 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
|
264 format. |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
265 """ |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
266 raise NotImplementedError |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
267 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
268 def check(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
269 """ 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
|
270 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
|
271 """ |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
272 raise NotImplementedError |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
273 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
274 |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
275 class TALLoaderBase(LoaderBase): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
276 """ 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
|
277 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
278 def __init__(self, dir): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
279 self.dir = dir |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
280 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
281 def _find(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
282 """ 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
|
283 template if it is found, None otherwise.""" |
|
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
|
284 realsrc = os.path.realpath(self.dir) |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
285 for extension in ['', '.html', '.xml']: |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
286 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
|
287 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
|
288 realpath = os.path.realpath(src) |
|
5423
58057ea53779
Python 3 preparation: avoid string.find.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
289 if not realpath.startswith(realsrc): |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
290 return # will raise invalid template |
|
4749
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
291 if os.path.exists(src): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
292 return (src, f) |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
293 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
294 def check(self, name): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
295 return bool(self._find(name)) |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
296 |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
297 def precompile(self): |
|
0421390b3094
templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents:
4748
diff
changeset
|
298 """ Precompile templates in load directory by loading them """ |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
299 for filename in os.listdir(self.dir): |
|
2854
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
300 # skip subdirs |
|
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
301 if os.path.isdir(filename): |
|
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
302 continue |
| 2961 | 303 |
|
2959
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
304 # 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
|
305 for extension in '.html', '.xml': |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
306 if filename.endswith(extension): |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
307 break |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
308 else: |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
309 continue |
|
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
310 |
| 2961 | 311 # remove extension |
|
2959
fa5410ae581d
allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents:
2956
diff
changeset
|
312 filename = filename[:-len(extension)] |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
313 self.load(filename) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
314 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
315 def __getitem__(self, name): |
|
4724
98b727b6f7f8
Self-focument API in templating.py loader class
anatoly techtonik <techtonik@gmail.com>
parents:
4721
diff
changeset
|
316 """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
|
317 try: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
318 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
|
319 except NoTemplate as message: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
320 raise KeyError(message) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
321 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
322 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
323 class MultiLoader(LoaderBase): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
324 def __init__(self): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
325 self.loaders = [] |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
326 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
327 def add_loader(self, loader): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
328 self.loaders.append(loader) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
329 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
330 def check(self, name): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
331 for l in self.loaders: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
332 if l.check(name): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
333 return True |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
334 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
335 def load(self, name): |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
336 for l in self.loaders: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
337 if l.check(name): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
338 return l.load(name) |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
339 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
340 def __getitem__(self, name): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
341 """Needed for TAL templates compatibility""" |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
342 # [ ] document root and helper templates |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
343 try: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
344 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
|
345 except NoTemplate as message: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
346 raise KeyError(message) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
347 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
348 |
|
4743
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
349 class TemplateBase: |
|
2d6959f1d2df
templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents:
4742
diff
changeset
|
350 content_type = 'text/html' |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
351 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
352 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
353 def get_loader(dir, template_engine): |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
354 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
355 # 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
|
356 # 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
|
357 # use the second |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
358 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
359 engines = template_engine.split(',') |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
360 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
|
361 ml = MultiLoader() |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
362 |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
363 for engine_name in engines: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
364 if engine_name == 'chameleon': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
365 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
|
366 elif engine_name == 'jinja2': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
367 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
|
368 elif engine_name == 'zopetal': |
|
5388
d26921b851c3
Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
369 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
|
370 else: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
371 raise Exception('Unknown template engine "%s"' % engine_name) |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
372 ml.add_loader(Loader(dir)) |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
373 |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
374 if len(engines) == 1: |
|
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
375 return ml.loaders[0] |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
376 else: |
|
4750
12b029655c05
Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents:
4749
diff
changeset
|
377 return ml |
|
4587
a2eb4fb3e6d8
New Chameleon templating engine, engine is now configurable.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4584
diff
changeset
|
378 |
|
4747
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
379 # --/ Template Loader API |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
380 |
|
955860a18e12
templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents:
4743
diff
changeset
|
381 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
382 def context(client, template=None, classname=None, request=None): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
383 """Return the rendering context dictionary |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
384 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
385 The dictionary includes following symbols: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
386 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
387 *context* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
388 this is one of three things: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
389 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
390 1. None - we're viewing a "home" page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
391 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
|
392 instance. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
393 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
|
394 item, as an HTMLItem instance. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
395 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
396 *request* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
397 Includes information about the current request, including: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
398 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
399 - the url |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
400 - 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
|
401 ``properties``, etc) parsed out of the form. |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
402 - methods for easy filterspec link generation |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
403 - *user*, the current user node as an HTMLItem instance |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
404 - *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
|
405 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
406 *config* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
407 The current tracker config. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
408 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
409 *db* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
410 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
|
411 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
412 *utils* |
|
4584
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
413 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
|
414 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
|
415 TemplatingUtils class in this file. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
416 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
417 *templates* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
418 Access to all the tracker templates by name. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
419 Used mainly in *use-macro* commands. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
420 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
421 *template* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
422 Current rendering template. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
423 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
424 *true* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
425 Logical True value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
426 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
427 *false* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
428 Logical False value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
429 |
|
2562
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
430 *i18n* |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
431 Internationalization service, providing string translation |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
432 methods ``gettext`` and ``ngettext``. |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
433 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
434 """ |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
435 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
436 # 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
|
437 # compute form client |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
438 if template is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
439 template = client.template |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
440 if classname is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
441 classname = client.classname |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
442 if request is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
443 request = HTMLRequest(client) |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1263
diff
changeset
|
444 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
445 c = { |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
446 'context': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
447 'options': {}, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
448 'nothing': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
449 'request': request, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
450 'db': HTMLDatabase(client), |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
451 'config': client.instance.config, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
452 'tracker': client.instance, |
|
4584
760483ce731e
Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4577
diff
changeset
|
453 'utils': client.instance.TemplatingUtils(client), |
|
2854
6acc315570eb
Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2827
diff
changeset
|
454 'templates': client.instance.templates, |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
455 'template': template, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
456 'true': 1, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
457 'false': 0, |
|
2538
09b0fc5b1716
make client.translator available to templates as 'i18n'
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2524
diff
changeset
|
458 'i18n': client.translator |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
459 } |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
460 # add in the item if there is one |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
461 if client.nodeid: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
462 c['context'] = HTMLItem(client, classname, client.nodeid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
463 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
|
464 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
|
465 c['context'] = HTMLClass(client, classname, anonymous=1) |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
466 return c |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
467 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
468 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 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
|
470 """ 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
|
471 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
472 def __init__(self, client): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
473 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
|
474 self._ = client._ |
|
1513
455f79a2981f
add access to real db through HTML db
Richard Jones <richard@users.sourceforge.net>
parents:
1510
diff
changeset
|
475 self._db = client.db |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
476 |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
477 # we want config to be exposed |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 self.config = client.db.config |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
479 |
|
4055
de832c486f86
Fix designator regular expression in HTMLDatabase.__getitem__.
Stefan Seefeld <stefan@seefeld.name>
parents:
4054
diff
changeset
|
480 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
|
481 # 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
|
482 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
|
483 if m: |
|
2157
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
484 cl = m.group('cl') |
|
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
485 self._client.db.getclass(cl) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
486 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
|
487 else: |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
488 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
|
489 return HTMLClass(self._client, item) |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
490 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
491 def __getattr__(self, attr): |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
492 try: |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
493 return self[attr] |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
494 except KeyError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
495 raise AttributeError(attr) |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
496 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
497 def classes(self): |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
498 l = 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
|
499 m = [] |
|
2031
bcb21e5722b8
fix permission handling around rego
Richard Jones <richard@users.sourceforge.net>
parents:
2025
diff
changeset
|
500 for item in l: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
501 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
|
502 return m |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
503 |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
504 |
| 5809 | 505 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
|
506 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
507 |
|
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
|
508 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
|
509 """ "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
|
510 (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
|
511 "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
|
512 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
|
513 """ |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
514 cl = db.getclass(prop.classname) |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
515 l = [] |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
516 for entry in ids: |
|
5927
a2a7860502fa
Fix lookupIds for try_id_parsing off
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5907
diff
changeset
|
517 # 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
|
518 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
|
519 l.append(entry) |
|
716d50585c8d
Fix Link/Multilink searching
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5837
diff
changeset
|
520 continue |
|
3861
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
521 if do_lookup: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
522 try: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
523 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
|
524 except (TypeError, KeyError): |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
525 pass |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
526 else: |
|
d4ac8954ce5c
Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3860
diff
changeset
|
527 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
|
528 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
|
529 # 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
|
530 # 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
|
531 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
|
532 l.append(entry) |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
533 return l |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
534 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
535 |
|
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
|
536 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
|
537 """ 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
|
538 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
|
539 """ |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
540 l = [] |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
541 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
|
542 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
|
543 try: |
|
5193
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
544 label = linkcl.get(entry, key) |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
545 except IndexError: |
|
cfd6d1f2caa1
Fix incorrect indentation using tabs
John Kristensen <john@jerrykan.com>
parents:
5192
diff
changeset
|
546 # 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
|
547 label = entry |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
548 # fall back to designator if label is None |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
549 if label is None: label = '%s%s' % (linkcl.classname, entry) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
550 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
|
551 else: |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
552 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
|
553 return l |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
554 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
555 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
556 def _set_input_default_args(dic): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
557 # 'text' is the default value anyway -- |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
558 # 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
|
559 dic.setdefault('type', 'text') |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
560 # 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
|
561 if 'id' not in dic: |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
562 try: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
563 if dic['text'] in ('radio', 'checkbox'): |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
564 dic['id'] = '%(name)s-%(value)s' % dic |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
565 else: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
566 dic['id'] = dic['name'] |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
567 except KeyError: |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
568 pass |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
569 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
570 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
571 def html4_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
572 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
573 are represented without a value. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
574 <input required ..> not <input required="required" ...> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
575 The latter is xhtml. Recognize booleans by: |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
576 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
577 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
|
578 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
579 return ' '.join(['%s="%s"' % (k, html_escape(str(v), True)) |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
580 if v is not None else '%s' % (k) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
581 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
|
582 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
583 |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
584 def xhtml_cgi_escape_attrs(**attrs): |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
585 ''' Boolean attributes like 'disabled', 'required' |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
586 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
|
587 the attribute name.. E.G. |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
588 <input required="required" ...> not <input required ..> |
|
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
589 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
|
590 value is None |
|
6058
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
591 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
|
592 ''' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
593 return ' '.join(['%s="%s"' % (k, html_escape(str(v), True)) |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
594 if v is not None else '%s="%s"' % (k, k) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
595 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
|
596 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
597 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
598 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
|
599 """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
|
600 _set_input_default_args(attrs) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
601 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
|
602 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
603 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
604 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
|
605 """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
|
606 _set_input_default_args(attrs) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
607 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
|
608 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
609 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
610 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
|
611 """ 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
|
612 def __init__(self): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
613 html_version = 'html4' |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
614 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
|
615 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
|
616 if html_version == 'xhtml': |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
617 self.input = input_xhtml |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
618 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
|
619 else: |
|
8fbcaac944e7
Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents:
6057
diff
changeset
|
620 self.input = input_html4 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
621 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
|
622 # 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
|
623 # 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
|
624 self._context = None |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
625 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
626 def gettext(self, msgid): |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
627 """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
|
628 if self._context is None: |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
629 self._context = context(self._client) |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
630 return self._client.translator.translate(domain="roundup", |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
631 msgid=msgid, context=self._context) |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
632 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
633 _ = gettext |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
634 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
635 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
636 class HTMLPermissions(object): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
637 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
638 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
|
639 """ 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
|
640 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
|
641 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
642 if not self.is_view_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
643 raise Unauthorised("view", self._classname, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
644 translator=self._client.translator) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
645 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
646 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
|
647 """ 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
|
648 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
|
649 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
650 if not self.is_edit_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
651 raise Unauthorised("edit", self._classname, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
652 translator=self._client.translator) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
653 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
654 def retire_check(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
655 """ 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
|
656 retire items of this class. |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
657 """ |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
658 if not self.is_retire_ok(): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
659 raise Unauthorised("retire", self._classname, |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
660 translator=self._client.translator) |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
661 |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
662 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
663 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
|
664 """ 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
|
665 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
666 def __init__(self, client, classname, anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
667 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
|
668 self._ = client._ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
669 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
|
670 self._anonymous = anonymous |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
671 |
|
1136
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
672 # 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
|
673 # consistent API for extending Class/Item |
|
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
674 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
|
675 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
|
676 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
677 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
678 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
|
679 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
680 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
|
681 """ 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
|
682 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
683 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
684 return perm('Web Access', self._client.userid) and perm('Create', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
685 self._client.userid, self._classname) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
686 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
687 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
688 """ 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
|
689 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
690 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
691 return perm('Web Access', self._client.userid) and perm('Retire', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
692 self._client.userid, self._classname) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
693 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
694 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
695 """ 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
|
696 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
697 perm = self._db.security.hasPermission |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
698 return perm('Web Access', self._client.userid) and perm('Restore', |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
699 self._client.userid, self._classname) |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
700 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
701 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
|
702 """ 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
|
703 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
704 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
705 return perm('Web Access', self._client.userid) and perm('View', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
706 self._client.userid, self._classname) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
707 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
708 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
|
709 """ 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
|
710 """ |
|
2651
17bab083c8a0
Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
711 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
|
712 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
713 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
714 return '<HTMLClass(0x%x) %s>' % (id(self), self.classname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
715 |
| 1002 | 716 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
|
717 """ 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
|
718 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
719 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
720 # we don't exist |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
721 if item == 'id': |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
722 return None |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
723 |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
724 # get the property |
|
2056
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
725 try: |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
726 prop = self._props[item] |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
727 except KeyError: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
728 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
|
729 self.classname)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
730 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
731 # look up the correct HTMLProperty class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
732 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
|
733 if not isinstance(prop, klass): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
734 continue |
|
3779
ee73abcc95d2
Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents:
3770
diff
changeset
|
735 return htmlklass(self._client, self._classname, None, prop, item, |
|
6404
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
736 None, self._anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
737 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
738 # no good |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
739 raise KeyError(item) |
| 1002 | 740 |
| 741 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
|
742 """ convenience access """ |
| 1002 | 743 try: |
| 744 return self[attr] | |
| 745 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
746 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
747 |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
748 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
|
749 """ 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
|
750 return self._classname |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
751 |
|
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
|
752 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
|
753 """ 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
|
754 """ |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
755 # 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
|
756 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
|
757 itemid = self._klass.lookup(itemid) |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
758 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
759 return HTMLItem(self._client, self.classname, itemid) |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
760 |
|
5222
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
761 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
|
762 """ 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
|
763 |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
764 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
|
765 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
|
766 search. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
767 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
768 l = [] |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
769 canSearch = self._db.security.hasSearchPermission |
|
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
770 userid = self._client.userid |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
771 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
|
772 if cansearch and \ |
|
9bf221cebef3
Make properties method return only properties the user can search.
John Rouillard <rouilj@ieee.org>
parents:
5221
diff
changeset
|
773 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
|
774 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
775 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
776 if isinstance(prop, klass): |
|
4481
9bbf3758c16a
Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents:
4466
diff
changeset
|
777 value = prop.get_default_value() |
|
1450
7a9db3f9022a
... and a classname
Richard Jones <richard@users.sourceforge.net>
parents:
1449
diff
changeset
|
778 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
|
779 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
|
780 if sort: |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
781 l.sort(key=lambda a: a._name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
782 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
783 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
784 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
|
785 """ 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
|
786 """ |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
787 # get the list and sort it nicely |
|
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
788 l = self._klass.list() |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
789 keyfunc = make_key_function(self._db, self._classname, sort_on) |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
790 l.sort(key=keyfunc) |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
791 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
792 # check perms |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
793 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
|
794 userid = self._client.userid |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
795 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
796 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
797 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
798 l = [HTMLItem(self._client, self._classname, id) for id in l |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
799 if check('View', userid, self._classname, itemid=id)] |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
800 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
801 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
802 |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
803 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
|
804 """ 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
|
805 """ |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
806 props = self.propnames() |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5416
diff
changeset
|
807 s = StringIO() |
|
3179
88dbe6b3d891
merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents:
3169
diff
changeset
|
808 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
|
809 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
|
810 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
|
811 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
812 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
813 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
814 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
|
815 l = [] |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
816 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
|
817 # 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
|
818 if not check('View', userid, itemid=nodeid, |
|
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
|
819 classname=self._klass.classname, property=name): |
|
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
|
820 raise Unauthorised('view', self._klass.classname, |
|
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
|
821 translator=self._client.translator) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
822 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
|
823 if value is None: |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
824 l.append('') |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
825 elif isinstance(value, type([])): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
826 l.append(':'.join(map(str, value))) |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
827 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
828 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
|
829 writer.writerow(l) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
830 return s.getvalue() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
831 |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
832 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
|
833 """ 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
|
834 """ |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
835 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
|
836 return ['id'] + idlessprops |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
837 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
838 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
|
839 """ 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
|
840 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
|
841 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
842 "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
|
843 """ |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
844 security = self._db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
845 userid = self._client.userid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
846 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
|
847 # 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
|
848 # security-filtered |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
849 filterspec = request.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
850 sort = request.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
851 group = request.group |
|
4437
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
852 else: |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
853 cn = self.classname |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
854 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
|
855 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
|
856 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
|
857 |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
858 check = security.hasPermission |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
859 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
860 return [] |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
861 |
|
3198
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
862 l = [HTMLItem(self._client, self.classname, id) |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
863 for id in self._klass.filter(None, filterspec, sort, group) |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
864 if check('View', userid, self.classname, itemid=id)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
865 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
866 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
867 def classhelp(self, properties=None, label=''"(list)", width='500', |
|
4945
55aef7ab35a8
Increase default height of classhelp windows from 400 to 600.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4928
diff
changeset
|
868 height='600', property='', form='itemSynopsis', |
|
4783
365deccf7347
issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents:
4750
diff
changeset
|
869 pagesize=50, inputtype="checkbox", html_kwargs={}, |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
870 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
|
871 """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
|
872 |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
873 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
|
874 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
|
875 "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
|
876 (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
|
877 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
|
878 activity). |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
879 |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
880 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
|
881 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
|
882 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
|
883 properties). |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
884 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
885 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
|
886 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
|
887 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
|
888 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
889 The popup window will be resizable and scrollable. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
890 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
891 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
|
892 javascript help_window function. |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
893 |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
894 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
|
895 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
|
896 |
|
2827
43e3a7ac1190
fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2761
diff
changeset
|
897 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
|
898 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
|
899 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
|
900 """ |
|
1113
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
901 if properties is None: |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5388
diff
changeset
|
902 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
|
903 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
|
904 if sort is None: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
905 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
|
906 sort = 'username' |
|
3363
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
907 else: |
| 4032 | 908 sort = self._klass.orderprop() |
|
3610
1dbaa664be28
sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents:
3594
diff
changeset
|
909 sort = '&@sort=' + sort |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
910 if group: |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
911 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
|
912 if property: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
913 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
|
914 if form: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
915 form = '&form=%s' % form |
|
3472
522b11d5ba8d
classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents:
3470
diff
changeset
|
916 if inputtype: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
917 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
|
918 if filter: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
919 filterprops = filter.split(';') |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
920 filtervalues = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
921 names = [] |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
922 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
|
923 (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
|
924 names.append(name) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
925 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
|
926 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
|
927 else: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
928 filter = '' |
|
3169
d8d1ebd80930
fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents:
3164
diff
changeset
|
929 help_url = "%s?@startwith=0&@template=help&"\ |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
930 "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
|
931 (self.classname, properties, property, form, type, |
|
5336
5a81a097a394
Allow grouping of classhelp items
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5325
diff
changeset
|
932 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
|
933 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
|
934 (help_url, width, height) |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
935 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
|
936 '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
|
937 'onclick="%s" %s>%s</a>') % ( |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
938 help_url, width, height, |
|
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
939 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
|
940 self._(label)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
941 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
942 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
|
943 """ 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
|
944 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
945 "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
|
946 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
947 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
948 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
|
949 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
950 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
|
951 return '' |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
952 |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
953 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
954 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
|
955 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
|
956 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
957 self.input(type="hidden", name="@csrf", |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
958 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
|
959 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
960 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
|
961 |
|
6428
32a04dc87b30
Make HTMLClass::history signature compatible to _HTMLItem::history
John Rouillard <rouilj@ieee.org>
parents:
6422
diff
changeset
|
962 def history(self, **args): |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
963 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
|
964 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
|
965 return self._('New node - no history') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
966 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
967 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
|
968 """ 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
|
969 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
970 # 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
|
971 req = HTMLRequest(self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
972 req.classname = self.classname |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
973 req.update(kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
974 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
975 # 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
|
976 # [ ] 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
|
977 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
|
978 pt = self._client.instance.templates.load(tplname) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
979 |
|
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
|
980 # use our fabricated request |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
981 args = { |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
982 'ok_message': self._client._ok_message, |
|
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4879
diff
changeset
|
983 '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
|
984 } |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
985 return pt.render(self._client, self.classname, req, **args) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
986 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
987 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
988 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
|
989 """ 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
|
990 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
991 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
|
992 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
993 self._db = client.db |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
994 self._classname = classname |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
995 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
996 self._klass = self._db.getclass(classname) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
997 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
998 |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
999 # 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
|
1000 self._anonymous = anonymous |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1001 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1002 HTMLInputMixin.__init__(self) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1003 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1004 def is_edit_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1005 """ 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
|
1006 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1007 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1008 return perm('Web Access', self._client.userid) and perm('Edit', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1009 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
|
1010 |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1011 def is_retire_ok(self): |
|
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1012 """ 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
|
1013 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1014 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1015 return perm('Web Access', self._client.userid) and perm('Retire', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1016 self._client.userid, self._classname, itemid=self._nodeid) |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1017 |
|
6150
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1018 def is_restore_ok(self): |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1019 """ Is the user allowed to restore this item? |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1020 """ |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1021 perm = self._db.security.hasPermission |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1022 return perm('Web Access', self._client.userid) and perm('Restore', |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1023 self._client.userid, self._classname, itemid=self._nodeid) |
|
edbd4bba728a
Add 'is_restore_ok' method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6125
diff
changeset
|
1024 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1025 def is_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1026 """ 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
|
1027 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1028 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1029 if perm('Web Access', self._client.userid) and perm('View', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1030 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
|
1031 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1032 return self.is_edit_ok() |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1033 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1034 def is_only_view_ok(self): |
|
4088
34434785f308
Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents:
4058
diff
changeset
|
1035 """ 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
|
1036 """ |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1037 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
|
1038 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1039 def __repr__(self): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1040 return '<HTMLItem(0x%x) %s %s>' % (id(self), self._classname, |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1041 self._nodeid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1042 |
| 1002 | 1043 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
|
1044 """ return an HTMLProperty instance |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1045 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
|
1046 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
|
1047 """ |
| 1002 | 1048 if item == 'id': |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1049 return self._nodeid |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1050 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1051 items = item.split('.', 1) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1052 has_rest = len(items) > 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1053 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
1054 # get the property |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1055 prop = self._props[items[0]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1056 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1057 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
|
1058 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1059 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1060 # 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
|
1061 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
|
1062 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
|
1063 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
|
1064 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
|
1065 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
|
1066 value = self._nodeid |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1067 if value is None: |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1068 if isinstance(prop, hyperdb.Multilink): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1069 value = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1070 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1071 # look up the correct HTMLProperty class |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1072 htmlprop = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1073 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1074 if isinstance(prop, klass): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1075 htmlprop = htmlklass(self._client, self._classname, |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1076 self._nodeid, prop, items[0], value, self._anonymous) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1077 if htmlprop is not None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1078 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
|
1079 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
|
1080 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
|
1081 return htmlprop[items[1]] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
1082 return htmlprop |
| 1002 | 1083 |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1084 raise KeyError(item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1085 |
| 1002 | 1086 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
|
1087 """ convenience access to properties """ |
| 1002 | 1088 try: |
| 1089 return self[attr] | |
| 1090 except KeyError: | |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1091 raise AttributeError(attr) |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1092 |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
1093 def designator(self): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1094 """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
|
1095 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
|
1096 |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
1097 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
|
1098 """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
|
1099 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
|
1100 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1101 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
|
1102 """Generate a submit button. |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1103 |
|
5991
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1104 "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
|
1105 generated html <select> |
|
b0940ad50f43
issue2551075 Update jinja template to bootstrap 4.
John Rouillard <rouilj@ieee.org>
parents:
5988
diff
changeset
|
1106 |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
1107 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
|
1108 """ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1109 return \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1110 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
|
1111 value=self._(label), **html_kwargs) + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1112 '\n' + \ |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1113 self.input(type="hidden", name="@lastactivity", |
|
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1114 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
|
1115 '\n' + \ |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
1116 self.input(type="hidden", name="@csrf", |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
1117 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
|
1118 '\n' + \ |
|
5907
fe96015445e9
Reorder html entities generated by submit button
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5903
diff
changeset
|
1119 self.input(type="hidden", name="@action", value=action) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1120 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1121 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
|
1122 """ 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
|
1123 """ |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1124 # XXX do this |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1125 return [] |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1126 |
| 5809 | 1127 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
|
1128 limit=None, showall=False): |
|
5112
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1129 """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
|
1130 |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1131 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
|
1132 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
|
1133 shown. |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5095
diff
changeset
|
1134 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1135 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
|
1136 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1137 |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1138 # 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
|
1139 # 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
|
1140 # 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
|
1141 orig_form_wins = self._client.form_wins |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1142 self._client.form_wins = False |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1143 |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1144 # get the journal, sort and reverse |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1145 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
|
1146 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
|
1147 history.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1148 |
|
4233
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1149 # restrict the volume |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1150 if limit: |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1151 history = history[:limit] |
|
01ef28bffcbd
don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents:
4146
diff
changeset
|
1152 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1394
diff
changeset
|
1153 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
|
1154 l = [] |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1155 current = {} |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1156 comments = {} |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1157 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
|
1158 date_s = str(evt_date.local(timezone)).replace(".", " ") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1159 arg_s = '' |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1160 if action in ['link', 'unlink'] and isinstance(args, tuple): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1161 if len(args) == 3: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1162 linkcl, linkid, key = args |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1163 arg_s += '<a rel="nofollow noopener" href="%s%s">%s%s %s</a>' % (linkcl, linkid, |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1164 linkcl, linkid, key) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1165 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1166 arg_s = str(args) |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
1167 elif isinstance(args, dict): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1168 cell = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1169 for k in args.keys(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1170 # try to get the relevant property and treat it |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1171 # specially |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1172 try: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1173 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
|
1174 except KeyError: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1175 prop = None |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1176 if prop is None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1177 # property no longer exists |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1178 comments['no_exist'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1179 "<em>The indicated property no longer exists</em>") |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1180 cell.append(self._('<em>%s: %s</em>\n') |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
1181 % (self._(k), str(args[k]))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1182 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1183 |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1184 # 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
|
1185 # haven't already) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1186 if k not in current: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1187 val = self[k] |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1188 if not isinstance(val, HTMLProperty): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1189 current[k] = None |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1190 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1191 current[k] = val.plain(escape=1) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1192 # make link if hrefable |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1193 if (isinstance(prop, hyperdb.Link)): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1194 classname = prop.classname |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1195 try: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1196 template = self._client.selectTemplate(classname, 'item') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1197 if template.startswith('_generic.'): |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1198 raise NoTemplate('not really...') |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1199 except NoTemplate: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1200 pass |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1201 else: |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1202 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
|
1203 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
|
1204 classname, linkid, current[k]) |
|
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1205 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1206 if args[k] and (isinstance(prop, hyperdb.Multilink) or |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1207 isinstance(prop, hyperdb.Link)): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1208 # figure what the link class is |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1209 classname = prop.classname |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1210 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1211 linkcl = self._db.getclass(classname) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1212 except KeyError: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1213 labelprop = None |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1214 comments[classname] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1215 "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
|
1216 ) % locals() |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1217 labelprop = linkcl.labelprop(1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1218 try: |
|
4740
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1219 template = self._client.selectTemplate(classname, |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1220 'item') |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1221 if template.startswith('_generic.'): |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1222 raise NoTemplate('not really...') |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1223 hrefable = 1 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1224 except NoTemplate: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1225 hrefable = 0 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1226 |
|
5232
462b0f76fce8
issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents:
5222
diff
changeset
|
1227 if isinstance(prop, hyperdb.Multilink) and args[k]: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1228 ml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1229 for linkid in args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1230 if isinstance(linkid, type(())): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1231 sublabel = linkid[0] + ' ' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1232 linkids = linkid[1] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1233 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1234 sublabel = '' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1235 linkids = [linkid] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1236 subml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1237 for linkid in linkids: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1238 # We're seeing things like |
|
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1239 # {'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
|
1240 if linkid is None: |
|
5325
7c7f3faa5e10
Check for None linkid in history
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5319
diff
changeset
|
1241 continue |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1242 label = classname + linkid |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1243 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1244 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1245 # there's no labelprop! |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1246 try: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1247 if labelprop is not None and \ |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1248 labelprop != 'id': |
|
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
|
1249 label = linkcl.get(linkid, labelprop, |
|
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
|
1250 default=self._( |
|
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
|
1251 "[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
|
1252 label = html_escape(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1253 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1254 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1255 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1256 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1257 subml.append('<strike>%s</strike>' % label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1258 else: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1259 if hrefable: |
|
5684
97e2125e064c
When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents:
5548
diff
changeset
|
1260 subml.append('<a rel="nofollow noopener" ' |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1261 'href="%s%s">%s</a>' % ( |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1262 classname, linkid, label)) |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
1263 elif label is None: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1264 subml.append('%s%s' % (classname, |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
1265 linkid)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1266 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1267 subml.append(label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1268 ml.append(sublabel + ', '.join(subml)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1269 cell.append('%s:\n %s' % (self._(k), ', '.join(ml))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1270 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1271 label = classname + args[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1272 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1273 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1274 # there's no labelprop! |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1275 if labelprop is not None and labelprop != 'id': |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1276 try: |
|
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
|
1277 label = html_escape(linkcl.get(args[k], |
|
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
|
1278 labelprop, default=self._( |
|
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
|
1279 "[label is missing]"))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1280 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1281 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1282 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1283 " no longer exists</strike>") |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1284 cell.append(' <strike>%s</strike>,\n' % label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1285 # "flag" this is done .... euwww |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1286 label = None |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1287 if label is not None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1288 if hrefable: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1289 old = '<a rel="nofollow noopener" href="%s%s">%s</a>' % (classname, |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1290 args[k], label) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1291 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1292 old = label; |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
1293 cell.append('%s: %s' % (self._(k), old)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1294 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
|
1295 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1296 current[k] = old |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1297 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1298 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1299 if args[k] is None: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1300 d = '' |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1301 else: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1302 d = date.Date(args[k], |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1303 translator=self._client).local(timezone) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1304 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
|
1305 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
|
1306 cell[-1] += ' -> %s' % current[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1307 current[k] = str(d) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1308 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1309 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
|
1310 val = str(date.Interval(args[k], |
|
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1311 translator=self._client)) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1312 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1313 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
|
1314 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1315 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1316 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1317 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
|
1318 val = html_escape(args[k]) |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1319 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1320 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
|
1321 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1322 current[k] = val |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1323 |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1324 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
|
1325 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
|
1326 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1327 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
|
1328 cell[-1] += ' -> %s' % current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
1329 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1330 |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1331 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
|
1332 val = args[k].dummystr() |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1333 cell.append('%s: %s' % (self._(k), val)) |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1334 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
|
1335 cell[-1] += ' -> %s' % current[k] |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1336 current[k] = val |
|
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1337 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1338 elif not args[k]: |
|
5492
6b0c542642be
blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
1339 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
|
1340 cell.append('%s: %s' % (self._(k), current[k])) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1341 current[k] = '(no value)' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1342 else: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1343 cell.append(self._('%s: (no value)') % self._(k)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1344 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1345 else: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1346 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
|
1347 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
|
1348 cell[-1] += ' -> %s' % current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1349 current[k] = str(args[k]) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1350 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1351 arg_s = '<br />'.join(cell) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1352 else: |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1353 if action in ('retired', 'restored'): |
|
5947
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1354 # args = None for these actions |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1355 pass |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1356 else: |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1357 # unknown event!! |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1358 comments['unknown'] = self._( |
|
33914dd1160f
Retired and Restored were unhandled by history.
John Rouillard <rouilj@ieee.org>
parents:
5927
diff
changeset
|
1359 "<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
|
1360 " 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
|
1361 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
|
1362 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1363 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
|
1364 # 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
|
1365 # have the username) |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1366 if dre.match(user): |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
1367 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
|
1368 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
|
1369 date_s, html_escape(user), self._(action), arg_s)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1370 if comments: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1371 l.append(self._( |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1372 '<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1373 for entry in comments.values(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1374 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
|
1375 |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1376 if direction == 'ascending': |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1377 l.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1378 |
|
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
|
1379 l[0:0] = ['<table class="history table table-condensed table-striped">' |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1380 '<tr><th colspan="4" class="header">', |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1381 self._('History'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1382 '</th></tr><tr>', |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1383 self._('<th>Date</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1384 self._('<th>User</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1385 self._('<th>Action</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1386 self._('<th>Args</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
1387 '</tr>'] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1388 l.append('</table>') |
|
6422
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1389 |
|
91ae685405ba
- issue2550964 - History can (temporarily) show incorrect value...
John Rouillard <rouilj@ieee.org>
parents:
6421
diff
changeset
|
1390 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
|
1391 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1392 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1393 |
|
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
|
1394 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
|
1395 """ 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
|
1396 """ |
|
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
|
1397 # 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
|
1398 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
|
1399 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
|
1400 name = self._klass.get(self._nodeid, 'name') |
|
899c6ced2abe
include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents:
1272
diff
changeset
|
1401 req.updateFromURL(self._klass.get(self._nodeid, 'url') + |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1402 '&@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
|
1403 |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1404 # 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
|
1405 # [ ] 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
|
1406 # generic templating module (techtonik) |
|
fe9568a6cbd6
Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents:
4737
diff
changeset
|
1407 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
|
1408 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
|
1409 # 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
|
1410 # node. |
|
885069b5f328
Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents:
4056
diff
changeset
|
1411 self._client.nodeid = None |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
1412 |
|
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
|
1413 # 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
|
1414 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
|
1415 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1416 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
|
1417 """ 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
|
1418 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
|
1419 """ |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1420 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
|
1421 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
|
1422 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1423 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1424 def copy_url(self, exclude=("messages", "files")): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1425 """Construct a URL for creating a copy of this item |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1426 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1427 "exclude" is an optional list of properties that should |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1428 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
|
1429 includes "messages" and "files" properties. Note that |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1430 "id" property cannot be copied. |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1431 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1432 """ |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1433 exclude = ("id", "activity", "actor", "creation", "creator") \ |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1434 + tuple(exclude) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1435 query = { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1436 "@template": "item", |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1437 "@note": self._("Copy of %(class)s %(id)s") % { |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1438 "class": self._(self._classname), "id": self._nodeid}, |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1439 } |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1440 for name in self._props.keys(): |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1441 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
|
1442 prop = self._props[name] |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1443 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
|
1444 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
|
1445 else: |
|
c317147fd891
Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents:
4804
diff
changeset
|
1446 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
|
1447 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1448 return self._classname + "?" + "&".join( |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
1449 ["%s=%s" % (key, urllib_.quote(value)) |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1450 for key, value in query.items()]) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1451 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1452 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1453 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
|
1454 """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
|
1455 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1456 _marker = [] |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1457 |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1458 def hasPermission(self, permission, classname=_marker, |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1459 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
|
1460 """Determine if the user has the Permission. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1461 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1462 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
|
1463 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
|
1464 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1465 if classname is self._marker: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1466 classname = self._client.classname |
|
3535
75dc225613cc
fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents:
3509
diff
changeset
|
1467 return self._db.security.hasPermission(permission, |
|
3357
5c8822d10fdc
fix invocation of hasPermission from templating code [SF#1224172]
Richard Jones <richard@users.sourceforge.net>
parents:
3354
diff
changeset
|
1468 self._nodeid, classname, property, itemid) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1469 |
|
4306
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1470 def hasRole(self, *rolenames): |
|
966592263fb8
Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4288
diff
changeset
|
1471 """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
|
1472 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
|
1473 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1474 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1475 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
|
1476 if classname == 'user': |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1477 return _HTMLUser(client, classname, nodeid, anonymous) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1478 else: |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1479 return _HTMLItem(client, classname, nodeid, anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1480 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1481 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1482 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
|
1483 """ String, Integer, Number, Date, Interval HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1484 |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1485 Has useful attributes: |
|
1080
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1486 |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1487 _name the name of the property |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1488 _value the value of the property if any |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1489 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1490 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
|
1491 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1492 def __init__(self, client, classname, nodeid, prop, name, value, |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1493 anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1494 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1495 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
|
1496 self._ = client._ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1497 self._classname = classname |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1498 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1499 self._prop = prop |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1500 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
|
1501 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
|
1502 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
|
1503 if not anonymous: |
|
4286
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1504 if nodeid: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1505 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
|
1506 else: |
|
f364978e6e3f
Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents:
4268
diff
changeset
|
1507 # 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
|
1508 # non-anonymous class. |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1509 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
|
1510 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
|
1511 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
|
1512 |
| 4056 | 1513 # If no value is already present for this property, see if one |
| 1514 # is specified in the current form. | |
| 1515 form = self._client.form | |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1516 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
|
1517 is_in = self._formname in form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1518 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
1519 is_in = False |
|
5166
232c74973a56
issue1408570: fix that form values are lost
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5156
diff
changeset
|
1520 if is_in and (not self._value or self._client.form_wins): |
| 4056 | 1521 if isinstance(prop, hyperdb.Multilink): |
| 1522 value = lookupIds(self._db, prop, | |
| 1523 handleListCGIValue(form[self._formname]), | |
| 1524 fail_ok=1) | |
| 1525 elif isinstance(prop, hyperdb.Link): | |
| 1526 value = form.getfirst(self._formname).strip() | |
| 1527 if value: | |
| 1528 value = lookupIds(self._db, prop, [value], | |
| 1529 fail_ok=1)[0] | |
| 1530 else: | |
| 1531 value = None | |
| 1532 else: | |
| 1533 value = form.getfirst(self._formname).strip() or None | |
| 1534 self._value = value | |
| 1535 | |
|
6404
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1536 # 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
|
1537 if self._value is None: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1538 self._value = prop.get_default_value() |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
1539 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1540 HTMLInputMixin.__init__(self) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1541 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1542 def __repr__(self): |
|
4463
1bd86e82422b
Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents:
4437
diff
changeset
|
1543 classname = self.__class__.__name__ |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1544 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
|
1545 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
|
1546 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1547 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1548 return self.plain() |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1549 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1550 def __lt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1551 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1552 return self._value < other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1553 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
|
1554 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1555 def __le__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1556 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1557 return self._value <= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1558 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
|
1559 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1560 def __eq__(self, other): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1561 if isinstance(other, HTMLProperty): |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1562 return self._value == other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1563 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
|
1564 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1565 def __ne__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1566 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1567 return self._value != other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1568 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
|
1569 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1570 def __gt__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1571 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1572 return self._value > other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1573 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
|
1574 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1575 def __ge__(self, other): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1576 if isinstance(other, HTMLProperty): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1577 return self._value >= other._value |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
1578 return self._value >= other |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1579 |
|
5404
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1580 def __bool__(self): |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1581 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
|
1582 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
1583 __nonzero__ = __bool__ |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1584 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1585 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
|
1586 """Is my _value not None?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1587 return self._value is not None |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1588 |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1589 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
|
1590 """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
|
1591 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
|
1592 ones. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1593 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1594 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1595 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
|
1596 if self._nodeid: |
|
4329
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1597 if not perm('Web Access', userid): |
|
58b7ba47af87
fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents:
4328
diff
changeset
|
1598 return False |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1599 return perm('Edit', userid, self._classname, self._name, |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1600 self._nodeid) |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1601 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
|
1602 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
|
1603 |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1604 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
|
1605 """ 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
|
1606 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1607 perm = self._db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1608 if perm('Web Access', self._client.userid) and perm('View', |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
1609 self._client.userid, self._classname, self._name, self._nodeid): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1610 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1611 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
|
1612 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1613 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1614 class StringHTMLProperty(HTMLProperty): |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1615 hyper_re = re.compile(r'''( |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1616 (?P<url> |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1617 ( |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1618 (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
|
1619 ([\w]+(:\w+)?@)? # username/password |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1620 ([\w\-]+) # hostname |
|
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1621 ((\.[\w-]+)+)? # .domain.etc |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1622 | # ... or ... |
|
4010
797eacd945af
add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents:
4009
diff
changeset
|
1623 ([\w]+(:\w+)?@)? # username/password |
|
4009
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1624 www\. # "www." |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1625 ([\w\-]+\.)+ # hostname |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1626 [\w]{2,5} # TLD |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1627 ) |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1628 (:[\d]{1,5})? # port |
|
e335ce40d6c8
Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents:
3991
diff
changeset
|
1629 (/[\w\-$.+!*(),;:@&=?/~\\#%]*)? # path etc. |
|
3991
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1630 )| |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1631 (?P<email>[-+=%/\w\.]+@[\w\.\-]+)| |
|
6564
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1632 (?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
|
1633 )''', re.X | re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1634 protocol_re = re.compile('^(ht|f)tp(s?)://', re.I) |
|
13161539e5bd
improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents:
3972
diff
changeset
|
1635 |
|
6098
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1636 # disable rst directives that have security implications |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1637 rst_defaults = {'file_insertion_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1638 'raw_enabled': 0, |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1639 '_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
|
1640 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
1641 valid_schemes = {} |
|
6103
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1642 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1643 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
|
1644 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
|
1645 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
|
1646 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
|
1647 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
|
1648 elif len(match.group('id')) < 10: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1649 return self._hyper_repl_item(match, |
|
6564
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1650 '<a href="%(cls)s%(id)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
|
1651 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1652 # 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
|
1653 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
|
1654 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1655 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
|
1656 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
|
1657 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
|
1658 u = 'http://' + s |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1659 end = '' |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1660 if '>' in s: |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1661 # 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
|
1662 pos = s.find('>') |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1663 end = s[pos:] |
|
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1664 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
|
1665 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
|
1666 # 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
|
1667 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
|
1668 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
|
1669 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
|
1670 # 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
|
1671 pos = s.rfind(')') |
|
4413
66603a9051f9
improve handling of '>' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents:
4396
diff
changeset
|
1672 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
|
1673 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
|
1674 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
|
1675 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1676 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
|
1677 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
|
1678 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
|
1679 |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
1680 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
|
1681 item = match.group('item') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1682 cls = match.group('class').lower() |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1683 id = match.group('id') |
|
6564
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1684 fragment = match.group('fragment') |
|
21c7c2041a4b
issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents:
6542
diff
changeset
|
1685 if fragment is None: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
1686 fragment = "" |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1687 try: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1688 # 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
|
1689 cl = self._db.getclass(cls) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1690 if not cl.hasnode(id): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1691 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1692 return replacement % locals() |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1693 except KeyError: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1694 return item |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1695 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1696 def _hyper_repl_rst(self, match): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1697 if match.group('url'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1698 s = match.group('url') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1699 return '`%s <%s>`_' % (s, s) |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1700 elif match.group('email'): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1701 s = match.group('email') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1702 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
|
1703 elif len(match.group('id')) < 10: |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1704 return self._hyper_repl_item(match, '`%(item)s <%(cls)s%(id)s>`_') |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1705 else: |
|
4288
ce684080e968
issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents:
4286
diff
changeset
|
1706 # 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
|
1707 return match.group(0) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1708 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1709 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
|
1710 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
|
1711 if match.group(group): |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1712 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
|
1713 end = match.end(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1714 if start >= 0: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1715 prefix = match.string[start] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1716 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
|
1717 suffix = match.string[end] |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1718 if (prefix, suffix) in { |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1719 ('<', '>'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1720 ('(', ')'), |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1721 }: |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1722 continue |
|
6299
fd0bdcbc68e4
issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents:
6284
diff
changeset
|
1723 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
|
1724 continue |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1725 s = match.group(group) |
|
6ed5152a92d0
issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents:
6279
diff
changeset
|
1726 return '<%s>' % s |
|
6104
a1fd9551d416
don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6103
diff
changeset
|
1727 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
|
1728 # Pass through markdown style links: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1729 # [issue1](https://....) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1730 # [issue1](issue1) |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1731 # 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
|
1732 # https://issues.roundup-tracker.org/issue2551108 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1733 start = match.start('item') - 1 |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1734 end = match.end('item') |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1735 if start >= 0: |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1736 prefix = match.string[start] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1737 if end < len(match.string): |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1738 suffix = match.string[end] |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1739 if (prefix, suffix) in {('[', ']')}: |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
1740 if match.string[end+1] == '(': # find following ( |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1741 return match.group(0) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1742 if (prefix, suffix) in {('(', ')')}: |
|
6336
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1743 if match.string[start-1] == ']': |
|
6f89cdc7c938
issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents:
6299
diff
changeset
|
1744 return match.group(0) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1745 return self._hyper_repl_item(match, '[%(item)s](%(cls)s%(id)s)') |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1746 else: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1747 # just return the matched text |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1748 return match.group(0) |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1749 |
|
5156
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1750 def url_quote(self): |
|
882fa4d9bead
issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents:
5146
diff
changeset
|
1751 """ 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
|
1752 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
|
1753 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1754 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
|
1755 """ Render a "hyperlinked" version of the text """ |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1756 return self.plain(hyperlink=1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1757 |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1758 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
|
1759 """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
|
1760 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1761 - "escape" turns on/off HTML quoting |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1762 - "hyperlink" turns on/off in-text hyperlinking of URLs, email |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1763 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
|
1764 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1765 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
|
1766 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1767 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1768 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1769 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1770 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
|
1771 s = html_escape(str(self._value)) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1772 else: |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1773 s = str(self._value) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1774 if hyperlink: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1775 # no, we *must* escape this text |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1776 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
|
1777 s = html_escape(s) |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1778 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
|
1779 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1780 |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1781 def wrapped(self, escape=1, hyperlink=1): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1782 """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
|
1783 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1784 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
|
1785 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
|
1786 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1787 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
|
1788 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
|
1789 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1790 - "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
|
1791 - "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
|
1792 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
|
1793 """ |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1794 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
|
1795 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
|
1796 |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1797 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
|
1798 return '' |
|
5043
ac0c117cd24c
Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents:
5006
diff
changeset
|
1799 s = '\n'.join(textwrap.wrap(str(self._value), 80)) |
|
3644
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1800 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
|
1801 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
|
1802 if hyperlink: |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1803 # 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
|
1804 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
|
1805 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
|
1806 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
|
1807 return s |
|
f35ece8f8ff7
added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents:
3635
diff
changeset
|
1808 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1809 def stext(self, escape=0, hyperlink=1): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1810 """ Render the value of the property as StructuredText. |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1811 |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1812 This requires the StructureText module to be installed separately. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
1813 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1814 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
|
1815 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1816 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1817 s = self.plain(escape=escape, hyperlink=hyperlink) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1818 if not StructuredText: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1819 return s |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
1820 return StructuredText(s, level=1, header=0) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1821 |
|
3862
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1822 def rst(self, hyperlink=1): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1823 """ 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
|
1824 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1825 This requires docutils to be installed separately. |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1826 """ |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1827 if not self.is_view_ok(): |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1828 return self._('[hidden]') |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1829 |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1830 if not ReStructuredText: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1831 return self.plain(escape=0, hyperlink=hyperlink) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1832 s = self.plain(escape=0, hyperlink=0) |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1833 if hyperlink: |
|
b052820e86bf
Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3861
diff
changeset
|
1834 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
|
1835 |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1836 # 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
|
1837 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
|
1838 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
|
1839 # 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
|
1840 # 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
|
1841 # 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
|
1842 # 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
|
1843 # 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
|
1844 # 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
|
1845 # 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
|
1846 # 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
|
1847 try: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1848 del(schemes[sch]) |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1849 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
|
1850 except KeyError: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1851 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
|
1852 pass |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1853 else: |
|
af16c135fb98
url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents:
6102
diff
changeset
|
1854 raise |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
1855 |
|
6098
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1856 return u2s(ReStructuredText(s, writer_name="html", |
|
72a281a55a17
Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents:
6097
diff
changeset
|
1857 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
|
1858 |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1859 def markdown(self, hyperlink=1): |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1860 """ 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
|
1861 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1862 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
|
1863 """ |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1864 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
|
1865 return self._('[hidden]') |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1866 |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1867 if not markdown: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1868 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
|
1869 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
|
1870 if hyperlink: |
|
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1871 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
|
1872 try: |
|
6277
957a0fc20021
issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents:
6275
diff
changeset
|
1873 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
|
1874 except Exception: # when markdown formatting fails return markup |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1875 return self.plain(escape=0, hyperlink=hyperlink) |
|
bda491248fd8
Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents:
6215
diff
changeset
|
1876 return s |
|
6097
90a1470edbea
added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6095
diff
changeset
|
1877 |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1878 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
|
1879 """ 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
|
1880 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1881 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
|
1882 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1883 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1884 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
|
1885 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
1886 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
|
1887 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1888 value = '' |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1889 |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1890 kwargs.setdefault("size", 30) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1891 kwargs.update({"name": self._formname, "value": value}) |
|
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
1892 return self.input(**kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1893 |
|
3905
6733a7cce7f4
multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3903
diff
changeset
|
1894 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
|
1895 """ 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
|
1896 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1897 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
|
1898 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1899 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
|
1900 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
|
1901 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1902 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1903 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1904 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
|
1905 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
|
1906 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1907 value = '"'.join(value.split('"')) |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1908 name = self._formname |
|
5988
39b8bc511ed7
Fix html generation errors for boolean options.
John Rouillard <rouilj@ieee.org>
parents:
5973
diff
changeset
|
1909 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
|
1910 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
|
1911 ' rows="%(rows)s" cols="%(cols)s">' |
|
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1912 '%(value)s</textarea>') % locals() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1913 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1914 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
|
1915 """ 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
|
1916 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1917 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
|
1918 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1919 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1920 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1921 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1922 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1923 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
|
1924 split = value.split('@') |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1925 if len(split) == 2: |
|
d7bab396c228
email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents:
3565
diff
changeset
|
1926 name, domain = split |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1927 domain = ' '.join(domain.split('.')[:-1]) |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1928 name = name.replace('.', ' ') |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1929 value = '%s at %s ...' % (name, domain) |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1930 else: |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1931 value = value.replace('.', ' ') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1932 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
|
1933 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1934 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1935 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1936 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1937 class PasswordHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1938 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
|
1939 """ 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
|
1940 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1941 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
|
1942 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1943 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1944 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1945 return '' |
|
5182
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1946 try: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1947 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
|
1948 except AttributeError: |
|
dc657fbbc790
- issue2550933 - Fix Traceback in cgi/templating.py when a string is
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
1949 value = self._('[hidden]') |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1950 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
|
1951 value = html_escape(value) |
|
4483
22bc0426e348
Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4481
diff
changeset
|
1952 return value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1953 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
1954 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
|
1955 """ 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
|
1956 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1957 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
|
1958 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1959 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1960 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
|
1961 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
1962 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
|
1963 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1964 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
1965 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
|
1966 """ 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
|
1967 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
|
1968 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
|
1969 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1970 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
|
1971 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1972 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
|
1973 return '' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1974 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
1975 return self.input(type="password", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1976 name="@confirm@%s" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1977 id="%s-confirm" % self._formname, |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
1978 size=size) |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
1979 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
1980 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1981 class NumberHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
1982 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
|
1983 """ 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
|
1984 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
1985 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
|
1986 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1987 |
|
2884
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
1988 if self._value is None: |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
1989 return '' |
|
6d6fdd1daf92
NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents:
2883
diff
changeset
|
1990 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1991 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1992 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
1993 def pretty(self, format="%0.3f"): |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
1994 '''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
|
1995 |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
1996 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
|
1997 if None. |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
1998 ''' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
1999 try: |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2000 return format % self._value |
|
6832
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2001 except TypeError: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2002 value = self._value |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2003 if value is None: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2004 return '' |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2005 else: |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2006 return str(value) |
|
234fefd7568a
issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
2007 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2008 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
|
2009 """ 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
|
2010 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2011 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
|
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(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2014 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
|
2015 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2016 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
|
2017 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2018 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2019 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2020 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
|
2021 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2022 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2023 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
|
2024 """ 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
|
2025 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2026 return int(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2027 |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2028 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
|
2029 """ 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
|
2030 """ |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2031 return float(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2032 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2033 |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2034 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
|
2035 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
|
2036 """ 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
|
2037 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2038 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
|
2039 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
|
2040 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2041 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
|
2042 return '' |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2043 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2044 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
|
2045 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2046 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
|
2047 """ 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
|
2048 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2049 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
|
2050 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2051 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
|
2052 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
|
2053 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2054 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
|
2055 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
|
2056 value = '' |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2057 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2058 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
|
2059 **kwargs) |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2060 |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2061 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
|
2062 """ 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
|
2063 """ |
|
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5062
diff
changeset
|
2064 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
|
2065 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
2066 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2067 class BooleanHTMLProperty(HTMLProperty): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2068 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
|
2069 """ 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
|
2070 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2071 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
|
2072 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2073 |
|
1289
257f0ab00d50
bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents:
1284
diff
changeset
|
2074 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2075 return '' |
|
3354
201dbcf63a30
use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3338
diff
changeset
|
2076 return self._value and self._("Yes") or self._("No") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2077 |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2078 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
|
2079 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
|
2080 """ 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
|
2081 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2082 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
|
2083 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2084 In addition to being able to set arbitrary html properties |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2085 using prop=val arguments, the thre arguments: |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2086 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2087 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
|
2088 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
|
2089 values. |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2090 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2091 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
|
2092 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
|
2093 """ |
|
2113
30aeb17e5b04
Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents:
2106
diff
changeset
|
2094 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2095 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
|
2096 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2097 value = self._value |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2098 if is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2099 value = value.strip().lower() in ('checked', 'yes', 'true', |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2100 'on', '1') |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2101 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2102 if (not y_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2103 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
|
2104 self._formname, 'yes') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2105 y_label += self._('Yes') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2106 y_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2107 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2108 if (not n_label): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2109 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
|
2110 self._formname, 'no') |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2111 n_label += self._('No') |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2112 n_label += '</label>' |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2113 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2114 checked = value and "checked" or "" |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2115 if value: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2116 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
|
2117 checked="checked", id="%s_%s" % ( |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2118 self._formname, 'yes'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2119 |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2120 n_rb = self.input(type="radio", name=self._formname, value="no", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2121 id="%s_%s" % ( |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2122 self._formname, 'no'), **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2123 else: |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2124 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
|
2125 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
|
2126 |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2127 n_rb = self.input(type="radio", name=self._formname, value="no", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2128 checked="checked", id="%s_%s" % ( |
|
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2129 self._formname, 'no'), **kwargs) |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2130 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2131 if (u_label): |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2132 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
|
2133 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
|
2134 u_rb = self.input(type="radio", name=self._formname, value="", |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2135 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
|
2136 else: |
|
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2137 # 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
|
2138 u_label = '' |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2139 u_rb = '' |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2140 |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2141 if (labelfirst): |
|
4784
888676704342
issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents:
4783
diff
changeset
|
2142 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
|
2143 else: |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2144 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
|
2145 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2146 return s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2147 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2148 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2149 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
|
2150 |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2151 _marker = [] |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2152 |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2153 def __init__(self, client, classname, nodeid, prop, name, value, |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2154 anonymous=0, offset=None): |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2155 HTMLProperty.__init__(self, client, classname, nodeid, prop, name, |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2156 value, anonymous=anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2157 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
|
2158 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
|
2159 self._offset = offset |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2160 if self._offset is None: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
2161 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
|
2162 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2163 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
|
2164 """ 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
|
2165 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2166 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
|
2167 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2168 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2169 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2170 return '' |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2171 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
|
2172 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
|
2173 else: |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2174 offset = self._offset |
|
4842
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2175 try: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2176 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
|
2177 except AttributeError: |
|
1e4c45a4254b
Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4839
diff
changeset
|
2178 # 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
|
2179 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2180 |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
2181 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
|
2182 """ Return the current time. |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2183 |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2184 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
|
2185 DateHTMLProperty. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2186 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2187 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
|
2188 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2189 |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2190 ret = date.Date('.', translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2191 |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2192 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
|
2193 sign = 1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2194 if str_interval[0] == '-': |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2195 sign = -1 |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2196 str_interval = str_interval[1:] |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2197 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
|
2198 if sign > 0: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2199 ret = ret + interval |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2200 else: |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2201 ret = ret - interval |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2202 |
| 2037 | 2203 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2204 self._prop, self._formname, ret) |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
2205 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2206 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
|
2207 **kwargs): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2208 """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
|
2209 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2210 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
|
2211 |
|
3649
12633662ff63
include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents:
3644
diff
changeset
|
2212 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
|
2213 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
|
2214 |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2215 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
|
2216 """ |
|
2956
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2217 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
|
2218 if format is self._marker: |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2219 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
|
2220 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2221 return self.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2222 |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2223 value = self._value |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2224 |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2225 if value is None: |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2226 if default is None: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2227 raw_value = None |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2228 else: |
|
5438
e2382945d302
Python 3 preparation: avoid basestring.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5423
diff
changeset
|
2229 if is_us(default): |
|
3832
bbc977e1cd2c
Fix handling of defaults for date fields
Richard Jones <richard@users.sourceforge.net>
parents:
3785
diff
changeset
|
2230 raw_value = date.Date(default, translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2231 elif isinstance(default, date.Date): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2232 raw_value = default |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2233 elif isinstance(default, DateHTMLProperty): |
|
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2234 raw_value = default._value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2235 else: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2236 raise ValueError(self._('default value for ' |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
2237 'DateHTMLProperty must be either DateHTMLProperty ' |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2238 'or string date representation.')) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2239 elif is_us(value): |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2240 # 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
|
2241 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
|
2242 s = self.input(name=self._formname, value=value, size=size, |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2243 **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
|
2244 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
|
2245 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
|
2246 return s |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2247 else: |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2248 raw_value = value |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2249 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
2250 if raw_value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2251 value = '' |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2252 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
|
2253 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
|
2254 value = raw_value |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2255 else: |
|
4511fd6c5dbf
format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2884
diff
changeset
|
2256 value = date.Date(raw_value).pretty(format) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2257 else: |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2258 if self._offset is None: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2259 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
|
2260 else: |
|
3383
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2261 offset = self._offset |
|
c1c67c62b699
applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents:
3369
diff
changeset
|
2262 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
|
2263 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
|
2264 value = value.pretty(format) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2265 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2266 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
|
2267 **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
|
2268 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
|
2269 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
|
2270 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2271 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2272 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
|
2273 """ 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
|
2274 |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2275 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
|
2276 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2277 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
|
2278 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2279 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2280 if not self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2281 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2282 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2283 # figure the interval |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
2284 interval = self._value - date.Date('.', translator=self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2285 if pretty: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2286 return interval.pretty() |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2287 return str(interval) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2288 |
|
1453
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
2289 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
|
2290 """ 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
|
2291 |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2292 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
|
2293 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
|
2294 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
|
2295 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
|
2296 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2297 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
|
2298 return self._('[hidden]') |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2299 |
|
3479
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2300 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
|
2301 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
|
2302 else: |
|
86d6131847e8
timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents:
3472
diff
changeset
|
2303 offset = self._offset |
|
3509
dcaa366b2cc8
fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3505
diff
changeset
|
2304 |
|
6377
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2305 try: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2306 if not self._value: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2307 return '' |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2308 elif format is not self._marker: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2309 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
|
2310 else: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2311 return self._value.local(offset).pretty() |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2312 except AttributeError: |
|
a7e7314fb7d9
issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents:
6336
diff
changeset
|
2313 # 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
|
2314 return str(self._value) |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
2315 |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2316 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
|
2317 """ 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
|
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 |
|
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
|
2322 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
2323 self._prop, self._formname, self._value, offset=offset) |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
2324 |
|
3710
2862cb0d9be4
default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents:
3702
diff
changeset
|
2325 def popcal(self, width=300, height=200, label="(cal)", |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2326 form="itemSynopsis"): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2327 """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
|
2328 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2329 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
|
2330 """ |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2331 if self.isset(): |
|
7034
036267634a89
flake8 fix E228 missing whitespace around modulo operator
John Rouillard <rouilj@ieee.org>
parents:
7032
diff
changeset
|
2332 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
|
2333 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2334 date = "" |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2335 |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2336 data_attr = { |
|
7031
0c99d1d0254a
flake8 fix 2: E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7030
diff
changeset
|
2337 "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
|
2338 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
|
2339 "data-width": width, |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2340 "data-height": height |
|
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2341 } |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
2342 |
|
6215
af372b9372f6
Add data attributes to classhelp to allow use with CSP.
John Rouillard <rouilj@ieee.org>
parents:
6150
diff
changeset
|
2343 return ('<a class="classhelp" %s href="javascript:help_window(' |
|
4052
f8ba421ee4b0
Quote ampersands in URLs.
Stefan Seefeld <stefan@seefeld.name>
parents:
4051
diff
changeset
|
2344 "'%s?@template=calendar&property=%s&form=%s%s', %d, %d)" |
|
7028
64d4d435ab3d
flake8: remove trailing whitespace after reformat
John Rouillard <rouilj@ieee.org>
parents:
7027
diff
changeset
|
2345 '">%s</a>'%(self.cgi_escape_attrs(**data_attr), |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2346 self._classname, self._name, form, date, width, |
|
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2347 height, label)) |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
2348 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2349 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2350 class IntervalHTMLProperty(HTMLProperty): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2351 def __init__(self, client, classname, nodeid, prop, name, value, |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2352 anonymous=0): |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2353 HTMLProperty.__init__(self, client, classname, nodeid, prop, |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2354 name, value, anonymous) |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
2355 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
|
2356 self._value.setTranslator(self._client.translator) |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
2357 |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2358 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
|
2359 """ 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
|
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 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2364 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2365 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2366 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2367 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2368 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
|
2369 """ 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
|
2370 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2371 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
|
2372 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2373 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2374 return self._value.pretty() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2375 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2376 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
|
2377 """ 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
|
2378 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2379 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
|
2380 """ |
|
3040
14322134dcef
fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents:
3006
diff
changeset
|
2381 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2382 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
|
2383 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2384 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
|
2385 if value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2386 value = '' |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
2387 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2388 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
|
2389 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2390 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2391 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2392 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
|
2393 """ Link HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2394 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
|
2395 information. Stringifying the object itself results in the value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2396 from the item being displayed. Accessing attributes of this object |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2397 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
|
2398 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
|
2399 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
|
2400 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
|
2401 """ |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
2402 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
|
2403 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
|
2404 # 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
|
2405 # 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
|
2406 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
|
2407 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
|
2408 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2409 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
|
2410 """ return a new HTMLItem """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2411 if not self._value: |
|
3394
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2412 # handle a special page templates lookup |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2413 if attr == '__render_with_namespace__': |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2414 def nothing(*args, **kw): |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2415 return '' |
|
5c7ff95fecad
work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents:
3383
diff
changeset
|
2416 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
|
2417 msg = self._('Attempt to look up %(attr)s on a missing value') |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
2418 return MissingValue(msg%locals()) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
2419 i = HTMLItem(self._client, self._prop.classname, self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2420 return getattr(i, attr) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2421 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2422 def __getitem__(self, item): |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2423 """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
|
2424 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
|
2425 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
|
2426 """ |
|
4879
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2427 if not self._value: |
|
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2428 msg = self._('Attempt to look up %(item)s on a missing value') |
|
302c967d710c
HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4878
diff
changeset
|
2429 return MissingValue(msg%locals()) |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2430 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
|
2431 return i[item] |
|
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
2432 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2433 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
|
2434 """ 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
|
2435 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2436 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
|
2437 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2438 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2439 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
|
2440 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2441 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2442 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
|
2443 if num_re.match(self._value): |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2444 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
|
2445 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
|
2446 default=self._("[label is missing]"))) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2447 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2448 value = self._value |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2449 else: |
|
3936
63d58cc1394a
make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents:
3909
diff
changeset
|
2450 value = self._value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2451 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
|
2452 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2453 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2454 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2455 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
|
2456 """ 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
|
2457 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2458 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
|
2459 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2460 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2461 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
|
2462 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2463 # edit field |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2464 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
|
2465 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2466 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2467 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2468 k = linkcl.getkey() |
|
4958
9b1302f9fb11
Fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4945
diff
changeset
|
2469 idparse = self._prop.try_id_parsing |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2470 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
|
2471 try: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2472 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
|
2473 except IndexError: |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2474 if idparse: |
|
4959
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2475 raise |
|
177b77302262
Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4958
diff
changeset
|
2476 value = '' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2477 else: |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
2478 value = self._value |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2479 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
|
2480 **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2481 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2482 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
|
2483 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
|
2484 """ 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
|
2485 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2486 "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
|
2487 "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
|
2488 "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
|
2489 "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
|
2490 "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
|
2491 label |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2492 "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
|
2493 (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
|
2494 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
|
2495 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
|
2496 "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
|
2497 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
|
2498 "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
|
2499 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
|
2500 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
|
2501 "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
|
2502 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
|
2503 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
|
2504 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
|
2505 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
|
2506 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2507 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
|
2508 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
|
2509 "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
|
2510 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2511 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
|
2512 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2513 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2514 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
|
2515 |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2516 # 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
|
2517 # 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
|
2518 # 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
|
2519 # 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
|
2520 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
|
2521 value = self._value |
|
4043
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2522 elif value == '-1': |
|
32965347a663
Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4042
diff
changeset
|
2523 value = None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2524 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2525 linkcl = self._db.getclass(self._prop.classname) |
|
7029
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
2526 l = ['<select %s>'%self.cgi_escape_attrs(name=self._formname, |
|
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
2527 **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2528 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2529 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2530 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
|
2531 s = 'selected="selected" ' |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
2532 l.append(self._('<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
|
2533 |
|
3361
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2534 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
|
2535 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
|
2536 if sort_on[0] in '+-': |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2537 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
|
2538 else: |
|
64cc03598c8a
fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents:
3357
diff
changeset
|
2539 sort_on = ('+', sort_on) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2540 else: |
| 4032 | 2541 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
|
2542 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2543 options = [opt |
|
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2544 for opt in linkcl.filter(None, conditions, sort_on, (None, None)) |
|
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2545 if self._db.security.hasPermission("View", self._client.userid, |
|
3594
b5b6a6f7743a
fix bug in menu() permission filter [SF#1444440]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3584
diff
changeset
|
2546 linkcl.classname, itemid=opt)] |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2547 |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
2548 # 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
|
2549 if value and value not in options: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2550 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
|
2551 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2552 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2553 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2554 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2555 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2556 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2557 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2558 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2559 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2560 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
|
2561 propname=propname, labelprop=labelprop: \ |
|
843886af0ea1
Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4846
diff
changeset
|
2562 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
|
2563 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2564 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
|
2565 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
|
2566 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2567 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2568 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2569 # 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
|
2570 try: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2571 option = linkcl.get(optionid, k) or '' |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2572 except IndexError: |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2573 # optionid does not exist. E.G. |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2574 # IndexError: no such queue z |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2575 # 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
|
2576 # a new issue |
|
e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents:
6398
diff
changeset
|
2577 continue |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2578 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2579 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2580 s = '' |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2581 # 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
|
2582 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
|
2583 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2584 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
|
2585 s = 'selected="selected" ' |
|
7017
96be63649c92
flake8 fix additional spaces within () and []
John Rouillard <rouilj@ieee.org>
parents:
6856
diff
changeset
|
2586 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
|
2587 selected_mark = showdef |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2588 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2589 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2590 if showid: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2591 lab = '%s%s: %s'%(self._prop.classname, optionid, option) |
|
3151
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2592 elif not option: |
|
6feac4fcf883
Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2593 lab = '%s%s'%(self._prop.classname, optionid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2594 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2595 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2596 |
|
5181
496f30da72f8
Add a new argument "showdef" to the template function menu(). When set
John Rouillard <rouilj@ieee.org>
parents:
5180
diff
changeset
|
2597 lab = lab + selected_mark |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2598 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2599 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2600 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2601 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2602 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2603 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2604 m.append(str(fn(optionid))) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2605 lab = lab + ' (%s)'%', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2606 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2607 # 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
|
2608 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
|
2609 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
|
2610 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
|
2611 lab = html_escape(tr(lab)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2612 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2613 l.append('</select>') |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2614 return '\n'.join(l) |
|
7025
66149a18f09e
flake8 E303 too many blank lines
John Rouillard <rouilj@ieee.org>
parents:
7024
diff
changeset
|
2615 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2616 # def checklist(self, ...) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2617 |
|
3194
f887e55edc94
replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
Richard Jones <richard@users.sourceforge.net>
parents:
3188
diff
changeset
|
2618 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2619 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
|
2620 """ Multilink HTMLProperty |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2621 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2622 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
|
2623 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
|
2624 """ |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2625 def __init__(self, *args, **kwargs): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2626 HTMLProperty.__init__(self, *args, **kwargs) |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
2627 if self._value: |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2628 display_value = lookupIds(self._db, self._prop, self._value, |
|
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
|
2629 fail_ok=1, do_lookup=False) |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2630 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
|
2631 # 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
|
2632 # 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
|
2633 # 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
|
2634 try: |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2635 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
|
2636 except: |
|
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2637 pass |
|
3271
572bbe7fa236
typo in recent fix
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3270
diff
changeset
|
2638 self._value = display_value |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
2639 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2640 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
|
2641 """ length of the multilink """ |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2642 return len(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2643 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2644 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
|
2645 """ no extended attribute accesses make sense here """ |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
2646 raise AttributeError(attr) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2647 |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2648 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
|
2649 """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
|
2650 check = self._db.security.hasPermission |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2651 userid = self._client.userid |
|
0b7990f54778
fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents:
3194
diff
changeset
|
2652 classname = self._prop.classname |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2653 if check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
2654 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
|
2655 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
|
2656 itemid=value, |
|
24945480d24c
Iterate over multilink items if they labelprop is accessible to the
John Rouillard <rouilj@ieee.org>
parents:
5217
diff
changeset
|
2657 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
|
2658 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
|
2659 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2660 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
|
2661 """ 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
|
2662 """ |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2663 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
|
2664 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2665 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
|
2666 """ 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
|
2667 """ |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2668 l = self._value[:] |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
2669 l.reverse() |
|
3200
d2b1a946fdf4
change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents:
3198
diff
changeset
|
2670 return self.viewableGenerator(l) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2671 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2672 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
|
2673 """ 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
|
2674 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2675 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
|
2676 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
|
2677 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2678 """ |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2679 |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2680 # 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
|
2681 # 0 to sort to sort None first |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2682 # 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
|
2683 NoneCode = (2, 0)[NoneFirst] |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2684 |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2685 value = list(self.__iter__()) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2686 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2687 if not value: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2688 # return empty list, nothing to sort. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2689 return value |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2690 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2691 # determine orderprop for property if property is a link or multilink |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2692 prop = self._db.getclass(self._classname).getprops()[property] |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2693 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
|
2694 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
|
2695 sort_by_link = True |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2696 else: |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2697 orderprop = property |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2698 sort_by_link = False |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2699 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2700 def keyfunc(v): |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2701 # 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
|
2702 # type) to sort function. |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2703 # 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
|
2704 # 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
|
2705 # python type (int. str ...) against None. |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2706 prop = v[property] |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2707 if not prop._value: |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2708 return (NoneCode, None) |
|
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2709 |
|
6444
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2710 if sort_by_link: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2711 val = prop[orderprop]._value |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2712 else: |
|
3ca8b6145167
issue2551122 - fixing order by a link/multilink broke other props
John Rouillard <rouilj@ieee.org>
parents:
6428
diff
changeset
|
2713 val = prop._value |
|
6421
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2714 |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
2715 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
|
2716 return (NoneCode, None) |
|
9c57f2814597
Fix issue2551122 (MultilinkHTMLProperty sorted method issue)
John Rouillard <rouilj@ieee.org>
parents:
6414
diff
changeset
|
2717 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
|
2718 |
|
6414
3dbf1bc5e567
issue2551120 - The sorted method of MultilinkHTMLProperty crashes ...
John Rouillard <rouilj@ieee.org>
parents:
6404
diff
changeset
|
2719 value.sort(key=keyfunc, reverse=reverse) |
|
2883
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2720 return value |
|
1ca5ebe9b16a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2880
diff
changeset
|
2721 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2722 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
|
2723 """ 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
|
2724 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
|
2725 """ |
|
1325
2e5a9fc7abd5
allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents:
1323
diff
changeset
|
2726 return str(value) in self._value |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
2727 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2728 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
|
2729 """Is my _value not []?""" |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
2730 return self._value != [] |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2731 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2732 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
|
2733 """ 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
|
2734 """ |
|
3117
460eb0209a9e
Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
3104
diff
changeset
|
2735 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
|
2736 return self._('[hidden]') |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2737 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2738 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2739 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2740 labels = [] |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2741 for v in self._value: |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2742 if num_re.match(v): |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2743 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
|
2744 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
|
2745 default=self._("[label is missing]")) |
|
4058
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2746 except IndexError: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2747 label = None |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2748 # fall back to designator if label is None |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2749 if label is None: label = '%s%s'%(self._prop.classname, k) |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2750 else: |
|
3057092623e1
Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents:
4057
diff
changeset
|
2751 label = v |
|
3401
62e4032cb280
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3394
diff
changeset
|
2752 labels.append(label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2753 value = ', '.join(labels) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2754 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
|
2755 value = html_escape(value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2756 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2757 |
|
4267
c5f52c2c9e36
Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents:
4233
diff
changeset
|
2758 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
|
2759 """ 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
|
2760 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2761 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
|
2762 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2763 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2764 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
|
2765 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2766 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
|
2767 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2768 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
|
2769 value = self._value[:] |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2770 # 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
|
2771 if not linkcl.getkey(): |
|
7030
bb3845cf6b8e
flake8 E225 missing whitespace around operator
John Rouillard <rouilj@ieee.org>
parents:
7029
diff
changeset
|
2772 showid = 1 |
|
4339
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2773 if not showid: |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2774 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
|
2775 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
|
2776 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
|
2777 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
|
2778 |
|
663664c4e626
Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents:
4333
diff
changeset
|
2779 return self.input(name=self._formname, size=size, **kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2780 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2781 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
|
2782 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
|
2783 **conditions): |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
2784 """ 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
|
2785 |
|
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2786 "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
|
2787 "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
|
2788 "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
|
2789 "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
|
2790 label |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2791 "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
|
2792 "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
|
2793 (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
|
2794 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
|
2795 For example: ('-', 'order'), '+name'. |
|
3270
e4607e12d030
ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3253
diff
changeset
|
2796 |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
2797 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
|
2798 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
|
2799 "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
|
2800 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2801 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
|
2802 """ |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2803 if not self.is_edit_ok(): |
|
3971
ff3a8b7d1819
security fixes
Richard Jones <richard@users.sourceforge.net>
parents:
3968
diff
changeset
|
2804 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
|
2805 |
|
3470
fd32170475f5
allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents:
3461
diff
changeset
|
2806 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
|
2807 value = self._value |
|
5548
fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents:
5492
diff
changeset
|
2808 # 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
|
2809 # 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
|
2810 # 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
|
2811 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
|
2812 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2813 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
|
2814 |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2815 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
|
2816 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
|
2817 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
|
2818 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
|
2819 else: |
|
7bc1e9c42a26
allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents:
3361
diff
changeset
|
2820 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
|
2821 else: |
| 4032 | 2822 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
|
2823 |
|
3565
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2824 options = [opt |
|
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2825 for opt in linkcl.filter(None, conditions, sort_on) |
|
32343bfc3da0
add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3562
diff
changeset
|
2826 if self._db.security.hasPermission("View", self._client.userid, |
|
3594
b5b6a6f7743a
fix bug in menu() permission filter [SF#1444440]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3584
diff
changeset
|
2827 linkcl.classname, itemid=opt)] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2828 |
|
4042
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2829 # 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
|
2830 for val in value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2831 if val not in options: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2832 options.insert(0, val) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2833 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2834 if not height: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2835 height = len(options) |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2836 if value: |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2837 # The "no selection" option. |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2838 height += 1 |
|
8831882170fc
Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents:
4040
diff
changeset
|
2839 height = min(height, 7) |
|
7029
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
2840 l = ['<select multiple %s>'%self.cgi_escape_attrs(name=self._formname, |
|
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
2841 size=height, |
|
0409659241c5
flake8: E251 unexpected spaces around keyword / parameter equals
John Rouillard <rouilj@ieee.org>
parents:
7028
diff
changeset
|
2842 **html_kwargs)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2843 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
|
2844 |
|
5995
b4b5b7afacd9
issue2551007 - Selection fields are not translated
John Rouillard <rouilj@ieee.org>
parents:
5991
diff
changeset
|
2845 if value: # FIXME '- no selection -' mark for translation |
|
4054
6070bc4935fa
Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents:
4053
diff
changeset
|
2846 l.append('<option value="%s">- no selection -</option>' |
|
6070bc4935fa
Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents:
4053
diff
changeset
|
2847 % ','.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
|
2848 |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2849 if additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2850 additional_fns = [] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2851 props = linkcl.getprops() |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2852 for propname in additional: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2853 prop = props[propname] |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2854 if isinstance(prop, hyperdb.Link): |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2855 cl = self._db.getclass(prop.classname) |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2856 labelprop = cl.labelprop() |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2857 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
|
2858 propname=propname, labelprop=labelprop: \ |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2859 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
|
2860 else: |
|
5062
2ac11cc397eb
Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5061
diff
changeset
|
2861 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
|
2862 linkcl.get(optionid, propname) |
|
e8ae54db8b95
Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4847
diff
changeset
|
2863 additional_fns.append(fn) |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
2864 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2865 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2866 # 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
|
2867 option = linkcl.get(optionid, k) or '' |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2868 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2869 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2870 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2871 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
|
2872 s = 'selected="selected" ' |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2873 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2874 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2875 if showid: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
2876 lab = '%s%s: %s'%(self._prop.classname, optionid, option) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2877 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2878 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2879 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2880 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2881 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2882 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2883 m = [] |
|
4053
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2884 for fn in additional_fns: |
|
f2030089dac6
Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents:
4052
diff
changeset
|
2885 m.append(str(fn(optionid))) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2886 lab = lab + ' (%s)'%', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2887 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
2888 # 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
|
2889 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
|
2890 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
|
2891 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
|
2892 lab = html_escape(tr(lab)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2893 l.append('<option %svalue="%s">%s</option>'%(s, optionid, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2894 lab)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2895 l.append('</select>') |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2896 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2897 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2898 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2899 # 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
|
2900 propclasses = [ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2901 (hyperdb.String, StringHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2902 (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
|
2903 (hyperdb.Integer, IntegerHTMLProperty), |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2904 (hyperdb.Boolean, BooleanHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2905 (hyperdb.Date, DateHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2906 (hyperdb.Interval, IntervalHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2907 (hyperdb.Password, PasswordHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2908 (hyperdb.Link, LinkHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2909 (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
|
2910 ] |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2911 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2912 |
|
4396
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2913 def register_propclass(prop, cls): |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
2914 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
|
2915 p, c = propclass |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2916 if prop == p: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2917 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
|
2918 break |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2919 else: |
|
172489ea9e07
allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents:
4391
diff
changeset
|
2920 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
|
2921 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2922 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2923 def make_key_function(db, classname, sort_on=None): |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2924 """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
|
2925 |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2926 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
|
2927 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2928 linkcl = db.getclass(classname) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
2929 if sort_on is None: |
| 4032 | 2930 sort_on = linkcl.orderprop() |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
2931 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2932 def keyfunc(a): |
|
4417
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2933 if num_re.match(a): |
|
cc36be59ebd8
make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents:
4413
diff
changeset
|
2934 a = linkcl.get(a, sort_on) |
|
6689
994893cf3e1a
Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6658
diff
changeset
|
2935 # In Python3 we may not compare strings and None |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2936 if a is None: |
|
6689
994893cf3e1a
Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6658
diff
changeset
|
2937 return '' |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2938 return a |
|
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5404
diff
changeset
|
2939 return keyfunc |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2940 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2941 |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
2942 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
|
2943 """ 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
|
2944 .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
|
2945 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2946 if isinstance(value, type([])): |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
2947 return [value.value for value in value] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2948 else: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2949 value = value.value.strip() |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2950 if not value: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
2951 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
|
2952 return [v.strip() for v in value.split(',')] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2953 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
2954 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
2955 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
|
2956 """The *request*, holding the CGI form and environment. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2957 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2958 - "form" the CGI form as a cgi.FieldStorage |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2959 - "env" the CGI environment variables |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2960 - "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
|
2961 - "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
|
2962 - "language" as determined by the browser or config |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2963 - "classname" the current classname (possibly None) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2964 - "template" the current template (suffix, also possibly None) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
2965 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2966 Index args: |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
2967 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2968 - "columns" dictionary of the columns to display in an index page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2969 - "show" a convenience access to columns - request/show/colname will |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2970 be true if the columns should be displayed, false otherwise |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2971 - "sort" index sort column (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2972 - "group" index grouping property (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2973 - "filter" properties to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2974 - "filterspec" values to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
2975 - "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
|
2976 """ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
2977 def __repr__(self): |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3710
diff
changeset
|
2978 return '<HTMLRequest %r>'%self.__dict__ |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3479
diff
changeset
|
2979 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2980 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
|
2981 # _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
|
2982 self._client = self.client = client |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2983 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2984 # easier access vars |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2985 self.form = client.form |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2986 self.env = client.env |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2987 self.base = client.base |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
2988 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
|
2989 self.language = client.language |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2990 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2991 # store the current class name and action |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2992 self.classname = client.classname |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
2993 self.nodeid = client.nodeid |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
2994 self.template = client.template |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2995 |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2996 # the special char to use for special vars |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2997 self.special_char = '@' |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2998 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
2999 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
|
3000 |
|
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
|
3001 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
|
3002 |
|
3584
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3003 def current_url(self): |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3004 url = self.base |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3005 if self.classname: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3006 url += self.classname |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3007 if self.nodeid: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3008 url += self.nodeid |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3009 args = {} |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3010 if self.template: |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3011 args['@template'] = self.template |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3012 return self.indexargs_url(url, args) |
|
35b35a152b40
fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents:
3582
diff
changeset
|
3013 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3014 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
|
3015 """ 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
|
3016 """ |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3017 fields = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3018 dirs = [] |
|
3698
c2d232b377d5
optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3696
diff
changeset
|
3019 for special in '@:': |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3020 idx = 0 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3021 key = '%s%s%d'%(special, name, idx) |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3022 while self._form_has_key(key): |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3023 self.special_char = special |
|
4040
b6a2251394dd
Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents:
4032
diff
changeset
|
3024 fields.append(self.form.getfirst(key)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3025 dirkey = '%s%sdir%d'%(special, name, idx) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3026 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
|
3027 dirs.append(self.form.getfirst(dirkey)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3028 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3029 dirs.append(None) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3030 idx += 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3031 key = '%s%s%d'%(special, name, idx) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3032 # backward compatible (and query) URL format |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3033 key = special + name |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3034 dirkey = key + 'dir' |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3035 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
|
3036 fields = handleListCGIValue(self.form[key]) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3037 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
|
3038 dirs.append(self.form.getfirst(dirkey)) |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3039 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
|
3040 break |
| 5095 | 3041 |
| 3042 # sometimes requests come in without a class | |
| 3043 # chances are they won't have any filter params, | |
| 3044 # in that case anyway but... | |
| 3045 if self.classname: | |
| 3046 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
|
3047 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
|
3048 if f.startswith('-'): |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3049 dir, propname = '-', f[1:] |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3050 elif d: |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3051 dir, propname = '-', f |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3052 else: |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3053 dir, propname = '+', f |
| 5095 | 3054 # if no classname, just append the propname unchecked. |
| 3055 # this may be valid for some actions that bypass classes. | |
| 3056 if self.classname and cls.get_transitive_prop(propname) is None: | |
|
5094
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3057 self.client.add_error_message("Unknown %s property %s"%(name, propname)) |
|
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3058 else: |
|
92d33d3125a0
Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents:
5087
diff
changeset
|
3059 var.append((dir, propname)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3060 |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3061 def _form_has_key(self, name): |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3062 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
|
3063 return name in self.form |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3064 except TypeError: |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3065 pass |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3066 return False |
|
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3067 |
|
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
|
3068 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
|
3069 """ 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
|
3070 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3071 # 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
|
3072 self.columns = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3073 for name in ':columns @columns'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3074 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3075 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3076 self.columns = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3077 break |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3078 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
|
3079 security = self._client.db.security |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3080 userid = self._client.userid |
| 1002 | 3081 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3082 # sorting and grouping |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3083 self.sort = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3084 self.group = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3085 self._parse_sort(self.sort, 'sort') |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3086 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
|
3087 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
|
3088 self.group = security.filterSortspec(userid, self.classname, self.group) |
| 1002 | 3089 |
| 3090 # filtering | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3091 self.filter = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3092 for name in ':filter @filter'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3093 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3094 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3095 self.filter = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3096 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3097 self.filterspec = {} |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
3098 db = self.client.db |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3099 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
|
3100 cls = db.getclass(self.classname) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3101 for name in self.filter: |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3102 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
|
3103 continue |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3104 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
|
3105 fv = self.form[name] |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3106 if (isinstance(prop, hyperdb.Link) or |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3107 isinstance(prop, hyperdb.Multilink)): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3108 self.filterspec[name] = lookupIds(db, prop, |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3109 handleListCGIValue(fv)) |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3110 else: |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3111 if isinstance(fv, type([])): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
3112 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
|
3113 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
|
3114 # 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
|
3115 self.filterspec[name] = handleListCGIValue(fv) |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3116 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
3117 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
|
3118 self.filterspec = security.filterFilterspec(userid, self.classname, |
|
261c9f913ff7
- Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4417
diff
changeset
|
3119 self.filterspec) |
| 1002 | 3120 |
| 3121 # full-text search argument | |
| 3122 self.search_text = None | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3123 for name in ':search_text @search_text'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3124 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3125 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
|
3126 self.search_text = self.form.getfirst(name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3127 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3128 # pagination - size and start index |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3129 # figure batch args |
|
3158
cf824afdb76b
*cough* nothing to see here
Richard Jones <richard@users.sourceforge.net>
parents:
3157
diff
changeset
|
3130 self.pagesize = 50 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3131 for name in ':pagesize @pagesize'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3132 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3133 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3134 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3135 self.pagesize = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3136 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3137 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3138 pass |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3139 |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3140 self.startwith = 0 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
3141 for name in ':startwith @startwith'.split(): |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3142 if self._form_has_key(name): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3143 self.special_char = name[0] |
|
4115
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3144 try: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3145 self.startwith = int(self.form.getfirst(name)) |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3146 except ValueError: |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3147 # not an integer - ignore |
|
d61066deae67
handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents:
4112
diff
changeset
|
3148 pass |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3149 |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3150 # dispname |
|
4804
bc4144417861
More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4791
diff
changeset
|
3151 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
|
3152 self.dispname = self.form.getfirst('@dispname') |
|
3689
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3153 else: |
|
c28d94070403
fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3665
diff
changeset
|
3154 self.dispname = None |
|
3549
f6719836e521
allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents:
3535
diff
changeset
|
3155 |
|
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
|
3156 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
|
3157 """ 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
|
3158 values. |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3159 """ |
|
1693
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3160 env = {'QUERY_STRING': url} |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3161 self.form = cgi.FieldStorage(environ=env) |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
3162 |
|
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
|
3163 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
|
3164 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3165 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
|
3166 """ 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
|
3167 """ |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3168 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
|
3169 if 'columns' in kwargs: |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2962
diff
changeset
|
3170 self.show = support.TruthDict(self.columns) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3171 |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3172 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
|
3173 """ 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
|
3174 """ |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1080
diff
changeset
|
3175 s = [self.client.db.config.TRACKER_NAME] |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3176 if self.classname: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3177 if self.client.nodeid: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3178 s.append('- %s%s'%(self.classname, self.client.nodeid)) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3179 else: |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3180 if self.template == 'item': |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3181 s.append('- new %s'%self.classname) |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3182 elif self.template == 'index': |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3183 s.append('- %s index'%self.classname) |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3184 else: |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
3185 s.append('- %s %s'%(self.classname, self.template)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3186 else: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3187 s.append('- home') |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3188 return ' '.join(s) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
3189 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3190 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3191 d = {} |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3192 d.update(self.__dict__) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3193 f = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3194 for k in self.form.keys(): |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3195 f += '\n %r=%r'%(k, handleListCGIValue(self.form[k])) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3196 d['form'] = f |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3197 e = '' |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3198 for k, v in self.env.items(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3199 e += '\n %r=%r'%(k, v) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3200 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
|
3201 return """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3202 form: %(form)s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3203 base: %(base)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3204 classname: %(classname)r |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
3205 template: %(template)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3206 columns: %(columns)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3207 sort: %(sort)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3208 group: %(group)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3209 filter: %(filter)r |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3210 search_text: %(search_text)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3211 pagesize: %(pagesize)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
3212 startwith: %(startwith)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3213 env: %(env)s |
|
3842
310e315624b1
Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3832
diff
changeset
|
3214 """%d |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3215 |
| 1002 | 3216 def indexargs_form(self, columns=1, sort=1, group=1, filter=1, |
|
5082
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3217 filterspec=1, search_text=1, exclude=[]): |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3218 """ 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
|
3219 |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3220 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
|
3221 If you want to have visible form elements in your tal/jinja |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3222 generated templates use the exclude aray to list the names for |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3223 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
|
3224 these elements in its output. |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3225 """ |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3226 l = [] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3227 sc = self.special_char |
|
7021
4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
John Rouillard <rouilj@ieee.org>
parents:
7020
diff
changeset
|
3228 |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3229 def add(k, v): |
|
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3230 l.append(self.input(type="hidden", name=k, value=v)) |
| 1002 | 3231 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
|
3232 add(sc+'columns', ','.join(self.columns)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3233 if sort: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3234 val = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3235 for dir, attr in self.sort: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3236 if dir == '-': |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3237 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3238 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3239 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3240 add(sc+'sort', ','.join(val)) |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3241 if group: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3242 val = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3243 for dir, attr in self.group: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3244 if dir == '-': |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3245 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3246 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3247 val.append(attr) |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3248 add(sc+'group', ','.join(val)) |
| 1002 | 3249 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
|
3250 add(sc+'filter', ','.join(self.filter)) |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3251 if self.classname and filterspec: |
|
4051
047402c4ec9b
Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents:
4043
diff
changeset
|
3252 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3253 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
|
3254 if k in exclude: |
|
c1f1465d5303
issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents:
5067
diff
changeset
|
3255 continue |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3256 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
|
3257 # 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
|
3258 # 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
|
3259 if (isinstance(cls.get_transitive_prop(k), hyperdb.String) |
|
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
|
3260 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
|
3261 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
|
3262 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3263 add(k, ','.join(v)) |
|
1353
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
3264 else: |
|
3782
51c07c04d258
clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents:
3779
diff
changeset
|
3265 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
|
3266 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
|
3267 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
|
3268 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
|
3269 add(sc+'startwith', self.startwith) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3270 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3271 |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3272 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
|
3273 """ Embed the current index args in a URL |
| 5192 | 3274 |
| 3275 If the value of an arg (in args dict) is None, | |
| 3276 the argument is excluded from the url. If you want | |
| 3277 an empty value use an empty string '' as the value. | |
| 3278 Use this in templates to conditionally | |
| 3279 include an arg if it is set to a value. E.G. | |
| 3280 {..., '@queryname': request.dispname or None, ...} | |
| 3281 will include @queryname in the url if there is a | |
| 3282 dispname otherwise the parameter will be omitted | |
| 3283 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
|
3284 """ |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
3285 q = urllib_.quote |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3286 sc = self.special_char |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3287 l = ['%s=%s'%(k, is_us(v) and q(v) or v) |
|
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3288 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
|
3289 # 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
|
3290 specials = {} |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3291 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
|
3292 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
|
3293 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
|
3294 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3295 # 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
|
3296 if self.columns and 'columns' not in specials: |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3297 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
|
3298 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
|
3299 val = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3300 for dir, attr in self.sort: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3301 if dir == '-': |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3302 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3303 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3304 val.append(attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3305 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
|
3306 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
|
3307 val = [] |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3308 for dir, attr in self.group: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3309 if dir == '-': |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3310 val.append('-'+attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3311 else: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3312 val.append(attr) |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3313 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
|
3314 if self.filter and 'filter' not in specials: |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
3315 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
|
3316 if self.search_text and 'search_text' not in specials: |
|
3104
97aec6907e69
merge from 0.7
Richard Jones <richard@users.sourceforge.net>
parents:
3068
diff
changeset
|
3317 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
|
3318 if 'pagesize' not in specials: |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3319 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
|
3320 if 'startwith' not in specials: |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3321 l.append(sc+'startwith=%s'%self.startwith) |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3322 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
3323 # 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
|
3324 if self.classname and self.filterspec: |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3325 cls = self.client.db.getclass(self.classname) |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3326 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
|
3327 if k not in args: |
|
7024
bac315283a55
flake8: E721 do not compare types, use 'isinstance()'
John Rouillard <rouilj@ieee.org>
parents:
7023
diff
changeset
|
3328 if isinstance(v, list): |
|
3635
53987aa153d2
Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3610
diff
changeset
|
3329 prop = cls.get_transitive_prop(k) |
|
3909
e89bcb28f683
indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3905
diff
changeset
|
3330 if k != 'id' and isinstance(prop, hyperdb.String): |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3331 l.append('%s=%s'%(k, '%20'.join([q(i) for i in v]))) |
|
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3332 else: |
|
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3333 l.append('%s=%s'%(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
|
3334 else: |
|
3068
c4e76c84f43d
another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents:
3060
diff
changeset
|
3335 l.append('%s=%s'%(k, q(v))) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3336 return '%s?%s'%(url, '&'.join(l)) |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3337 indexargs_href = indexargs_url |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3338 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3339 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
|
3340 return """ |
|
5217
17b213eab274
Add nonce to embedded script references.
John Rouillard <rouilj@ieee.org>
parents:
5211
diff
changeset
|
3341 <script nonce="%s" type="text/javascript"> |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3342 submitted = false; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3343 function submit_once() { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3344 if (submitted) { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3345 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
|
3346 return false; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3347 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3348 submitted = true; |
|
5172
fac171f0f27b
Fix submit_once Javascript function
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5166
diff
changeset
|
3349 return true; |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3350 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3351 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3352 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
|
3353 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
|
3354 HelpWin.focus () |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3355 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3356 </script> |
|
7026
d7f0eab25305
flake8 E231 missing whitespace after ',' or ':'
John Rouillard <rouilj@ieee.org>
parents:
7025
diff
changeset
|
3357 """%(self._client.client_nonce, self.base) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3358 |
|
4524
68bbefb72825
Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4483
diff
changeset
|
3359 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
|
3360 """ 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
|
3361 """ |
|
4328
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3362 check = self._client.db.security.hasPermission |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3363 userid = self._client.userid |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3364 if not check('Web Access', userid): |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3365 return Batch(self.client, [], self.pagesize, self.startwith, |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3366 classname=self.classname) |
|
3d224f7fb364
add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents:
4306
diff
changeset
|
3367 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3368 filterspec = self.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3369 sort = self.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3370 group = self.group |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3371 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3372 # get the list of ids we're batching over |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3373 klass = self.client.db.getclass(self.classname) |
| 1002 | 3374 if self.search_text: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3375 indexer = self.client.db.indexer |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3376 if indexer.query_language: |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3377 try: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3378 matches = indexer.search( |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3379 [self.search_text], klass) |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3380 except Exception as e: |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3381 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
|
3382 raise |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3383 else: |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3384 matches = indexer.search( |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3385 [u2s(w.upper()) for w in re.findall( |
|
6593
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3386 r'(?u)\b\w{%s,%s}\b' % (indexer.minlength, |
|
e70e2789bc2c
issue2551189 - increase text search maxlength
John Rouillard <rouilj@ieee.org>
parents:
6588
diff
changeset
|
3387 indexer.maxlength), |
|
6588
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3388 s2u(self.search_text, "replace") |
|
91ab3e0ffcd0
Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents:
6564
diff
changeset
|
3389 )], klass) |
| 1002 | 3390 else: |
| 3391 matches = None | |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3392 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3393 # filter for visibility |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3117
diff
changeset
|
3394 l = [id for id in klass.filter(matches, filterspec, sort, group) |
|
4524
68bbefb72825
Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4483
diff
changeset
|
3395 if check(permission, userid, self.classname, itemid=id)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3396 |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3397 # return the batch object, using IDs only |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3398 return Batch(self.client, l, self.pagesize, self.startwith, |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3399 classname=self.classname) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3400 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3401 |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
3402 # 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
|
3403 # Acquisition and add a couple of useful methods |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3404 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
|
3405 """ 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
|
3406 series of batches. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3407 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3408 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3409 Parameter Usage |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3410 ========= ======================================================== |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3411 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
|
3412 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
|
3413 size how big to make the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3414 start where to start (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3415 end where to end (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3416 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
|
3417 value, then it is combined with this batch |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3418 overlap the number of items shared between adjacent batches |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3419 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3420 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3421 Attributes: Note that the "start" attribute, unlike the |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3422 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
|
3423 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
|
3424 the batch. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3425 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3426 "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
|
3427 """ |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3428 def __init__(self, client, sequence, size, start, end=0, orphan=0, |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3429 overlap=0, classname=None): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3430 self.client = client |
| 1002 | 3431 self.last_index = self.last_item = None |
| 3432 self.current_item = None | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3433 self.classname = classname |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
3434 self.sequence_length = len(sequence) |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3435 ZTUtils.Batch.__init__(self, sequence, size, start, end, orphan, |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3436 overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3437 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3438 # overwrite so we can late-instantiate the HTMLItem instance |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3439 def __getitem__(self, index): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3440 if index < 0: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3441 if index + self.end < self.first: raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3442 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
|
3443 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3444 if index >= self.length: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3445 raise IndexError(index) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3446 |
| 1002 | 3447 # move the last_item along - but only if the fetched index changes |
| 3448 # (for some reason, index 0 is fetched twice) | |
| 3449 if index != self.last_index: | |
| 3450 self.last_item = self.current_item | |
| 3451 self.last_index = index | |
| 3452 | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3453 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
|
3454 if self.classname: |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3455 # 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
|
3456 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
|
3457 self.current_item = item |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
3458 return item |
| 1002 | 3459 |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3460 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
|
3461 """ 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
|
3462 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
|
3463 """ |
|
3369
18f1631c9b85
sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents:
3363
diff
changeset
|
3464 # 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
|
3465 # 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
|
3466 if self.last_item is None: |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3467 return 1 |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3689
diff
changeset
|
3468 for property in properties: |
|
7020
86312ca47ad7
flake8 E211 remove space before ( in function calls
John Rouillard <rouilj@ieee.org>
parents:
7019
diff
changeset
|
3469 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
|
3470 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
|
3471 if (str(self.last_item[property]) != |
|
9cc2566cc7d9
This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3699
diff
changeset
|
3472 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
|
3473 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
|
3474 else: |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3475 if (self.last_item[property]._value != |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3476 self.current_item[property]._value): |
|
976191d749fb
grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3698
diff
changeset
|
3477 return 1 |
| 1002 | 3478 return 0 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3479 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3480 # override these 'cos we don't have access to acquisition |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3481 def previous(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3482 if self.start == 1: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3483 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3484 return Batch(self.client, self._sequence, self.size, |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3485 self.first - self._size + self.overlap, 0, self.orphan, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3486 self.overlap) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3487 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3488 def next(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3489 try: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3490 self._sequence[self.end] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3491 except IndexError: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3492 return None |
|
5087
39af8a0f3446
Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents:
5082
diff
changeset
|
3493 return Batch(self.client, self._sequence, self.size, |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3494 self.end - self.overlap, 0, self.orphan, self.overlap) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3495 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3496 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3497 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
|
3498 """ 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
|
3499 """ |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3500 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
|
3501 self.client = client |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3502 |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
3503 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
|
3504 return Batch(self.client, sequence, size, start, end, orphan, |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3505 overlap) |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
3506 |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5193
diff
changeset
|
3507 def anti_csrf_nonce(self, lifetime=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5485
diff
changeset
|
3508 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
|
3509 |
|
5973
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3510 def timestamp(self): |
|
fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
John Rouillard <rouilj@ieee.org>
parents:
5947
diff
changeset
|
3511 return pack_timestamp() |
|
7019
e1528860e591
flake8 remove space from blank lines W293
John Rouillard <rouilj@ieee.org>
parents:
7018
diff
changeset
|
3512 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3513 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
|
3514 """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
|
3515 return urllib_.quote(url) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3516 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3517 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
|
3518 """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
|
3519 return html_escape(html) |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
3520 |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
3521 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
|
3522 """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
|
3523 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
|
3524 # backwards-compatibility |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
3525 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
|
3526 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
|
3527 raise AttributeError(name) |
|
3006
50b0f8e98247
fix API for templating utils extensions - remove "utils" arg
Richard Jones <richard@users.sourceforge.net>
parents:
2994
diff
changeset
|
3528 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
|
3529 |
|
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
|
3530 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
|
3531 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
|
3532 |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3533 def html_calendar(self, request): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3534 """Generate a HTML calendar. |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3535 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3536 `request` the roundup.request object |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3537 - @template : name of the template |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3538 - 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
|
3539 - 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
|
3540 back the date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3541 - date : current date |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3542 - 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
|
3543 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3544 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
|
3545 """ |
| 4333 | 3546 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
|
3547 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
|
3548 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
|
3549 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
|
3550 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
|
3551 form = request.form.getfirst("form") |
|
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3552 property = 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
|
3553 curr_date = "" |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3554 try: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3555 # 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
|
3556 # 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
|
3557 # 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
|
3558 # and assign them to today. |
|
7022
f4bfc1af5d95
flake8 inline comment spacing; too many leading #
John Rouillard <rouilj@ieee.org>
parents:
7021
diff
changeset
|
3559 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
|
3560 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
|
3561 except ValueError: |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3562 # 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
|
3563 # 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
|
3564 curr_date = current_date |
|
fe52cab8f5b5
issue2550932 - html_calendar produces templating errors for bad date strings
John Rouillard <rouilj@ieee.org>
parents:
5190
diff
changeset
|
3565 display = current_date |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3566 day = display.day |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3567 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3568 # 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
|
3569 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
|
3570 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
|
3571 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
|
3572 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
|
3573 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
|
3574 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
|
3575 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
|
3576 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
|
3577 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
|
3578 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
|
3579 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
|
3580 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
|
3581 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
|
3582 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
|
3583 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
|
3584 date_next_year = None |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3585 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3586 res = [] |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3587 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3588 base_link = "%s?@template=%s&property=%s&form=%s&date=%s" % \ |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3589 (request.classname, template, property, form, curr_date) |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3590 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3591 # navigation |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3592 # month |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3593 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
|
3594 res.append(' <table width="100%" class="calendar_nav"><tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3595 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
|
3596 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
|
3597 res.append(' <td><a href="%s&display=%s"><</a></td>' |
|
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
|
3598 % (base_link, 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
|
3599 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
|
3600 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3601 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
|
3602 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
|
3603 res.append(' <td><a href="%s&display=%s">></a></td>' |
|
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
|
3604 % (base_link, 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
|
3605 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
|
3606 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3607 # spacer |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3608 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
|
3609 # 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
|
3610 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
|
3611 res.append(' <td><a href="%s&display=%s"><</a></td>' |
|
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
|
3612 % (base_link, 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
|
3613 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
|
3614 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3615 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
|
3616 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
|
3617 res.append(' <td><a href="%s&display=%s">></a></td>' |
|
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
|
3618 % (base_link, 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
|
3619 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
|
3620 res.append(' <td></td>') |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3621 res.append(' </tr></table>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3622 res.append(' </td></tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3623 |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3624 # the calendar |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3625 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
|
3626 res.append(' <tr class="weekdays">') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3627 for day in calendar.weekheader(3).split(): |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3628 res.append(' <td>%s</td>'%day) |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3629 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3630 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
|
3631 res.append(' <tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3632 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
|
3633 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
|
3634 "if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); form[field].dispatchEvent(evt); } else { form[field].fireEvent('onchange'); }" \ |
|
f95650727b1c
got the indent wrong in the last change for templating.py
John Rouillard <rouilj@ieee.org>
parents:
5179
diff
changeset
|
3635 "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
|
3636 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
|
3637 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
|
3638 # highlight |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3639 style = "today" |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3640 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3641 style = "" |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3642 if day: |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3643 res.append(' <td class="%s"><a href="%s">%s</a></td>'%( |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3644 style, link, day)) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3645 else: |
|
3292
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3646 res.append(' <td></td>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3647 res.append(' </tr>') |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3648 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
|
3649 return "\n".join(res) |
|
8c7b522dc934
added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
3280
diff
changeset
|
3650 |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3651 |
|
4878
f6e76a03b502
HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4875
diff
changeset
|
3652 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
|
3653 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
|
3654 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
|
3655 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
|
3656 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
|
3657 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3658 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
|
3659 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3660 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
|
3661 # 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
|
3662 # 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
|
3663 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3664 # 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
|
3665 # |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3666 # 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
|
3667 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
|
3668 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
|
3669 |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3670 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
|
3671 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
|
3672 # Python 2 compatibility: |
|
3757449e00c4
Python 3 preparation: use __bool__ instead of __nonzero__.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5402
diff
changeset
|
3673 __nonzero__ = __bool__ |
|
5457
a35d4cc8cd1a
fix MissingValue / MockNull to return False on __bool__ and add a
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5448
diff
changeset
|
3674 def __contains__(self, key): return False |
|
5461
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3675 def __eq__(self, rhs): return False |
|
ad8031290639
Python 3 compatibility for missing / mock value
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5457
diff
changeset
|
3676 def __ne__(self, rhs): return False |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3677 def __str__(self): return '[%s]'%self.__description |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3678 def __repr__(self): return '<MissingValue 0x%x "%s">'%(id(self), |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3679 self.__description) |
|
7018
379a5e501dab
flake8: fix whitespace around : and operator and add blank lines
John Rouillard <rouilj@ieee.org>
parents:
7017
diff
changeset
|
3680 |
|
3164
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3681 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
|
3682 _ = gettext |
|
24476db8872f
nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents:
3159
diff
changeset
|
3683 |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
3684 # vim: set et sts=4 sw=4 : |
