annotate roundup/__init__.py @ 5710:0b79bfcb3312

Add support for making an idempotent POST. This allows retrying a POST that was interrupted. It involves creating a post once only (poe) url /rest/data/<class>/@poe/<random_token>. This url acts the same as a post to /rest/data/<class>. However once the @poe url is used, it can't be used for a second POST. To make these changes: 1) Take the body of post_collection into a new post_collection_inner function. Have post_collection call post_collection_inner. 2) Add a handler for POST to rest/data/class/@poe. This will return a unique POE url. By default the url expires after 30 minutes. The POE random token is only good for a specific user and is stored in the session db. 3) Add a handler for POST to rest/data/<class>/@poe/<random token>. The random token generated in 2 is validated for proper class (if token is not generic) and proper user and must not have expired. If everything is valid, call post_collection_inner to process the input and generate the new entry. To make recognition of 2 stable (so it's not confused with rest/data/<:class_name>/<:item_id>), removed @ from Routing::url_to_regex. The current Routing.execute method stops on the first regular expression to match the URL. Since item_id doesn't accept a POST, I was getting 405 bad method sometimes. My guess is the order of the regular expressions is not stable, so sometime I would get the right regexp for /data/<class>/@poe and sometime I would get the one for /data/<class>/<item_id>. By removing the @ from the url_to_regexp, there was no way for the item_id case to match @poe. There are alternate fixes we may need to look at. If a regexp matches but the method does not, return to the regexp matching loop in execute() looking for another match. Only once every possible match has failed should the code return a 405 method failure. Another fix is to implement a more sophisticated mechanism so that @Routing.route("/data/<:class_name>/<:item_id>/<:attr_name>", 'PATCH') has different regexps for matching <:class_name> <:item_id> and <:attr_name>. Currently the regexp specified by url_to_regex is used for every component. Other fixes: Made failure to find any props in props_from_args return an empty dict rather than throwing an unhandled error. Make __init__ for SimulateFieldStorageFromJson handle an empty json doc. Useful for POSTing to rest/data/class/@poe with an empty document. Testing: added testPostPOE to test/rest_common.py that I think covers all the code that was added. Documentation: Add doc to rest.txt in the "Client API" section titled: Safely Re-sending POST". Move existing section "Adding new rest endpoints" in "Client API" to a new second level section called "Programming the REST API". Also a minor change to the simple rest client moving the header setting to continuation lines rather than showing one long line.
author John Rouillard <rouilj@ieee.org>
date Sun, 14 Apr 2019 21:07:11 -0400
parents 70f6a3ede190
children b68d3d8531d5 573b688fffeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
3938
083e280165a8 Pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents: 3819
diff changeset
17 #
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
18
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
19 '''Roundup - issue tracking for knowledge workers.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
20
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
21 This is a simple-to-use and -install issue-tracking system with
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
22 command-line, web and e-mail interfaces.
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
23
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
24 Roundup manages a number of issues (with properties such as
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
25 "description", "priority", and so on) and provides the ability to (a) submit
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
26 new issues, (b) find and edit existing issues, and (c) discuss issues with
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
27 other participants. The system will facilitate communication among the
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
28 participants by managing discussions and notifying interested parties when
3938
083e280165a8 Pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents: 3819
diff changeset
29 issues are edited.
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
30
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
31 Roundup's structure is that of a cake::
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
32
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
33 _________________________________________________________________________
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
34 | E-mail Client | Web Browser | Detector Scripts | Shell |
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
35 |------------------+-----------------+----------------------+-------------|
3938
083e280165a8 Pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents: 3819
diff changeset
36 | E-mail User | Web User | Detector | Command |
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
37 |-------------------------------------------------------------------------|
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
38 | Roundup Database Layer |
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
39 |-------------------------------------------------------------------------|
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
40 | Hyperdatabase Layer |
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
41 |-------------------------------------------------------------------------|
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
42 | Storage Layer |
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
43 -------------------------------------------------------------------------
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
44
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
45 1. The first layer represents the users (chocolate).
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
46 2. The second layer is the Roundup interface to the users (vanilla).
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
47 3. The third and fourth layers are the internal Roundup database storage
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
48 mechanisms (strawberry).
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
49 4. The final, lowest layer is the underlying database storage (rum).
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
50
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
51 These are implemented in the code in the following manner::
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
52
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
53 E-mail User: roundup-mailgw and roundup.mailgw
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
54 Web User: cgi-bin/roundup.cgi or roundup-server over
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1227
diff changeset
55 roundup.cgi.client and roundup.cgi.template
106
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
56 Detector: roundup.roundupdb and templates/<template>/detectors
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
57 Command: roundup-admin
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
58 Roundup DB: roundup.roundupdb
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
59 Hyper DB: roundup.hyperdb, roundup.date
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
60 Storage: roundup.backends.*
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
61
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
62 Additionally, there is a directory of unit tests in "test".
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
63
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
64 For more information, see the original overview and specification documents
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
65 written by Ka-Ping Yee in the "doc" directory. If nothing else, it has a
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
66 much prettier cake :)
25216cb3ff79 Added some documentation to the roundup package.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
67 '''
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1980
diff changeset
68 __docformat__ = 'restructuredtext'
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
69
5359
70f6a3ede190 change version from 1.6 to 1.6.0 to match prior minor release versioning.
John Rouillard <rouilj@ieee.org>
parents: 5335
diff changeset
70 __version__ = '1.6.0'
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
71
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 106
diff changeset
72 # vim: set filetype=python ts=4 sw=4 et si

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