annotate doc/implementation.txt @ 7853:03c1b7ae3a68

issue2551328/issue2551264 unneeded next link and total_count incorrect Fix: issue2551328 - REST results show next link if number of results is a multiple of page size. (Found by members of team 3 in the UMass-Boston CS682 Spring 2024 class.) issue2551264 - REST X-Total-Count header and @total_size count incorrect when paginated These issues arose because we retrieved the exact number of rows from the database as requested by the user using the @page_size parameter. With this changeset, we retrieve up to 10 million + 1 rows from the database. If the total number of rows exceeds 10 million, we set the total_count indicators to -1 as an invalid size. (The max number of requested rows (default 10 million +1) can be modified by the admin through interfaces.py.) By retrieving more data than necessary, we can calculate the total count by adding @page_index*@page_size to the number of rows returned by the query. Furthermore, since we return more than @page_size rows, we can determine the existence of a row at @page_size+1 and use that information to determine if a next link should be provided. Previously, a next link was returned if @page_size rows were retrieved. This change does not guarantee that the user will get @page_size rows returned. Access policy filtering occurs after the rows are returned, and discards rows inaccessible by the user. Using the current @page_index/@page_size it would be difficult to have the roundup code refetch data and make sure that a full @page_size set of rows is returned. E.G. @page_size=100 and 5 of them are dropped due to access restrictions. We then fetch 10 items and add items 1-4 and 6 (5 is inaccessible). There is no way to calculate the new database offset at: @page_index*@page_size + 6 from the URL. We would need to add an @page_offset=6 or something. This could work since the client isn't adding 1 to @page_index to get the next page. Thanks to HATEOAS, the client just uses the 'next' url. But I am not going to cross that bridge without a concrete use case. This can also be handled client side by merging a short response with the next response and re-paginating client side. Also added extra index markers to the docs to highlight use of interfaces.py.
author John Rouillard <rouilj@ieee.org>
date Mon, 01 Apr 2024 09:57:16 -0400
parents 81a634b7226e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7048
6f5054751fb6 Update meta description. Also fix test command in code.txt.
John Rouillard <rouilj@ieee.org>
parents: 6905
diff changeset
1 .. meta::
6f5054751fb6 Update meta description. Also fix test command in code.txt.
John Rouillard <rouilj@ieee.org>
parents: 6905
diff changeset
2 :description:
6f5054751fb6 Update meta description. Also fix test command in code.txt.
John Rouillard <rouilj@ieee.org>
parents: 6905
diff changeset
3 Additional implementation notes for the Roundup Issue Tracker.
7286
81a634b7226e Update description metadata
John Rouillard <rouilj@ieee.org>
parents: 7048
diff changeset
4 Supplement for docstrings in the Roundup package.
7048
6f5054751fb6 Update meta description. Also fix test command in code.txt.
John Rouillard <rouilj@ieee.org>
parents: 6905
diff changeset
5
688
b38f4f95bffd More doc tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 686
diff changeset
6 ====================
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 Implementation notes
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 ====================
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 [see also the roundup package docstring]
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 There have been some modifications to the spec. I've marked these in the
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 source with 'XXX' comments when I remember to.
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 In short:
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 Class.find() - may match multiple properties, uses keyword args.
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
1661
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
18 Class.filter() - isn't in the spec and it's very useful to have at the
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
19 Class level.
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
20
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 CGI interface index view specifier layout part - lose the '+' from the
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 sorting arguments (it's a reserved URL character ;). Just made no
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 prefix mean ascending and '-' prefix descending.
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 ItemClass - renamed to IssueClass to better match it only having one
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 hypderdb class "issue". Allowing > 1 hyperdb class breaks the
1661
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
27 "superseder" multilink (since it can only link to one thing, and
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
28 we'd want bugs to link to support and vice-versa).
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29
1661
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
30 template - the call="link()" is handled by special-case mechanisms in
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
31 my top-level CGI handler. In a nutshell, the handler looks for a
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
32 method on itself called 'index%s' or 'item%s' where %s is a class.
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
33 Most items pass on to the templating mechanism, but the file class
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
34 _always_ does downloading. It'll probably stay this way too...
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 907
diff changeset
36 template - call="link(property)" may be used to link "the current item"
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 (from an index) - the link text is the property specified.
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 template - added functions that I found very useful: List, History and
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 Submit.
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41
1661
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
42 template - items must specify the message lists, history, etc. Having
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
43 them by default was sometimes not wanted.
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
1661
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
45 template - index view determines its default columns from the
b9c1226cb600 Reflowed text to 72 cols...
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1089
diff changeset
46 template's ``tal:condition="request/show/<property>"`` directives.
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 template - menu() and field() look awfully similar now .... ;)
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
907
38a74d1351c5 documentation updates
Richard Jones <richard@users.sourceforge.net>
parents: 688
diff changeset
50 roundup_admin.py - the command-line tool has a lot more commands at its
38a74d1351c5 documentation updates
Richard Jones <richard@users.sourceforge.net>
parents: 688
diff changeset
51 disposal
111
6e8197a5880f Split off implementation notes into separate file in doc directory.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52
686
c52122f38c9b Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents: 111
diff changeset
53 -----------------
c52122f38c9b Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents: 111
diff changeset
54
c52122f38c9b Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents: 111
diff changeset
55 Back to `Table of Contents`_
c52122f38c9b Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents: 111
diff changeset
56
6905
9ca128103a3a fix broken links to doc table of contents
John Rouillard <rouilj@ieee.org>
parents: 4557
diff changeset
57 .. _`Table of Contents`: ../docs.html
686
c52122f38c9b Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents: 111
diff changeset
58

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