Mercurial > p > roundup > code
annotate demo.py @ 2365:3a80831ecebe
If the target platform is win32, create .bat files...
...instead of *nix shell scripts.
Target platform is set to "win32" if main command is 'bdist_wininst'
or if the command is 'bdist' and it has the list of formats (from
command line or config file) and the first item on that list is wininst.
Otherwise target platform is set to current (build) platform.
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Wed, 26 May 2004 10:00:53 +0000 |
| parents | 4dafc87a0113 |
| children | 31cb1014300c b654a33346a6 |
| 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 # |
|
2167
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
5 # $Id: demo.py,v 1.10 2004-03-31 23:07:51 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 | 13 if os.path.exists(home): |
| 14 shutil.rmtree(home) | |
|
2167
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
15 from roundup import init, instance, password, backends |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
16 |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
17 # see if we have further db nuking to perform |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
18 module = getattr(backends, backend) |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
19 if backend == 'mysql': |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
20 class config: |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
21 MYSQL_DBHOST = 'localhost' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
22 MYSQL_DBUSER = 'rounduptest' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
23 MYSQL_DBPASSWORD = 'rounduptest' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
24 MYSQL_DBNAME = 'rounduptest' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
25 DATABASE = 'home' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
26 module.db_nuke(config) |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
27 elif backend == 'postgresql': |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
28 class config: |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
29 POSTGRESQL_DATABASE = {'database': 'rounduptest'} |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
30 DATABASE = 'home' |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
31 module.db_nuke(config, 1) |
|
4dafc87a0113
better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents:
2104
diff
changeset
|
32 |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 init.install(home, os.path.join('templates', 'classic')) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 # don't have email flying around |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 os.remove(os.path.join(home, 'detectors', 'nosyreaction.py')) |
| 1727 | 36 try: |
| 37 os.remove(os.path.join(home, 'detectors', 'nosyreaction.pyc')) | |
| 38 except os.error, error: | |
| 39 if error.errno != errno.ENOENT: | |
| 40 raise | |
|
2104
f376437cd35c
more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
41 init.write_select_db(home, backend) |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 # figure basic params for server |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 hostname = socket.gethostname() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 # pick a fairly odd, random port |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 port = 8917 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 while 1: |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 print 'Trying to set up web server on port %d ...'%port, |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 try: |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 s.connect((hostname, port)) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 except socket.error, e: |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED: |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 raise |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 print 'should be ok.' |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 break |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 else: |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 s.close() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 print 'already in use.' |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 port += 100 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 url = 'http://%s:%s/demo/'%(hostname, port) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 # write the config |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 f = open(os.path.join(home, 'config.py'), 'r') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 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
|
67 url) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 f.close() |
|
2104
f376437cd35c
more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
69 # 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
|
70 s = s + """ |
|
62ed6505cbec
MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents:
1902
diff
changeset
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 """ |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 f = open(os.path.join(home, 'config.py'), 'w') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 f.write(s) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 f.close() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 # initialise the database |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 init.initialise(home, 'admin') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 # add the "demo" user |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 tracker = instance.open(home) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 db = tracker.open('admin') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 db.user.create(username='demo', password=password.Password('demo'), |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 realname='Demo User', roles='User') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 db.commit() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 db.close() |
|
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 def run_demo(): |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 ''' 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
|
95 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 Sets up the web service on localhost. Disables nosy lists. |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 ''' |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 home = os.path.abspath('demo') |
|
2104
f376437cd35c
more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
99 backend = 'anydbm' |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 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
|
101 if len(sys.argv) > 2: |
|
f376437cd35c
more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
102 backend = sys.argv[1] |
|
f376437cd35c
more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
103 install_demo(home, backend) |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 f = open(os.path.join(home, 'config.py'), 'r') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 url = re.search(r'^TRACKER_WEB\s*=\s*[\'"](http.+/)[\'"]$', f.read(), |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 re.M|re.I).group(1) |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 f.close() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 hostname, port = urlparse.urlparse(url)[1].split(':') |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 port = int(port) |
|
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 # 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
|
113 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
|
114 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
|
115 |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1727
diff
changeset
|
116 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
|
117 %s |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1727
diff
changeset
|
118 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
|
119 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
|
120 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
|
121 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
|
122 |
|
1902
7b0a655edb88
Don't let roundup_server.run() interpret the command-line arguments...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
123 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
|
124 roundup_server.run(port, success_message) |
|
1640
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 if __name__ == '__main__': |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 run_demo() |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 |
|
d0b29215aa44
pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 # vim: set filetype=python ts=4 sw=4 et si |
