annotate demo.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +0000
parents 31cb1014300c
children a9e1fff1e793
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 #
2374
31cb1014300c Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents: 2167
diff changeset
5 # $Id: demo.py,v 1.11 2004-05-28 01:09:10 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)
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'
2374
31cb1014300c Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents: 2167
diff changeset
26 if module.db_exists(config):
31cb1014300c Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents: 2167
diff changeset
27 module.db_nuke(config)
2167
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
28 elif backend == 'postgresql':
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
29 class config:
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
30 POSTGRESQL_DATABASE = {'database': 'rounduptest'}
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
31 DATABASE = 'home'
2374
31cb1014300c Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents: 2167
diff changeset
32 if module.db_exists(config):
31cb1014300c Switch to using sqlite's own locking mechanisms...
Richard Jones <richard@users.sourceforge.net>
parents: 2167
diff changeset
33 module.db_nuke(config)
2167
4dafc87a0113 better support for demoing mysql/postgresql
Richard Jones <richard@users.sourceforge.net>
parents: 2104
diff changeset
34
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 init.install(home, os.path.join('templates', 'classic'))
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 # don't have email flying around
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 os.remove(os.path.join(home, 'detectors', 'nosyreaction.py'))
1727
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
38 try:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
39 os.remove(os.path.join(home, 'detectors', 'nosyreaction.pyc'))
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
40 except os.error, error:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
41 if error.errno != errno.ENOENT:
Richard Jones <richard@users.sourceforge.net>
parents: 1726
diff changeset
42 raise
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
43 init.write_select_db(home, backend)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 # figure basic params for server
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 hostname = socket.gethostname()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 # pick a fairly odd, random port
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 port = 8917
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 while 1:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 print 'Trying to set up web server on port %d ...'%port,
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 try:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 s.connect((hostname, port))
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 except socket.error, e:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 raise
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 print 'should be ok.'
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 break
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 else:
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 s.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 print 'already in use.'
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 port += 100
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 url = 'http://%s:%s/demo/'%(hostname, port)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 # write the config
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 f = open(os.path.join(home, 'config.py'), 'r')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 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
69 url)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 f.close()
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
71 # 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
72 s = s + """
62ed6505cbec MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents: 1902
diff changeset
73 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
74 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
75 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
76 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
77 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
78 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
79 """
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 f = open(os.path.join(home, 'config.py'), 'w')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 f.write(s)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 f.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 # initialise the database
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 init.initialise(home, 'admin')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 # add the "demo" user
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 tracker = instance.open(home)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 db = tracker.open('admin')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 db.user.create(username='demo', password=password.Password('demo'),
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 realname='Demo User', roles='User')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 db.commit()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 db.close()
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 def run_demo():
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 ''' 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
97
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 Sets up the web service on localhost. Disables nosy lists.
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 '''
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 home = os.path.abspath('demo')
2104
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
101 backend = 'anydbm'
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 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
103 if len(sys.argv) > 2:
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
104 backend = sys.argv[1]
f376437cd35c more metakit fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2100
diff changeset
105 install_demo(home, backend)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 f = open(os.path.join(home, 'config.py'), 'r')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 url = re.search(r'^TRACKER_WEB\s*=\s*[\'"](http.+/)[\'"]$', f.read(),
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 re.M|re.I).group(1)
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 f.close()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 hostname, port = urlparse.urlparse(url)[1].split(':')
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 port = int(port)
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 # 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
115 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
116 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
117
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
118 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
119 %s
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1727
diff changeset
120 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
121 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
122 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
123 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
124
1902
7b0a655edb88 Don't let roundup_server.run() interpret the command-line arguments...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
125 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
126 roundup_server.run(port, success_message)
1640
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 if __name__ == '__main__':
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 run_demo()
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130
d0b29215aa44 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 # vim: set filetype=python ts=4 sw=4 et si

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