Mercurial > p > roundup > code
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 |
| 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 |
