-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathdemo.py
More file actions
128 lines (110 loc) · 3.85 KB
/
demo.py
File metadata and controls
128 lines (110 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#! /usr/bin/env python
#
# Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net)
#
# $Id: demo.py,v 1.23 2004-11-06 15:05:47 a1s Exp $
import errno
import os
import socket
import sys
import urlparse
from glob import glob
from roundup import configuration
from roundup.scripts import roundup_server
def install_demo(home, backend, template):
"""Install a demo tracker
Parameters:
home:
tracker home directory path
backend:
database backend name
template:
full path to the tracker template directory
"""
from roundup import init, instance, password, backends
# set up the config for this tracker
config = configuration.CoreConfig()
config['TRACKER_HOME'] = home
config['MAIL_DOMAIN'] = 'localhost'
config['DATABASE'] = 'db'
if backend in ('mysql', 'postgresql'):
config['RDBMS_HOST'] = 'localhost'
config['RDBMS_USER'] = 'rounduptest'
config['RDBMS_PASSWORD'] = 'rounduptest'
config['RDBMS_NAME'] = 'rounduptest'
# see if we have further db nuking to perform
module = backends.get_backend(backend)
if module.db_exists(config):
module.db_nuke(config)
init.install(home, template)
# don't have email flying around
os.remove(os.path.join(home, 'detectors', 'nosyreaction.py'))
try:
os.remove(os.path.join(home, 'detectors', 'nosyreaction.pyc'))
except os.error, error:
if error.errno != errno.ENOENT:
raise
init.write_select_db(home, backend)
# figure basic params for server
hostname = 'localhost'
# pick a fairly odd, random port
port = 8917
while 1:
print 'Trying to set up web server on port %d ...'%port,
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
s.connect((hostname, port))
except socket.error, e:
if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED:
raise
print 'should be ok.'
break
else:
s.close()
print 'already in use.'
port += 100
config['TRACKER_WEB'] = 'http://%s:%s/demo/'%(hostname, port)
# write the config
config['INSTANT_REGISTRATION'] = 1
config.save(os.path.join(home, config.INI_FILE))
# open the tracker and initialise
tracker = instance.open(home)
tracker.init(password.Password('admin'))
# add the "demo" user
db = tracker.open('admin')
db.user.create(username='demo', password=password.Password('demo'),
realname='Demo User', roles='User')
db.commit()
db.close()
def run_demo(home):
"""Run the demo tracker installed in ``home``"""
cfg = configuration.CoreConfig(home)
url = cfg["TRACKER_WEB"]
hostname, port = urlparse.urlparse(url)[1].split(':')
port = int(port)
success_message = '''Server running - connect to:
%s
1. Log in as "demo"/"demo" or "admin"/"admin".
2. Hit Control-C to stop the server.
3. Re-start the server by running "python demo.py" again.
4. Re-initialise the server by running "python demo.py nuke".
''' % url
# disable command line processing in roundup_server
sys.argv = sys.argv[:1] + ['-p', str(port), 'demo=' + home]
roundup_server.run(success_message=success_message)
def demo_main():
"""Run a demo server for users to play with for instant gratification.
Sets up the web service on localhost. Disables nosy lists.
"""
home = os.path.abspath('demo')
if not os.path.exists(home) or (sys.argv[-1] == 'nuke'):
if len(sys.argv) > 2:
backend = sys.argv[-2]
else:
backend = 'anydbm'
install_demo(home, backend, os.path.join('templates', 'classic'))
run_demo(home)
if __name__ == '__main__':
demo_main()
# vim: set filetype=python sts=4 sw=4 et si :