X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=setup.py;h=aac46c35acabadc0be241dbd2f29c077a702c30c;hb=6129ac97d25b0172419883e26784c457da3b454d;hp=6448f0bc7a829c0e9209315e53e411f411163526;hpb=a86c64f5662b7dbaeb77b58861d94854990bd7e4;p=roundup.git diff --git a/setup.py b/setup.py index 6448f0b..aac46c3 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.59 2004-03-24 05:56:06 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,33 +157,68 @@ 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. + +If you're upgrading from an older version of Roundup you *must* follow +the "Software Upgrade" guidelines given in the maintenance documentation. + +No, really, this is a BETA and if you don't follow the upgrading steps, +particularly the bit about BACKING UP YOUR DATA, I'm NOT GOING TO BE HELD +RESPONSIBLE. This release is NOT FOR GENERAL USE. + +I would *greatly* appreciate people giving this release a whirl with a +copy of their existing setup. It's only through real-world testing of +beta releases that we can ensure that older trackers will be OK. + +This release introduces far too many features to list here. Some +highlights: + +- added postgresql backend (originally from sf patch 761740, many changes + since) +- RDBMS backends implement their session and one-time-key stores and + full-text indexers; thus they are now performing their own locking + internally +- added new "actor" automatic property (indicates user who cause the last + "activity") +- all RDBMS backends have sensible data typed columns and indexes on + several columns +- we support confirming registration by replying to the email (sf bug + 763668) +- all HTML templating methods now automatically check for permissions + (either view or edit as appropriate), greatly simplifying templates +''', 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 = [ @@ -218,80 +247,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