annotate roundup/demo.py @ 8408:e882a5d52ae5

refactor: move RateLimitExceeded to roundup.cgi.exceptions RateLimitExceeded is an HTTP exception that raises code 429. Move it to roundup.cgi.exceptions where all the other exceptions that result in http status codes are located. Also make it inherit from HTTPException since it is one. Also add docstrings for all HTTP exceptions and order HTTPExceptions by status code. BREAKING CHANGE: if somebody is importing RateLimitExceeded they will need to change their import. I consider it unlikely anybody is using RateLimitExceeded. Detectors and extensions are unlikely to raise RateLimitExceeded. So I am leaving it out of the upgrading doc. Just doc in change log.
author John Rouillard <rouilj@ieee.org>
date Sun, 10 Aug 2025 21:27:06 -0400
parents 78490b5b1bfe
children 9c3ec0a5c7fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4689
7a032013bb6a demo.py: Make executable, remove unused glob import
anatoly techtonik <techtonik@gmail.com>
parents: 4602
diff changeset
1 #!/usr/bin/env python
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net)
2648
fe71e108d998 Main Roundup configuration class renamed to CoreConfig;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2639
diff changeset
4 #
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
5 from __future__ import print_function
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
2783
5f62f3dd5aa8 fix: server was always started on default port number.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2775
diff changeset
7 import errno
7591
78490b5b1bfe chore: sort imports
John Rouillard <rouilj@ieee.org>
parents: 7446
diff changeset
8 import getopt
2783
5f62f3dd5aa8 fix: server was always started on default port number.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2775
diff changeset
9 import os
4734
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
10 import shutil
2783
5f62f3dd5aa8 fix: server was always started on default port number.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2775
diff changeset
11 import socket
5f62f3dd5aa8 fix: server was always started on default port number.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2775
diff changeset
12 import sys
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
14 try:
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
15 import urlparse
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
16 except ImportError:
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
17 import urllib.parse as urlparse
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
18
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
19 from roundup import configuration
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
20 from roundup.scripts import roundup_server
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
21
4733
a0654b1283a4 demo: Make tracker home configurable.
anatoly techtonik <techtonik@gmail.com>
parents: 4729
diff changeset
22 # Path where demo instance files will be stored
4764
d273e59b487b roundup.demo: Use relative tracker home directory
anatoly techtonik <techtonik@gmail.com>
parents: 4763
diff changeset
23 TRACKER_HOME = os.path.abspath('demo')
4733
a0654b1283a4 demo: Make tracker home configurable.
anatoly techtonik <techtonik@gmail.com>
parents: 4729
diff changeset
24
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
25
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
26 def install_demo(home, backend, template, use_port=None, use_host=None):
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
27 """Install a demo tracker
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
28
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
29 Parameters:
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
30 home:
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
31 tracker home directory path
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
32 backend:
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
33 database backend name
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
34 template:
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
35 tracker template
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
36
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
37 """
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
38
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
39 from roundup import init, instance, password
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
40
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
41 # set up the config for this tracker
6545
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
42 template_dir = os.path.join('share', 'roundup', 'templates', template)
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
43
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
44 # Load optional override ini file. Missing ini file is ignored.
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
45 template_cfg = configuration.UserConfig(template_dir + "/config_ini.ini")
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
46 config = configuration.CoreConfig(settings={
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
47 i.name: i.get() for i in template_cfg.items()
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
48 })
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
49 config['TRACKER_HOME'] = home
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
50 config['MAIL_DOMAIN'] = 'localhost'
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
51 config['DATABASE'] = 'db'
3549
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 2881
diff changeset
52 config['WEB_DEBUG'] = True
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
53 if backend in ('mysql', 'postgresql'):
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
54 config['RDBMS_HOST'] = 'localhost'
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
55 config['RDBMS_USER'] = 'rounduptest'
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
56 config['RDBMS_PASSWORD'] = 'rounduptest'
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
57 config['RDBMS_NAME'] = 'rounduptest'
2167
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
58
5070
04e48cfc91da fix demo.py after database backend moved from db/backend to config.ini::[rdbms].backend. Note this will have to change if backend location moved to [main].backend (tomatch [main].db).
John Rouillard <rouilj@ieee.org>
parents: 5019
diff changeset
59 config['RDBMS_BACKEND'] = backend
04e48cfc91da fix demo.py after database backend moved from db/backend to config.ini::[rdbms].backend. Note this will have to change if backend location moved to [main].backend (tomatch [main].db).
John Rouillard <rouilj@ieee.org>
parents: 5019
diff changeset
60
4734
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
61 # see if we need to clean up existing directory
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
62 if os.path.exists(home):
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
63 if os.path.exists(home + '/config.ini'):
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
64 # clear everything out to avoid conflicts with former
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
65 # extensions and detectors
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
66 print("Nuking directory left from the previous demo instance.")
4734
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
67 shutil.rmtree(home)
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
68 else:
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
69 print("Error: Refusing to nuke non-tracker directory:")
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
70 print(" %s" % home)
4734
c67c925e4037 demo: Remove tracker home completely when nuking. This erases
anatoly techtonik <techtonik@gmail.com>
parents: 4733
diff changeset
71 sys.exit(1)
2167
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
72
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
73 init.install(home, template_dir)
6545
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
74 # Remove config_ini.ini file from tracker_home (not template dir).
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
75 # Ignore file not found - not all templates have
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
76 # config_ini.ini files.
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
77 try:
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
78 os.remove(home + "/config_ini.ini")
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
79 except OSError as e: # FileNotFound exception under py3
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
80 if e.errno == 2:
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
81 pass
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
82 else:
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
83 raise
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
84
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 # don't have email flying around
4135
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
86 nosyreaction = os.path.join(home, 'detectors', 'nosyreaction.py')
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
87 if os.path.exists(nosyreaction):
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
88 os.remove(nosyreaction)
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
89 nosyreaction += 'c'
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
90 if os.path.exists(nosyreaction):
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
91 os.remove(nosyreaction)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 # figure basic params for server
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
94 hostname = use_host or 'localhost'
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 # pick a fairly odd, random port
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
96 port = use_port or 8917
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 while 1:
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
98 print('Trying to set up web server on port %d ...' % port,)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 try:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 s.connect((hostname, port))
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
103 except socket.error as e:
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 raise
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
106 print('should be ok.')
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 break
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 else:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 s.close()
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
110 print('already in use.')
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 port += 100
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
112 config['TRACKER_WEB'] = 'http://%s:%s/demo/' % (hostname, port)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 # write the config
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2648
diff changeset
115 config['INSTANT_REGISTRATION'] = 1
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
116 config.save(os.path.join(home, config.INI_FILE))
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
118 # open the tracker and initialise
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
119 tracker = instance.open(home)
7210
7147a4c833e9 Pass config argument to Password calls in demo.
John Rouillard <rouilj@ieee.org>
parents: 6545
diff changeset
120 tracker.init(password.Password('admin', config=config))
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 # add the "demo" user
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 db = tracker.open('admin')
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
124 # FIXME: Move tracker-specific demo initialization into the tracker
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
125 # templates.
6545
5a3a386aa8e7 issue2551179 Load config_ini.ini ... recognize minimal template demo.py
John Rouillard <rouilj@ieee.org>
parents: 6069
diff changeset
126 if os.path.basename(template) == 'minimal':
7210
7147a4c833e9 Pass config argument to Password calls in demo.
John Rouillard <rouilj@ieee.org>
parents: 6545
diff changeset
127 db.user.create(username='demo',
7147a4c833e9 Pass config argument to Password calls in demo.
John Rouillard <rouilj@ieee.org>
parents: 6545
diff changeset
128 password=password.Password('demo', config=db.config),
4135
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
129 roles='User')
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
130 else:
7210
7147a4c833e9 Pass config argument to Password calls in demo.
John Rouillard <rouilj@ieee.org>
parents: 6545
diff changeset
131 db.user.create(username='demo',
7147a4c833e9 Pass config argument to Password calls in demo.
John Rouillard <rouilj@ieee.org>
parents: 6545
diff changeset
132 password=password.Password('demo', config=db.config),
4135
d81ebe49a6ef Adjust to allow to run the 'minimal' tracker, too.
Stefan Seefeld <stefan@seefeld.name>
parents: 4129
diff changeset
133 realname='Demo User', roles='User')
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 db.commit()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 db.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
137
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
138 def run_demo(home, bind_addr=None, bind_port=None):
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
139 """Run the demo tracker instance from its ``home`` directory
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
140
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
141 For running under docker, we need to split ports into
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
142 the port roundup-server binds to (usually 8080) and the
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
143 external mapping requested by docker to be used in external url's.
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
144 """
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
145
7446
fb39200904a5 Add newlines to make scanning of demo instructions easier.
John Rouillard <rouilj@ieee.org>
parents: 7340
diff changeset
146 print("\nDemo Tracker Home:", home)
4764
d273e59b487b roundup.demo: Use relative tracker home directory
anatoly techtonik <techtonik@gmail.com>
parents: 4763
diff changeset
147
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
148 cfg = configuration.CoreConfig(home)
2783
5f62f3dd5aa8 fix: server was always started on default port number.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2775
diff changeset
149 url = cfg["TRACKER_WEB"]
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
150 try:
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
151 hostname, port = urlparse.urlparse(url)[1].split(':')
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
152 except ValueError:
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
153 print("\nThe TRACKER_WEB url:\n\n %(url)s\n\nin\n\n"
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
154 " %(home)s/config.ini"
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
155 "\n\nis missing a port number.\n"
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
156 "\nAre you using demo mode to start a production tracker? "
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
157 "Try running\ndemo mode with a different directory. "
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
158 "Use roundup-server to serve\nproduction trackers. "
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
159 "Exiting.\n" % {'home': home, 'url': url})
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
160 exit(1)
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
161
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
162 bind_addr = bind_addr or hostname
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
163 port = int(bind_port or port)
7446
fb39200904a5 Add newlines to make scanning of demo instructions easier.
John Rouillard <rouilj@ieee.org>
parents: 7340
diff changeset
164 success_message = '''Server running - connect to:\n
fb39200904a5 Add newlines to make scanning of demo instructions easier.
John Rouillard <rouilj@ieee.org>
parents: 7340
diff changeset
165 %(url)s\n
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
166 1. Log in as "demo"/"demo" or "admin"/"admin".
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
167 2. Hit Control-C to stop the server.
4602
19490d84802b demo.py: Fix self-referencing names
anatoly techtonik <techtonik@gmail.com>
parents: 4428
diff changeset
168 3. Re-start the server by running "%(script)s" again.
4889
edd6cac141c1 demo.py: `nuke` resets the tracker, not the server, also rewrote
anatoly techtonik <techtonik@gmail.com>
parents: 4863
diff changeset
169 4. Reset the tracker by running "%(script)s nuke".
3868
483c3e335a54 print instructions for modifying demo tracker URL
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3647
diff changeset
170
4988
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
171 By default the demo tracker is set up to be accessed from "localhost".
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
172 If you want to run it on a server,
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
173 edit "%(datadir)s/config.ini"
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
174 and set the "web" option in section "[tracker]" to your host name,
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
175 then restart demo. If you want to change backend types, you must use "nuke".
3868
483c3e335a54 print instructions for modifying demo tracker URL
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3647
diff changeset
176
4733
a0654b1283a4 demo: Make tracker home configurable.
anatoly techtonik <techtonik@gmail.com>
parents: 4729
diff changeset
177 ''' % dict(url=url, script=sys.argv[0], datadir=TRACKER_HOME)
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
178
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
179 # disable command line processing in roundup_server
7340
7b9bddda9d2d Add support for demo mode in docker.
John Rouillard <rouilj@ieee.org>
parents: 7210
diff changeset
180 sys.argv = sys.argv[:1] + ['-p', str(port), '-n', bind_addr, 'demo=' + home]
2837
bcee075321fc patching roundup_server.RoundupRequestHandler class directly...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2783
diff changeset
181 roundup_server.run(success_message=success_message)
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
182
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
183
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
184 def usage(msg=''):
5019
9bb20454f409 demo: Cleaning up the code
anatoly techtonik <techtonik@gmail.com>
parents: 4988
diff changeset
185 if msg:
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
186 print(msg)
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
187 print("""\
5019
9bb20454f409 demo: Cleaning up the code
anatoly techtonik <techtonik@gmail.com>
parents: 4988
diff changeset
188 Usage: %(script)s [options] [nuke]
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
189
5019
9bb20454f409 demo: Cleaning up the code
anatoly techtonik <techtonik@gmail.com>
parents: 4988
diff changeset
190 Run a demo server. Config and database files are created in
9bb20454f409 demo: Cleaning up the code
anatoly techtonik <techtonik@gmail.com>
parents: 4988
diff changeset
191 %(datadir)s subdirectory of %(script)s dir.
4863
9db31cba6e0b Minor: demo.py usage message improved: explains "nuke" now.
Bernhard Reiter <bernhard@intevation.de>
parents: 4764
diff changeset
192
9db31cba6e0b Minor: demo.py usage message improved: explains "nuke" now.
Bernhard Reiter <bernhard@intevation.de>
parents: 4764
diff changeset
193 'nuke' will re-initialize the demo instance, deleting the old data.
9db31cba6e0b Minor: demo.py usage message improved: explains "nuke" now.
Bernhard Reiter <bernhard@intevation.de>
parents: 4764
diff changeset
194
4988
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
195 See docs/installation "For The Really Impatient" for more details.
c3a647a9f387 Fixes issue2550881 (demo.py: Add pointer how to access demo from remote host.)
Bernhard Reiter <bernhard@intevation.de>
parents: 4889
diff changeset
196
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
197 Options:
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
198 -h -- print this help message
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
199 -t template -- specify the tracker template to use
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
200 -b backend -- specify the database backend to use
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
201 """ % dict(script=sys.argv[0], datadir=TRACKER_HOME+os.sep))
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
202
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
203
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
204 def main():
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
205 """Run a demo server for users to play with for instant gratification.
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
206
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
207 Sets up the web service on localhost. Disables nosy lists.
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
208 """
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
209
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
210 try:
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
211 opts, args = getopt.getopt(sys.argv[1:], 't:b:h')
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
212 except getopt.GetoptError as e:
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
213 usage(str(e))
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
214 return 1
6069
d8d046749b5b flake8 whitespace fixes; remove unused import backends
John Rouillard <rouilj@ieee.org>
parents: 5247
diff changeset
215 for opt, _arg in opts:
4729
3fa74b99d42d Fix `demo -h` didn't work with existing demo, and
anatoly techtonik <techtonik@gmail.com>
parents: 4715
diff changeset
216 if opt == '-h':
3fa74b99d42d Fix `demo -h` didn't work with existing demo, and
anatoly techtonik <techtonik@gmail.com>
parents: 4715
diff changeset
217 usage()
3fa74b99d42d Fix `demo -h` didn't work with existing demo, and
anatoly techtonik <techtonik@gmail.com>
parents: 4715
diff changeset
218 return 0
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
219
4733
a0654b1283a4 demo: Make tracker home configurable.
anatoly techtonik <techtonik@gmail.com>
parents: 4729
diff changeset
220 home = os.path.abspath(TRACKER_HOME)
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
221 nuke = args and args[0] == 'nuke'
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
222 if not os.path.exists(home) or nuke:
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
223 backend = 'anydbm'
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
224 template = 'classic'
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
225 for opt, arg in opts:
4729
3fa74b99d42d Fix `demo -h` didn't work with existing demo, and
anatoly techtonik <techtonik@gmail.com>
parents: 4715
diff changeset
226 if opt == '-t':
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
227 template = arg
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
228 elif opt == '-b':
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
229 backend = arg
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
230 if (len(args) > 1 or
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
231 (len(args) == 1 and args[0] != 'nuke')):
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
232 usage()
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
233 return 1
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
234
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
235 print("Initializing demo instance in:\n %s" % home)
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
236 install_demo(home, backend, template)
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
237 elif opts:
5247
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
238 print("Error: Arguments are not allowed when running an existing demo.")
7f00a47b3559 Make demo.py run under either Python 2 or 3.
Eric S. Raymond <esr@thyrsus.com>
parents: 5070
diff changeset
239 print(" Use the 'nuke' command to start over.")
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
240 sys.exit(1)
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
241
2775
2907abb10e55 rearranged to use the code in roundup-demo script.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2727
diff changeset
242 run_demo(home)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
244
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 if __name__ == '__main__':
4129
481cc919fda8 Allow command-line arguments for more flexible demo setup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4069
diff changeset
246 sys.exit(main())
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247
2648
fe71e108d998 Main Roundup configuration class renamed to CoreConfig;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2639
diff changeset
248 # vim: set filetype=python sts=4 sw=4 et si :

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