diff demo.py @ 1640:d0b29215aa44

pre-release stuff
author Richard Jones <richard@users.sourceforge.net>
date Fri, 09 May 2003 05:04:34 +0000
parents
children ccabdc2055cf
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo.py	Fri May 09 05:04:34 2003 +0000
@@ -0,0 +1,98 @@
+#! /usr/bin/env python
+#
+# Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net)
+# 
+# $Id: demo.py,v 1.1 2003-05-09 05:04:33 richard Exp $
+
+import sys, os, string, re, urlparse
+import shutil, socket, errno, BaseHTTPServer
+from glob import glob
+
+def install_demo(home):
+    # create the instance
+    try:
+        shutil.rmtree(home)
+    except os.error, error:
+        if error.errno != errno.ENOENT:
+            raise
+    from roundup import init, instance, password
+    init.install(home, os.path.join('templates', 'classic'))
+    # don't have email flying around
+    os.remove(os.path.join(home, 'detectors', 'nosyreaction.py'))
+    init.write_select_db(home, 'anydbm')
+
+    # figure basic params for server
+    hostname = socket.gethostname()
+    # 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
+    url = 'http://%s:%s/demo/'%(hostname, port)
+
+    # write the config
+    f = open(os.path.join(home, 'config.py'), 'r')
+    s = f.read().replace('http://tracker.example/cgi-bin/roundup.cgi/bugs/',
+        url)
+    f.close()
+    f = open(os.path.join(home, 'config.py'), 'w')
+    f.write(s)
+    f.close()
+
+    # initialise the database
+    init.initialise(home, 'admin')
+
+    # add the "demo" user
+    tracker = instance.open(home)
+    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():
+    ''' 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':
+        install_demo(home)
+
+    f = open(os.path.join(home, 'config.py'), 'r')
+    url = re.search(r'^TRACKER_WEB\s*=\s*[\'"](http.+/)[\'"]$', f.read(),
+        re.M|re.I).group(1)
+    f.close()
+    hostname, port = urlparse.urlparse(url)[1].split(':')
+    port = int(port)
+
+    # ok, so start up the server
+    from roundup.scripts.roundup_server import RoundupRequestHandler
+    RoundupRequestHandler.TRACKER_HOMES = {'demo': home}
+    httpd = BaseHTTPServer.HTTPServer((hostname, port), RoundupRequestHandler)
+    print 'Server running - connect to:\n  %s'%url
+    print '1. Log in as "demo"/"demo" or "admin"/"admin".'
+    print '2. Hit Control-C to stop the server.'
+    print '3. Re-start the server by running "python demo.py" again.'
+    print '4. Re-initialise the server by running "python demo.py nuke".'
+    try:
+        httpd.serve_forever()
+    except KeyboardInterrupt:
+        print 'Keyboard Interrupt: exiting'
+
+if __name__ == '__main__':
+    run_demo()
+
+# vim: set filetype=python ts=4 sw=4 et si

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