X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=setup.py;h=9d08e5d161fcccc77a150ad46ec54fbb19e61b11;hb=53ea64cdb21d7beee1f69c3b7057d97ec4e84a74;hp=6448f0bc7a829c0e9209315e53e411f411163526;hpb=a86c64f5662b7dbaeb77b58861d94854990bd7e4;p=roundup.git diff --git a/setup.py b/setup.py index 6448f0b..9d08e5d 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: setup.py,v 1.45 2003-04-07 03:47:44 richard Exp $ +# $Id: setup.py,v 1.58 2003-11-13 05:56:48 richard Exp $ from distutils.core import setup, Extension from distutils.util import get_platform @@ -26,13 +26,11 @@ import sys, os, string from glob import glob # patch distutils if it can't cope with the "classifiers" keyword -if sys.version < '2.2.3': - from distutils.dist import DistributionMetadata +from distutils.dist import DistributionMetadata +if not hasattr(DistributionMetadata, 'classifiers'): DistributionMetadata.classifiers = None DistributionMetadata.download_url = None -from roundup.templates.builder import makeHtmlBase - ############################################################################# ### Build script files @@ -79,10 +77,22 @@ class build_scripts_create(build_scripts): module = os.path.splitext(os.path.basename(script))[0] module = string.translate(module, to_module) + cmdopt=self.distribution.command_options + if (cmdopt.has_key('install') and + cmdopt['install'].has_key('prefix')): + prefix = cmdopt['install']['prefix'][1] + version = '%d.%d'%sys.version_info[:2] + prefix = ''' +import sys +sys.path.insert(1, "%s/lib/python%s/site-packages") +'''%(prefix, version) + else: + prefix = '' script_vars = { 'python': os.path.normpath(sys.executable), 'package': self.package_name, 'module': module, + 'prefix': prefix, } self.announce("creating %s" % outfile) @@ -95,7 +105,7 @@ class build_scripts_create(build_scripts): 'if "%%_4ver%%" == "" "%(python)s" -O -c "from %(package)s.scripts.%(module)s import run; run()" %%*\n' % script_vars) else: - file.write('#! %(python)s -O\n' + file.write('#! %(python)s -O\n%(prefix)s' 'from %(package)s.scripts.%(module)s import run\n' 'run()\n' % script_vars) @@ -124,26 +134,11 @@ def scriptname(path): ### Main setup stuff ############################################################################# -def isTemplateDir(dir): - return dir[0] != '.' and dir != 'CVS' and os.path.isdir(dir) \ - and os.path.isfile(os.path.join(dir, '__init__.py')) - -# use that function to list all the templates -templates = map(os.path.basename, filter(isTemplateDir, - glob(os.path.join('roundup', 'templates', '*')))) - -def buildTemplates(): - for template in templates: - tdir = os.path.join('roundup', 'templates', template) - makeHtmlBase(tdir) - def main(): # build list of scripts from their implementation modules roundup_scripts = map(scriptname, glob('roundup/scripts/[!_]*.py')) # template munching - templates = map(os.path.basename, filter(isTemplateDir, - glob(os.path.join('roundup', 'templates', '*')))) packagelist = [ 'roundup', 'roundup.cgi', @@ -151,8 +146,7 @@ def main(): 'roundup.cgi.TAL', 'roundup.cgi.ZTUtils', 'roundup.backends', - 'roundup.scripts', - 'roundup.templates' + 'roundup.scripts' ] installdatafiles = [ ('share/roundup/cgi-bin', ['cgi-bin/roundup.cgi']), @@ -163,37 +157,70 @@ def main(): installdatafiles.append(('man/man1', ['doc/roundup-admin.1', 'doc/roundup-mailgw.1', 'doc/roundup-server.1'])) - # munge the template HTML into the htmlbase module - buildTemplates() - - # add the templates to the setup packages and data files lists - for template in templates: - tdir = os.path.join('roundup', 'templates', template) - - # add the template package and subpackage - packagelist.append('roundup.templates.%s' % template) - packagelist.append('roundup.templates.%s.detectors' % template) - + # add the templates to the data files lists + from roundup.init import listTemplates + templates = [t['path'] for t in listTemplates('templates').values()] + for tdir in templates: # scan for data files - tfiles = glob(os.path.join(tdir, 'html', '*')) - tfiles = filter(os.path.isfile, tfiles) - installdatafiles.append( - ('share/roundup/templates/%s/html' % template, tfiles) - ) + for idir in '. detectors html'.split(): + idir = os.path.join(tdir, idir) + tfiles = [] + for f in os.listdir(idir): + if f.startswith('.'): + continue + ifile = os.path.join(idir, f) + if os.path.isfile(ifile): + tfiles.append(ifile) + installdatafiles.append( + (os.path.join('share', 'roundup', idir), tfiles) + ) # perform the setup action from roundup import __version__ setup( name = "roundup", version = __version__, - description = "Roundup issue tracking system.", + description = "A simple-to-use and -install issue-tracking system" + " with command-line, web and e-mail interfaces. Highly" + " customisable.", + long_description = +'''Roundup is a simple-to-use and -install issue-tracking system with +command-line, web and e-mail interfaces. It is based on the winning design +from Ka-Ping Yee in the Software Carpentry "Track" design competition. + +The 0.6 release has lots of new goodies including: + +- new instant-gratification Demo Mode ("python demo.py" :) +- added mysql backend (see doc/mysql.txt for details) +- web interface cleanups including nicer history display, nicer index + navigation and nicer popup list windows +- searching of date ranges +- better international support, including utf-8 email handling and ability + to display localized dates in web interface. +- more documentation including revamped design document, unix manual pages + and some FAQ entries +- significantly more powerful form handling allowing editing of multiple + items and creation of multiple items +- tracker templates can contain subdirectories and static files (e.g. + images) and we may now distribute templates separately from Roundup. + Template HTML files now have a .html extension too. +- user registration is now a two-step process, with confirmation from the + email address supplied in the registration form, and we also have a + password reset feature for forgotten password / login +- Windows Service mode for roundup-server when daemonification is + attempted on Windows +- lots of speed enhancements, making the web interface much more responsive +- fixed issues with dumb email or web clients +- email system handles more SMTP and POP features (TLS, APOP, ...) +- lots more little tweaks and back-end work... +''', author = "Richard Jones", author_email = "richard@users.sourceforge.net", - url = 'http://sourceforge.net/projects/roundup/', + url = 'http://roundup.sourceforge.net/', download_url = 'http://sourceforge.net/project/showfiles.php?group_id=31577', packages = packagelist, classifiers = [ - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Environment :: Web Environment', 'Intended Audience :: End Users/Desktop', @@ -218,80 +245,7 @@ def main(): data_files = installdatafiles ) -def install_demo(): - ''' Install a demo server for users to play with for instant gratification. - - Sets up the web service on localhost port 8080. Disables nosy lists. - ''' - import shutil, socket, errno, BaseHTTPServer - - # create the instance - home = os.path.abspath('demo') - try: - shutil.rmtree(home) - except os.error, error: - if error.errno != errno.ENOENT: - raise - from roundup import init, instance, password - init.install(home, '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() - port = 8080 - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - while 1: - print 'Trying to set up web server on port %d ...'%port, - try: - s.bind((hostname, port)) - except socket.error, error: - if error.errno != errno.EADDRINUSE: - raise - print 'already in use.' - port += 100 - else: - print 'should be ok.' - break - 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() - - # 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 'You may log in as "demo"/"demo" or "admin"/"admin".' - try: - httpd.serve_forever() - except KeyboardInterrupt: - print 'Keyboard Interrupt: exiting' - if __name__ == '__main__': - if len(sys.argv) > 1 and sys.argv[1] == 'demo': - install_demo() - else: - main() + main() # vim: set filetype=python ts=4 sw=4 et si