Mercurial > p > roundup > code
annotate roundup/cgi/form_parser.py @ 7037:22183e7d1443
flake8 whitepace, indents, var names
address:
B007 Loop control variable 'id' not used within the loop body. If this is intended, start the name with an underscore.
E122 continuation line missing indentation or outdented
E127 continuation line over-indented for visual indent
E128 continuation line under-indented for visual indent
E129 visually indented line with same indent as next logical line
E701 multiple statements on one line (colon)
E703 statement ends with a semicolon
E741 ambiguous variable name 'l'
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 10 Oct 2022 15:43:13 -0400 |
| parents | 38dc223d90cc |
| children |
| rev | line source |
|---|---|
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
1 import mimetypes |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
2 import re |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
3 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
4 from roundup import hyperdb, date, password |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
5 from roundup.cgi import TranslationService |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
6 from roundup.cgi.exceptions import FormError |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
8 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
9 class FormParser: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
10 # edit form variable handling (see unit tests) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
11 FV_LABELS = r''' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
12 ^( |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
13 (?P<note>[@:]note)| |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
14 (?P<file>[@:]file)| |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
15 ( |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
16 ((?P<classname>%s)(?P<id>[-\d]+))? # optional leading designator |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
17 ((?P<required>[@:]required$)| # :required |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
18 ( |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
19 ( |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
20 (?P<add>[@:]add[@:])| # :add:<prop> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
21 (?P<remove>[@:]remove[@:])| # :remove:<prop> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
22 (?P<confirm>[@:]confirm[@:])| # :confirm:<prop> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
23 (?P<link>[@:]link[@:])| # :link:<prop> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
24 ([@:]) # just a separator |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
25 )? |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
26 (?P<propname>[^@:]+) # <prop> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
27 ) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
28 ) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
29 ) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
30 )$''' |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
31 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
32 def __init__(self, client): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
33 self.client = client |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
34 self.db = client.db |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
35 self.form = client.form |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
36 self.classname = client.classname |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
37 self.nodeid = client.nodeid |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
38 try: |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
39 self._ = self.gettext = client.gettext |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
40 self.ngettext = client.ngettext |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
41 except AttributeError: |
|
6658
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6062
diff
changeset
|
42 _translator = TranslationService.get_translation() |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
43 self._ = self.gettext = _translator.gettext |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
44 self.ngettext = _translator.ngettext |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
45 |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
46 def parse(self, create=0): |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
47 """ Item properties and their values are edited with html FORM |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
48 variables and their values. You can: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
49 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
50 - Change the value of some property of the current item. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
51 - Create a new item of any class, and edit the new item's |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
52 properties, |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
53 - Attach newly created items to a multilink property of the |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
54 current item. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
55 - Remove items from a multilink property of the current item. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
56 - Specify that some properties are required for the edit |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
57 operation to be successful. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
59 In the following, <bracketed> values are variable, "@" may be |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
60 either ":" or "@", and other text "required" is fixed. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
61 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
62 Most properties are specified as form variables: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
64 <propname> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
65 - property on the current context item |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
66 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
67 <designator>"@"<propname> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
68 - property on the indicated item (for editing related |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
69 information) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
70 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
71 Designators name a specific item of a class. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
72 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
73 <classname><N> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
74 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
75 Name an existing item of class <classname>. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
76 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
77 <classname>"-"<N> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
79 Name the <N>th new item of class <classname>. If the form |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
80 submission is successful, a new item of <classname> is |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
81 created. Within the submitted form, a particular |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
82 designator of this form always refers to the same new |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
83 item. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
84 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
85 Once we have determined the "propname", we look at it to see |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
86 if it's special: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
87 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
88 @required |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
89 The associated form value is a comma-separated list of |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
90 property names that must be specified when the form is |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
91 submitted for the edit operation to succeed. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
92 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
93 When the <designator> is missing, the properties are |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
94 for the current context item. When <designator> is |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
95 present, they are for the item specified by |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
96 <designator>. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
97 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
98 The "@required" specifier must come before any of the |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
99 properties it refers to are assigned in the form. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
100 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
101 @remove@<propname>=id(s) or @add@<propname>=id(s) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
102 The "@add@" and "@remove@" edit actions apply only to |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
103 Multilink properties. The form value must be a |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
104 comma-separate list of keys for the class specified by |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
105 the simple form variable. The listed items are added |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
106 to (respectively, removed from) the specified |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
107 property. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
109 @link@<propname>=<designator> |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
110 If the edit action is "@link@", the simple form |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
111 variable must specify a Link or Multilink property. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
112 The form value is a comma-separated list of |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
113 designators. The item corresponding to each |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
114 designator is linked to the property given by simple |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
115 form variable. These are collected up and returned in |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
116 all_links. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
117 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
118 None of the above (ie. just a simple form value) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
119 The value of the form variable is converted |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
120 appropriately, depending on the type of the property. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
121 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
122 For a Link('klass') property, the form value is a |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
123 single key for 'klass', where the key field is |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
124 specified in dbinit.py. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
125 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
126 For a Multilink('klass') property, the form value is a |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
127 comma-separated list of keys for 'klass', where the |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
128 key field is specified in dbinit.py. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
129 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
130 Note that for simple-form-variables specifiying Link |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
131 and Multilink properties, the linked-to class must |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
132 have a key field. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
133 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
134 For a String() property specifying a filename, the |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
135 file named by the form value is uploaded. This means we |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
136 try to set additional properties "filename" and "type" (if |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
137 they are valid for the class). Otherwise, the property |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
138 is set to the form value. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
139 |
|
5067
e424987d294a
Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents:
5066
diff
changeset
|
140 For Date(), Interval(), Boolean(), and Number(), Integer() |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
141 properties, the form value is converted to the |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
142 appropriate |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
143 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
144 Any of the form variables may be prefixed with a classname or |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
145 designator. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
146 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
147 Two special form values are supported for backwards |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
148 compatibility: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
149 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
150 @note |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
151 This is equivalent to:: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
152 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
153 @link@messages=msg-1 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
154 msg-1@content=value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
155 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
156 except that in addition, the "author" and "date" |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
157 properties of "msg-1" are set to the userid of the |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
158 submitter, and the current time, respectively. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
159 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
160 @file |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
161 This is equivalent to:: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
163 @link@files=file-1 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
164 file-1@content=value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
165 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
166 The String content value is handled as described above for |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
167 file uploads. |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
168 If "multiple" is turned on for file uploads in the html |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
169 template, multiple links are generated:: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
170 |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
171 @link@files=file-2 |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
172 file-2@content=value |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
173 ... |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
174 |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
175 depending on how many files the user has attached. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
176 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
177 If both the "@note" and "@file" form variables are |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
178 specified, the action:: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
179 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
180 @link@msg-1@files=file-1 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
181 |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
182 is also performed. If "multiple" is specified this is |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
183 carried out for each of the attached files. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
184 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
185 We also check that FileClass items have a "content" property with |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
186 actual content, otherwise we remove them from all_props before |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
187 returning. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
188 |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
189 The return from this method is a dict of |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
190 (classname, id): properties |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
191 ... this dict _always_ has an entry for the current context, |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
192 even if it's empty (ie. a submission for an existing issue that |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
193 doesn't result in any changes would return {('issue','123'): {}}) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
194 The id may be None, which indicates that an item should be |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
195 created. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
196 """ |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
197 # some very useful variables |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
198 db = self.db |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
199 form = self.form |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
200 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
201 if not hasattr(self, 'FV_SPECIAL'): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
202 # generate the regexp for handling special form values |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
203 classes = '|'.join(db.classes.keys()) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
204 # specials for parsePropsFromForm |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
205 # handle the various forms (see unit tests) |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
206 self.FV_SPECIAL = re.compile(self.FV_LABELS % classes, re.VERBOSE) |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
207 self.FV_DESIGNATOR = re.compile(r'(%s)([-\d]+)' % classes) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
208 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
209 # these indicate the default class / item |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
210 default_cn = self.classname |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
211 default_cl = self.db.classes[default_cn] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
212 default_nodeid = self.nodeid |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
213 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
214 # we'll store info about the individual class/item edit in these |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
215 all_required = {} # required props per class/item |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
216 all_props = {} # props to set per class/item |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
217 got_props = {} # props received per class/item |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
218 all_propdef = {} # note - only one entry per class |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
219 all_links = [] # as many as are required |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
220 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
221 # we should always return something, even empty, for the context |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
222 all_props[(default_cn, default_nodeid)] = {} |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
223 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
224 keys = form.keys() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
225 timezone = db.getUserTimezone() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
226 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
227 # sentinels for the :note and :file props |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
228 have_note = have_file = 0 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
229 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
230 # extract the usable form labels from the form |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
231 matches = [] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
232 for key in keys: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
233 m = self.FV_SPECIAL.match(key) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
234 if m: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
235 matches.append((key, m.groupdict())) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
236 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
237 # now handle the matches |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
238 for key, d in matches: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
239 if d['classname']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
240 # we got a designator |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
241 cn = d['classname'] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
242 cl = self.db.classes[cn] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
243 nodeid = d['id'] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
244 propname = d['propname'] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
245 elif d['note']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
246 # the special note field |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
247 cn = 'msg' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
248 cl = self.db.classes[cn] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
249 nodeid = '-1' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
250 propname = 'content' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
251 all_links.append((default_cn, default_nodeid, 'messages', |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
252 [('msg', '-1')])) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
253 have_note = 1 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
254 elif d['file']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
255 # the special file field |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
256 cn = default_cn |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
257 cl = default_cl |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
258 nodeid = default_nodeid |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
259 propname = 'files' |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
260 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
261 # default |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
262 cn = default_cn |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
263 cl = default_cl |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
264 nodeid = default_nodeid |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
265 propname = d['propname'] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
266 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
267 # the thing this value relates to is... |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
268 this = (cn, nodeid) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
269 |
|
2010
1b11ffd8015e
forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents:
2004
diff
changeset
|
270 # skip implicit create if this isn't a create action |
|
1b11ffd8015e
forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents:
2004
diff
changeset
|
271 if not create and nodeid is None: |
|
1b11ffd8015e
forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents:
2004
diff
changeset
|
272 continue |
|
1b11ffd8015e
forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents:
2004
diff
changeset
|
273 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
274 # get more info about the class, and the current set of |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
275 # form props for it |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
276 if cn not in all_propdef: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
277 all_propdef[cn] = cl.getprops() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
278 propdef = all_propdef[cn] |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
279 if this not in all_props: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
280 all_props[this] = {} |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
281 props = all_props[this] |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
282 if this not in got_props: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
283 got_props[this] = {} |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
284 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
285 # is this a link command? |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
286 if d['link']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
287 value = [] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
288 for entry in self.extractFormList(form[key]): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
289 m = self.FV_DESIGNATOR.match(entry) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
290 if not m: |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
291 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
292 'link "%(key)s" ' |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
293 'value "%(entry)s" not a designator') % locals()) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
294 value.append((m.group(1), m.group(2))) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
295 |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
296 # get details of linked class |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
297 lcn = m.group(1) |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
298 lcl = self.db.classes[lcn] |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
299 lnodeid = m.group(2) |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
300 if lcn not in all_propdef: |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
301 all_propdef[lcn] = lcl.getprops() |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
302 if (lcn, lnodeid) not in all_props: |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
303 all_props[(lcn, lnodeid)] = {} |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
304 if (lcn, lnodeid) not in got_props: |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
305 got_props[(lcn, lnodeid)] = {} |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
306 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
307 # make sure the link property is valid |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
308 if (not isinstance(propdef[propname], hyperdb.Multilink) and |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
309 not isinstance(propdef[propname], hyperdb.Link)): |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
310 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
311 '%(class)s %(property)s ' |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
312 'is not a link or multilink property') % { |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
313 'class': cn, 'property': propname}) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
314 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
315 all_links.append((cn, nodeid, propname, value)) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
316 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
317 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
318 # detect the special ":required" variable |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
319 if d['required']: |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
320 for entry in self.extractFormList(form[key]): |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
321 m = self.FV_SPECIAL.match(entry) |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
322 if not m: |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
323 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
324 'The form action claims to ' |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
325 'require property "%(property)s" ' |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
326 'which doesn\'t exist') % { |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
327 'property': propname}) |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
328 if m.group('classname'): |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
329 this = (m.group('classname'), m.group('id')) |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
330 entry = m.group('propname') |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
331 if this not in all_required: |
|
3656
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
332 all_required[this] = [] |
|
0119e04886d8
@required in forms may now specify properties of linked items
Richard Jones <richard@users.sourceforge.net>
parents:
3651
diff
changeset
|
333 all_required[this].append(entry) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
334 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
335 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
336 # see if we're performing a special multilink action |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
337 mlaction = 'set' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
338 if d['remove']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
339 mlaction = 'remove' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
340 elif d['add']: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
341 mlaction = 'add' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
342 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
343 # does the property exist? |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
344 if propname not in propdef: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
345 if mlaction != 'set': |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
346 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
347 'You have submitted a %(action)s ' |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
348 'action for the property "%(property)s" ' |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
349 'which doesn\'t exist') % { |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
350 'action': mlaction, 'property': propname}) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
351 # the form element is probably just something we don't care |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
352 # about - ignore it |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
353 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
354 proptype = propdef[propname] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
355 |
|
3559
4b80c330f02b
translate class name in "required property not supplied" message [SF#1429669]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3491
diff
changeset
|
356 # Get the form value. This value may be a MiniFieldStorage |
|
4b80c330f02b
translate class name in "required property not supplied" message [SF#1429669]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3491
diff
changeset
|
357 # or a list of MiniFieldStorages. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
358 value = form[key] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
359 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
360 # handle unpacking of the MiniFieldStorage / list form value |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
361 if d['file']: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
362 assert isinstance(proptype, hyperdb.Multilink) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
363 # value is a file upload... we *always* handle multiple |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
364 # files here (html5) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
365 if not isinstance(value, type([])): |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
366 value = [value] |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
367 elif isinstance(proptype, hyperdb.Multilink): |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
368 value = self.extractFormList(value) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
369 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
370 # multiple values are not OK |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
371 if isinstance(value, type([])): |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
372 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
373 'You have submitted more than one ' |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
374 'value for the %s property') % propname) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
375 # value might be a single file upload |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
376 if not getattr(value, 'filename', None): |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
377 value = value.value.strip() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
378 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
379 # now that we have the props field, we need a teensy little |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
380 # extra bit of help for the old :note field... |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
381 if d['note'] and value: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
382 props['author'] = self.db.getuid() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
383 props['date'] = date.Date() |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
384 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
385 # handle by type now |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
386 if isinstance(proptype, hyperdb.Password): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
387 if not value: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
388 # ignore empty password values |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
389 continue |
|
4559
86a270b5b993
- Ignore confirm set() fields by themselves in the absence of non-"confirm"
Richard Jones <richard@mechanicalcat.net>
parents:
4486
diff
changeset
|
390 if d['confirm']: |
|
86a270b5b993
- Ignore confirm set() fields by themselves in the absence of non-"confirm"
Richard Jones <richard@mechanicalcat.net>
parents:
4486
diff
changeset
|
391 # ignore the "confirm" password value by itself |
|
86a270b5b993
- Ignore confirm set() fields by themselves in the absence of non-"confirm"
Richard Jones <richard@mechanicalcat.net>
parents:
4486
diff
changeset
|
392 continue |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
393 for key, d in matches: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
394 if d['confirm'] and d['propname'] == propname: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
395 confirm = form[key] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
396 break |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
397 else: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
398 raise FormError(self._('Password and confirmation text ' |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
399 'do not match')) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
400 if isinstance(confirm, type([])): |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
401 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
402 'You have submitted more than one ' |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
403 'value for the %s property') % propname) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
404 if value != confirm.value: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
405 raise FormError(self._('Password and confirmation text ' |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
406 'do not match')) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
407 try: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
408 value = password.Password(value, scheme=proptype.scheme, |
|
5053
9792b18e0b19
issue 2550880: Ability to choose password store scheme and SSHA support.
John Rouillard <rouilj@ieee.org>
parents:
4559
diff
changeset
|
409 config=self.db.config) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5195
diff
changeset
|
410 except hyperdb.HyperdbValueError as msg: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
411 raise FormError(msg) |
|
5066
d2256fcfd81f
Fix regression in password parsing
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5065
diff
changeset
|
412 elif d['file']: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
413 # This needs to be a Multilink and is checked above |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
414 fcn = 'file' |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
415 fcl = self.db.classes[fcn] |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
416 fpropname = 'content' |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
417 if fcn not in all_propdef: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
418 all_propdef[fcn] = fcl.getprops() |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
419 fpropdef = all_propdef[fcn] |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
420 have_file = [] |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
421 for n, v in enumerate(value): |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
422 if not hasattr(v, 'filename'): |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
423 raise FormError(self._('Not a file attachment')) |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
424 # skip if the upload is empty |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
425 if not v.filename: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
426 continue |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
427 fnodeid = str(-(n+1)) |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
428 have_file.append(fnodeid) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
429 fthis = (fcn, fnodeid) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
430 if fthis not in all_props: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
431 all_props[fthis] = {} |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
432 fprops = all_props[fthis] |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
433 all_links.append((cn, nodeid, 'files', |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
434 [('file', fnodeid)])) |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
435 |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
436 fprops['content'] = self.parse_file(fpropdef, fprops, v) |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
437 value = None |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
438 nodeid = None |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
439 elif isinstance(proptype, hyperdb.Multilink): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
440 # convert input to list of ids |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
441 try: |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
442 id_list = hyperdb.rawToHyperdb(self.db, cl, nodeid, |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
443 propname, value) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5195
diff
changeset
|
444 except hyperdb.HyperdbValueError as msg: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
445 raise FormError(msg) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
446 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
447 # now use that list of ids to modify the multilink |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
448 if mlaction == 'set': |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
449 value = id_list |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
450 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
451 # we're modifying the list - get the current list of ids |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
452 if propname in props: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
453 existing = props[propname] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
454 elif nodeid and not nodeid.startswith('-'): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
455 existing = cl.get(nodeid, propname, []) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
456 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
457 existing = [] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
458 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
459 # now either remove or add |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
460 if mlaction == 'remove': |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
461 # remove - handle situation where the id isn't in |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
462 # the list |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
463 for entry in id_list: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
464 try: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
465 existing.remove(entry) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
466 except ValueError: |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
467 raise FormError(self._( |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
468 'property ' |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
469 '"%(propname)s": "%(value)s" ' |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
470 'not currently in list') % { |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
471 'propname': propname, 'value': entry}) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
472 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
473 # add - easy, just don't dupe |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
474 for entry in id_list: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
475 if entry not in existing: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
476 existing.append(entry) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
477 value = existing |
|
4050
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
478 # Sort the value in the same order used by |
|
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
479 # Multilink.from_raw. |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
480 value.sort(key=int) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
481 |
|
5522
c5c33e62da39
Fix absent file uploads with Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
482 elif value == '' or value == b'': |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
483 # other types should be None'd if there's no value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
484 value = None |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
485 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
486 # handle all other types |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
487 try: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
488 # Try handling file upload |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
489 if (isinstance(proptype, hyperdb.String) and |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
490 hasattr(value, 'filename') and |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
491 value.filename is not None): |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
492 value = self.parse_file(propdef, props, value) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
493 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
494 value = hyperdb.rawToHyperdb(self.db, cl, nodeid, |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
495 propname, value) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5195
diff
changeset
|
496 except hyperdb.HyperdbValueError as msg: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
497 raise FormError(msg) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
498 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
499 # register that we got this property |
|
3777
74aebbbea305
Sorry for the mega-patch - was all done on the train:
Richard Jones <richard@users.sourceforge.net>
parents:
3767
diff
changeset
|
500 if isinstance(proptype, hyperdb.Multilink): |
|
74aebbbea305
Sorry for the mega-patch - was all done on the train:
Richard Jones <richard@users.sourceforge.net>
parents:
3767
diff
changeset
|
501 if value != []: |
|
74aebbbea305
Sorry for the mega-patch - was all done on the train:
Richard Jones <richard@users.sourceforge.net>
parents:
3767
diff
changeset
|
502 got_props[this][propname] = 1 |
|
74aebbbea305
Sorry for the mega-patch - was all done on the train:
Richard Jones <richard@users.sourceforge.net>
parents:
3767
diff
changeset
|
503 elif value is not None: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
504 got_props[this][propname] = 1 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
505 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
506 # get the old value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
507 if nodeid and not nodeid.startswith('-'): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
508 try: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
509 existing = cl.get(nodeid, propname) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
510 except KeyError: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
511 # this might be a new property for which there is |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
512 # no existing value |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
513 if propname not in propdef: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
514 raise |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5195
diff
changeset
|
515 except IndexError as message: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
516 raise FormError(str(message)) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
517 |
|
4050
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
518 # make sure the existing multilink is sorted. We must |
|
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
519 # be sure to use the same sort order in all places, |
|
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
520 # since we want to compare values with "=" or "!=". |
|
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
521 # The canonical order (given in Multilink.from_raw) is |
|
a412ce8ccf6f
Use canonical sort order for multilinks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4049
diff
changeset
|
522 # by the numeric value of the IDs. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
523 if isinstance(proptype, hyperdb.Multilink): |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
524 existing.sort(key=int) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
525 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
526 # "missing" existing values may not be None |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
527 if not existing: |
|
3491
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
528 if isinstance(proptype, hyperdb.String): |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
529 # some backends store "missing" Strings as |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
530 # empty strings |
|
3491
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
531 if existing == self.db.BACKEND_MISSING_STRING: |
|
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
532 existing = None |
|
6939
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
533 elif (isinstance(proptype, hyperdb.Number) or |
|
38dc223d90cc
flake8 fixes - also change signature of parse()
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
534 isinstance(proptype, hyperdb.Integer)): |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
535 # some backends store "missing" Numbers as 0 :( |
|
3491
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
536 if existing == self.db.BACKEND_MISSING_NUMBER: |
|
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
537 existing = None |
|
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
538 elif isinstance(proptype, hyperdb.Boolean): |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
539 # likewise Booleans |
|
3491
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
540 if existing == self.db.BACKEND_MISSING_BOOLEAN: |
|
0e5f15520e70
fix detection of "missing" existing values in CGI form parser [SF#1414149]
Richard Jones <richard@users.sourceforge.net>
parents:
3267
diff
changeset
|
541 existing = None |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
542 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
543 # if changed, set it |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
544 if value != existing: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
545 props[propname] = value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
546 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
547 # don't bother setting empty/unset values |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
548 if value is None: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
549 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
550 elif isinstance(proptype, hyperdb.Multilink) and value == []: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
551 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
552 elif isinstance(proptype, hyperdb.String) and value == '': |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
553 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
554 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
555 props[propname] = value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
556 |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
557 # check to see if we need to specially link files to the note |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
558 if have_note and have_file: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
559 for fid in have_file: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
560 all_links.append(('msg', '-1', 'files', [('file', fid)])) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
561 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
562 # see if all the required properties have been supplied |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
563 s = [] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
564 for thing, required in all_required.items(): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
565 # register the values we got |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
566 got = got_props.get(thing, {}) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
567 for entry in required[:]: |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
568 if entry in got: |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
569 required.remove(entry) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
570 |
| 3765 | 571 # If a user doesn't have edit permission for a given property, |
| 572 # but the property is already set in the database, we don't | |
| 573 # require a value. | |
| 574 if not (create or nodeid is None): | |
| 575 for entry in required[:]: | |
| 576 if not self.db.security.hasPermission('Edit', | |
| 577 self.client.userid, | |
| 578 self.classname, | |
| 579 entry): | |
| 580 cl = self.db.classes[self.classname] | |
| 3767 | 581 if cl.get(nodeid, entry) is not None: |
| 3765 | 582 required.remove(entry) |
|
3936
63d58cc1394a
make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents:
3777
diff
changeset
|
583 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
584 # any required values not present? |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
585 if not required: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
586 continue |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
587 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
588 # tell the user to entry the values required |
|
2468
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
589 s.append(self.ngettext( |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
590 'Required %(class)s property %(property)s not supplied', |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
591 'Required %(class)s properties %(property)s not supplied', |
|
7d5bf9cbd75d
use self.client to translate messages; if that fails...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2107
diff
changeset
|
592 len(required) |
|
2517
9260152ad143
translate property names in 'Required property not supplied' message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2468
diff
changeset
|
593 ) % { |
|
3559
4b80c330f02b
translate class name in "required property not supplied" message [SF#1429669]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3491
diff
changeset
|
594 'class': self._(thing[0]), |
|
2517
9260152ad143
translate property names in 'Required property not supplied' message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2468
diff
changeset
|
595 'property': ', '.join(map(self.gettext, required)) |
|
9260152ad143
translate property names in 'Required property not supplied' message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2468
diff
changeset
|
596 }) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
597 if s: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
598 raise FormError('\n'.join(s)) |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
599 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
600 # When creating a FileClass node, it should have a non-empty content |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
601 # property to be created. When editing a FileClass node, it should |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
602 # either have a non-empty content property or no property at all. In |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
603 # the latter case, nothing will change. |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
604 for (cn, id), props in list(all_props.items()): |
|
4049
c9a8a47c4666
Do not try to create empty nodes with a negative ID.
Stefan Seefeld <stefan@seefeld.name>
parents:
3980
diff
changeset
|
605 if id is not None and id.startswith('-') and not props: |
|
3267
9ffea8719af1
disable node creation if no properties are set
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2517
diff
changeset
|
606 # new item (any class) with no content - ignore |
|
9ffea8719af1
disable node creation if no properties are set
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2517
diff
changeset
|
607 del all_props[(cn, id)] |
|
9ffea8719af1
disable node creation if no properties are set
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2517
diff
changeset
|
608 elif isinstance(self.db.classes[cn], hyperdb.FileClass): |
|
5171
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
609 # three cases: |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
610 # id references existng file. If content is empty, |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
611 # remove content from form so we don't wipe |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
612 # existing file contents. |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
613 # id is -1, -2 ... I.E. a new file. |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
614 # if content is not defined remove all fields that |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
615 # reference that file. |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
616 # if content is defined, let it pass through even if |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
617 # content is empty. Yes people can upload/create |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
618 # empty files. |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
619 if 'content' in props: |
|
5171
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
620 if id is not None and \ |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
621 not id.startswith('-') and \ |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
622 not props['content']: |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
623 # This is an existing file with emtpy content |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
624 # value in the form. |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
625 del props['content'] |
|
5171
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
626 else: |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
627 # this is a new file without any content property. |
|
5170
2ae3954e972f
Hopefully fix issue2550929
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5149
diff
changeset
|
628 if id is not None and id.startswith('-'): |
|
2ae3954e972f
Hopefully fix issue2550929
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5149
diff
changeset
|
629 del all_props[(cn, id)] |
|
5171
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
630 # if this is a new file with content (even 0 length content) |
|
5b63cfc95255
issue2550929 fix for my use case, need Ralf to check for his.
John Rouillard <rouilj@ieee.org>
parents:
5170
diff
changeset
|
631 # allow it through and create the zero length file. |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
632 return all_props, all_links |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
633 |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
634 def parse_file(self, fpropdef, fprops, v): |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
635 # try to determine the file content-type |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
636 fn = v.filename.split('\\')[-1] |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
637 if 'name' in fpropdef: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
638 fprops['name'] = fn |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
639 # use this info as the type/filename properties |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
640 if 'type' in fpropdef: |
|
5065
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
641 if hasattr(v, 'type') and v.type: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
642 fprops['type'] = v.type |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
643 elif mimetypes.guess_type(fn)[0]: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
644 fprops['type'] = mimetypes.guess_type(fn)[0] |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
645 else: |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
646 fprops['type'] = "application/octet-stream" |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
647 # finally, read the content RAW |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
648 return v.value |
|
47ab150b7325
Allow multiple file uploads
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5053
diff
changeset
|
649 |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
650 def extractFormList(self, value): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
651 ''' Extract a list of values from the form value. |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
652 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
653 It may be one of: |
|
6062
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
654 [MiniFieldStorage('value'), |
|
ed19b123a7ac
flake8 whitespace/formatting changes.
John Rouillard <rouilj@ieee.org>
parents:
5809
diff
changeset
|
655 MiniFieldStorage('value','value',...), ...] |
|
2004
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
656 MiniFieldStorage('value,value,...') |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
657 MiniFieldStorage('value') |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
658 ''' |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
659 # multiple values are OK |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
660 if isinstance(value, type([])): |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
661 # it's a list of MiniFieldStorages - join then into |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
662 values = ','.join([i.value.strip() for i in value]) |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
663 else: |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
664 # it's a MiniFieldStorage, but may be a comma-separated list |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
665 # of values |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
666 values = value.value |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
667 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
668 value = [i.strip() for i in values.split(',')] |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
669 |
|
1782fe36e7b8
Move out parts of client.py to new modules:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
diff
changeset
|
670 # filter out the empty bits |
|
5398
99667a0cbd2d
Python 3 preparation: use list() around filter() as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
671 return list(filter(None, value)) |
|
3559
4b80c330f02b
translate class name in "required property not supplied" message [SF#1429669]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3491
diff
changeset
|
672 |
|
4b80c330f02b
translate class name in "required property not supplied" message [SF#1429669]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3491
diff
changeset
|
673 # vim: set et sts=4 sw=4 : |
