annotate demo.py @ 2119:cc4667ef3f12

Added the ability to toggle where error messages go. They either go to the user (default, for backwards compatibility), the dispatcher, or both. These are able to be toggled via settings in config.py. Please refer to upgrading.txt for more details. (And Richard, let me know if I've done anything wrong with this checkin. :))
author Eddie Parker <eparker@users.sourceforge.net>
date Thu, 25 Mar 2004 19:27:15 +0000
parents f376437cd35c
children 4dafc87a0113
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #! /usr/bin/env python
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)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 #
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
5 # $Id: demo.py,v 1.9 2004-03-24 05:39:47 richard Exp $
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 import sys, os, string, re, urlparse
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 import shutil, socket, errno, BaseHTTPServer
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 from glob import glob
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
11 def install_demo(home, backend):
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 # create the instance
1650
a4db6067814a cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1645
diff changeset
13 if os.path.exists(home):
a4db6067814a cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1645
diff changeset
14 shutil.rmtree(home)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 from roundup import init, instance, password
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 init.install(home, os.path.join('templates', 'classic'))
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 # don't have email flying around
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 os.remove(os.path.join(home, 'detectors', 'nosyreaction.py'))
1727
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
19 try:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
20 os.remove(os.path.join(home, 'detectors', 'nosyreaction.pyc'))
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
21 except os.error, error:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
22 if error.errno != errno.ENOENT:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
23 raise
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
24 init.write_select_db(home, backend)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 # figure basic params for server
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 hostname = socket.gethostname()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 # pick a fairly odd, random port
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 port = 8917
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 while 1:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 print 'Trying to set up web server on port %d ...'%port,
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 try:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 s.connect((hostname, port))
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 except socket.error, e:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 raise
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 print 'should be ok.'
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 break
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 else:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 s.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 print 'already in use.'
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 port += 100
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 url = 'http://%s:%s/demo/'%(hostname, port)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 # write the config
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 f = open(os.path.join(home, 'config.py'), 'r')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 s = f.read().replace('http://tracker.example/cgi-bin/roundup.cgi/bugs/',
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 url)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 f.close()
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
52 # DB connection stuff for mysql and postgresql
2100
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
53 s = s + """
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
54 MYSQL_DBHOST = 'localhost'
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
55 MYSQL_DBUSER = 'rounduptest'
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
56 MYSQL_DBPASSWORD = 'rounduptest'
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
57 MYSQL_DBNAME = 'rounduptest'
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
58 MYSQL_DATABASE = (MYSQL_DBHOST, MYSQL_DBUSER, MYSQL_DBPASSWORD, MYSQL_DBNAME)
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
59 POSTGRESQL_DATABASE = {'database': 'rounduptest'}
2100
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
60 """
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 f = open(os.path.join(home, 'config.py'), 'w')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 f.write(s)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 f.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 # initialise the database
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 init.initialise(home, 'admin')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 # add the "demo" user
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 tracker = instance.open(home)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 db = tracker.open('admin')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 db.user.create(username='demo', password=password.Password('demo'),
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 realname='Demo User', roles='User')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 db.commit()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 db.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 def run_demo():
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 ''' Run a demo server for users to play with for instant gratification.
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 Sets up the web service on localhost. Disables nosy lists.
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 '''
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 home = os.path.abspath('demo')
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
82 backend = 'anydbm'
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 if not os.path.exists(home) or sys.argv[-1] == 'nuke':
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
84 if len(sys.argv) > 2:
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
85 backend = sys.argv[1]
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
86 install_demo(home, backend)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 f = open(os.path.join(home, 'config.py'), 'r')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 url = re.search(r'^TRACKER_WEB\s*=\s*[\'"](http.+/)[\'"]$', f.read(),
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 re.M|re.I).group(1)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 f.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 hostname, port = urlparse.urlparse(url)[1].split(':')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 port = int(port)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 # ok, so start up the server
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
96 from roundup.scripts import roundup_server
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
97 roundup_server.RoundupRequestHandler.TRACKER_HOMES = {'demo': home}
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
98
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
99 success_message = '''Server running - connect to:
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
100 %s
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
101 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
102 2. Hit Control-C to stop the server.
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
103 3. Re-start the server by running "python demo.py" again.
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
104 4. Re-initialise the server by running "python demo.py nuke".''' % url
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
105
1902
7b0a655edb88 Don't let roundup_server.run() interpret the command-line arguments...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
106 sys.argv = sys.argv[:1]
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
107 roundup_server.run(port, success_message)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 if __name__ == '__main__':
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 run_demo()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 # vim: set filetype=python ts=4 sw=4 et si

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