Mercurial > p > roundup > code
annotate tools/load_tracker.py @ 5639:f576957cbb1f
Add support for prev/next/self links when returning paginated results.
To do this:
1) change "data" envelope from an array to a dict
2) move the "data" array to the "collection" property,
which is an array of elements in the collection.
3) add @links dict keyed by link relation: self, next, prev.
Each relation is an array of dicts with uri and rel keys.
In this case there is only one element, but there is nothing
preventing a relation from having multiple url's. So this follows
the formatting needed for the general case.
Relations are present only if it makes sense. So first page has no
prev and last page has no next.
4) add @total_size with number of element selected if they were
not paginated. Replicates data in X-Count-Total header.
Changed index to start at 1. So the first page is page_index 1 and not
page_index 0. (So I am no longer surprised when I set page_index to 1
and am missing a bunch of records 8-)).
Also a small fixup, json response ends with a newline so printing
the data, or using curl makes sure that anything printing after the
json output (like shell prompts) is on a new line.
Tests added for all cases.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 09 Mar 2019 11:06:10 -0500 |
| parents | 2120f77554d5 |
| children | e1dfd21f2252 |
| rev | line source |
|---|---|
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 ''' |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 Usage: %s <tracker home> <N> |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 Load up the indicated tracker with N issues and N/100 users. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 ''' |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
8 from __future__ import print_function |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 import sys, os, random |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 from roundup import instance |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 # open the instance |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 if len(sys.argv) < 2: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
14 print("Error: Not enough arguments") |
|
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
15 print(__doc__.strip()%(sys.argv[0])) |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 sys.exit(1) |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 tracker_home = sys.argv[1] |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 N = int(sys.argv[2]) |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 # open the tracker |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 tracker = instance.open(tracker_home) |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 db = tracker.open('admin') |
| 4781 | 23 db.tx_Source = "cli" |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 priorities = db.priority.list() |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 statuses = db.status.list() |
|
2261
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
27 resolved_id = db.status.lookup('resolved') |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
28 statuses.remove(resolved_id) |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 names = ['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 'rho'] |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 titles = '''Lorem ipsum dolor sit amet, consectetuer adipiscing elit. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 Duis nibh purus, bibendum sed, condimentum ut, bibendum ut, risus. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 Fusce pede enim, nonummy sit amet, dapibus a, blandit eget, metus. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 Nulla risus. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 Vivamus tincidunt. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 Donec consequat convallis quam. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 Sed convallis vehicula felis. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 Aliquam laoreet, dui quis pharetra vehicula, magna justo. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 Euismod felis, eu adipiscing eros metus id tortor. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 Suspendisse et turpis. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 Aenean non felis. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 Nam egestas eros. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 Integer tellus quam, mattis ac, vestibulum sed, egestas quis, mauris. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 Nulla tincidunt diam sit amet dui. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 Nam odio mauris, dignissim vitae, eleifend eu, consectetuer id, risus. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 Suspendisse potenti. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 Donec tincidunt. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 Vestibulum gravida. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 Fusce luctus, neque id mattis fringilla, purus pede sodales pede. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 Quis ultricies urna odio sed orci.'''.splitlines() |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 try: |
|
2235
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
56 try: |
|
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
57 db.user.lookup('alpha0') |
|
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
58 except: |
|
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
59 # add some users |
|
5400
2120f77554d5
Python 3 preparation: use // and __truediv__ as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
60 M = N//100 |
|
2235
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
61 for i in range(M): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
62 print('\ruser', i, ' ', end=' ') |
|
2235
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
63 sys.stdout.flush() |
|
5400
2120f77554d5
Python 3 preparation: use // and __truediv__ as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
64 if i//17 == 0: |
|
2261
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
65 db.user.create(username=names[i%17]) |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
66 else: |
|
5400
2120f77554d5
Python 3 preparation: use // and __truediv__ as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
67 db.user.create(username=names[i%17]+str(i//17)) |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
2235
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
69 # assignable user list |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 users = db.user.list() |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 users.remove(db.user.lookup('anonymous')) |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
72 print() |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 # now create the issues |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 for i in range(N): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
76 print('\rissue', i, ' ', end=' ') |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 sys.stdout.flush() |
|
2261
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
78 # in practise, about 90% of issues are resolved |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
79 if random.random() > .9: |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
80 status = random.choice(statuses) |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
81 else: |
|
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
82 status = resolved_id |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 db.issue.create( |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 title=random.choice(titles), |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 priority=random.choice(priorities), |
|
2261
1bbdd3407eff
loader tweak
Richard Jones <richard@users.sourceforge.net>
parents:
2235
diff
changeset
|
86 status=status, |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 assignedto=random.choice(users)) |
|
2235
87c238d8bc76
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2234
diff
changeset
|
88 if not i%1000: |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
89 db.commit() |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4781
diff
changeset
|
90 print() |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 db.commit() |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 finally: |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 db.close() |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 # vim: set filetype=python ts=4 sw=4 et si |
