summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 21966fc)
raw | patch | inline | side by side (parent: 21966fc)
author | jhermann <jhermann@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Tue, 29 Jan 2002 20:07:15 +0000 (20:07 +0000) | ||
committer | jhermann <jhermann@57a73879-2fb5-44c3-a270-3262357dd7e2> | |
Tue, 29 Jan 2002 20:07:15 +0000 (20:07 +0000) |
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@606 57a73879-2fb5-44c3-a270-3262357dd7e2
roundup-admin | [deleted file] | patch | blob | history |
roundup-mailgw | [deleted file] | patch | blob | history |
roundup-server | [deleted file] | patch | blob | history |
roundup/scripts/__init__.py | [new file with mode: 0644] | patch | blob |
roundup/scripts/roundup_admin.py | patch | blob | history | |
roundup/scripts/roundup_mailgw.py | patch | blob | history | |
roundup/scripts/roundup_server.py | patch | blob | history | |
setup.py | patch | blob | history |
diff --git a/roundup-admin b/roundup-admin
--- a/roundup-admin
+++ /dev/null
@@ -1,313 +0,0 @@
-#! /usr/bin/env python
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: roundup-admin,v 1.61 2002-01-05 02:21:21 richard Exp $
-
-# python version check
-from roundup import version_check
-
-# import the admin tool guts and make it go
-from roundup.admin import AdminTool
-from roundup.i18n import _
-
-import sys
-tool = AdminTool()
-sys.exit(tool.main())
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.60 2002/01/05 02:11:22 richard
-# I18N'ed roundup admin - and split the code off into a module so it can be used
-# elsewhere.
-# Big issue with this is the doc strings - that's the help. We're probably going to
-# have to switch to not use docstrings, which will suck a little :(
-#
-# Revision 1.59 2001/12/31 05:20:34 richard
-# . #496360 ] table width does not work
-#
-# Revision 1.58 2001/12/31 05:12:52 richard
-# actually handle the advertised <cr> response to "commit y/N?"
-#
-# Revision 1.57 2001/12/31 05:12:01 richard
-# added some quoting instructions to roundup-admin
-#
-# Revision 1.56 2001/12/31 05:09:20 richard
-# Added better tokenising to roundup-admin - handles spaces and stuff. Can
-# use quoting or backslashes. See the roundup.token pydoc.
-#
-# Revision 1.55 2001/12/17 03:52:47 richard
-# Implemented file store rollback. As a bonus, the hyperdb is now capable of
-# storing more than one file per node - if a property name is supplied,
-# the file is called designator.property.
-# I decided not to migrate the existing files stored over to the new naming
-# scheme - the FileClass just doesn't specify the property name.
-#
-# Revision 1.54 2001/12/15 23:09:23 richard
-# Some cleanups in roundup-admin, also made it work again...
-#
-# Revision 1.53 2001/12/13 00:20:00 richard
-# . Centralised the python version check code, bumped version to 2.1.1 (really
-# needs to be 2.1.2, but that isn't released yet :)
-#
-# Revision 1.52 2001/12/12 21:47:45 richard
-# . Message author's name appears in From: instead of roundup instance name
-# (which still appears in the Reply-To:)
-# . envelope-from is now set to the roundup-admin and not roundup itself so
-# delivery reports aren't sent to roundup (thanks Patrick Ohly)
-#
-# Revision 1.51 2001/12/10 00:57:38 richard
-# From CHANGES:
-# . Added the "display" command to the admin tool - displays a node's values
-# . #489760 ] [issue] only subject
-# . fixed the doc/index.html to include the quoting in the mail alias.
-#
-# Also:
-# . fixed roundup-admin so it works with transactions
-# . disabled the back_anydbm module if anydbm tries to use dumbdbm
-#
-# Revision 1.50 2001/12/02 05:06:16 richard
-# . We now use weakrefs in the Classes to keep the database reference, so
-# the close() method on the database is no longer needed.
-# I bumped the minimum python requirement up to 2.1 accordingly.
-# . #487480 ] roundup-server
-# . #487476 ] INSTALL.txt
-#
-# I also cleaned up the change message / post-edit stuff in the cgi client.
-# There's now a clearly marked "TODO: append the change note" where I believe
-# the change note should be added there. The "changes" list will obviously
-# have to be modified to be a dict of the changes, or somesuch.
-#
-# More testing needed.
-#
-# Revision 1.49 2001/12/01 07:17:50 richard
-# . We now have basic transaction support! Information is only written to
-# the database when the commit() method is called. Only the anydbm
-# backend is modified in this way - neither of the bsddb backends have been.
-# The mail, admin and cgi interfaces all use commit (except the admin tool
-# doesn't have a commit command, so interactive users can't commit...)
-# . Fixed login/registration forwarding the user to the right page (or not,
-# on a failure)
-#
-# Revision 1.48 2001/11/27 22:32:03 richard
-# typo
-#
-# Revision 1.47 2001/11/26 22:55:56 richard
-# Feature:
-# . Added INSTANCE_NAME to configuration - used in web and email to identify
-# the instance.
-# . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
-# signature info in e-mails.
-# . Some more flexibility in the mail gateway and more error handling.
-# . Login now takes you to the page you back to the were denied access to.
-#
-# Fixed:
-# . Lots of bugs, thanks Roché and others on the devel mailing list!
-#
-# Revision 1.46 2001/11/21 03:40:54 richard
-# more new property handling
-#
-# Revision 1.45 2001/11/12 22:51:59 jhermann
-# Fixed option & associated error handling
-#
-# Revision 1.44 2001/11/12 22:01:06 richard
-# Fixed issues with nosy reaction and author copies.
-#
-# Revision 1.43 2001/11/09 22:33:28 richard
-# More error handling fixes.
-#
-# Revision 1.42 2001/11/09 10:11:08 richard
-# . roundup-admin now handles all hyperdb exceptions
-#
-# Revision 1.41 2001/11/09 01:25:40 richard
-# Should parse with python 1.5.2 now.
-#
-# Revision 1.40 2001/11/08 04:42:00 richard
-# Expanded the already-abbreviated "initialise" and "specification" commands,
-# and added a comment to the command help about the abbreviation.
-#
-# Revision 1.39 2001/11/08 04:29:59 richard
-# roundup-admin now accepts abbreviated commands (eg. l = li = lis = list)
-# [thanks Engelbert Gruber for the inspiration]
-#
-# Revision 1.38 2001/11/05 23:45:40 richard
-# Fixed newuser_action so it sets the cookie with the unencrypted password.
-# Also made it present nicer error messages (not tracebacks).
-#
-# Revision 1.37 2001/10/23 01:00:18 richard
-# Re-enabled login and registration access after lopping them off via
-# disabling access for anonymous users.
-# Major re-org of the htmltemplate code, cleaning it up significantly. Fixed
-# a couple of bugs while I was there. Probably introduced a couple, but
-# things seem to work OK at the moment.
-#
-# Revision 1.36 2001/10/21 00:45:15 richard
-# Added author identification to e-mail messages from roundup.
-#
-# Revision 1.35 2001/10/20 11:58:48 richard
-# Catch errors in login - no username or password supplied.
-# Fixed editing of password (Password property type) thanks Roch'e Compaan.
-#
-# Revision 1.34 2001/10/18 02:16:42 richard
-# Oops, committed the admin script with the wierd #! line.
-# Also, made the thing into a class to reduce parameter passing.
-# Nuked the leading whitespace from the help __doc__ displays too.
-#
-# Revision 1.33 2001/10/17 23:13:19 richard
-# Did a fair bit of work on the admin tool. Now has an extra command "table"
-# which displays node information in a tabular format. Also fixed import and
-# export so they work. Removed freshen.
-# Fixed quopri usage in mailgw from bug reports.
-#
-# Revision 1.32 2001/10/17 06:57:29 richard
-# Interactive startup blurb - need to figure how to get the version in there.
-#
-# Revision 1.31 2001/10/17 06:17:26 richard
-# Now with readline support :)
-#
-# Revision 1.30 2001/10/17 06:04:00 richard
-# Beginnings of an interactive mode for roundup-admin
-#
-# Revision 1.29 2001/10/16 03:48:01 richard
-# admin tool now complains if a "find" is attempted with a non-link property.
-#
-# Revision 1.28 2001/10/13 00:07:39 richard
-# More help in admin tool.
-#
-# Revision 1.27 2001/10/11 23:43:04 richard
-# Implemented the comma-separated printing option in the admin tool.
-# Fixed a typo (more of a vim-o actually :) in mailgw.
-#
-# Revision 1.26 2001/10/11 05:03:51 richard
-# Marked the roundup-admin import/export as experimental since they're not fully
-# operational.
-#
-# Revision 1.25 2001/10/10 04:12:32 richard
-# The setup.cfg file is just causing pain. Away it goes.
-#
-# Revision 1.24 2001/10/10 03:54:57 richard
-# Added database importing and exporting through CSV files.
-# Uses the csv module from object-craft for exporting if it's available.
-# Requires the csv module for importing.
-#
-# Revision 1.23 2001/10/09 23:36:25 richard
-# Spit out command help if roundup-admin command doesn't get an argument.
-#
-# Revision 1.22 2001/10/09 07:25:59 richard
-# Added the Password property type. See "pydoc roundup.password" for
-# implementation details. Have updated some of the documentation too.
-#
-# Revision 1.21 2001/10/05 02:23:24 richard
-# . roundup-admin create now prompts for property info if none is supplied
-# on the command-line.
-# . hyperdb Class getprops() method may now return only the mutable
-# properties.
-# . Login now uses cookies, which makes it a whole lot more flexible. We can
-# now support anonymous user access (read-only, unless there's an
-# "anonymous" user, in which case write access is permitted). Login
-# handling has been moved into cgi_client.Client.main()
-# . The "extended" schema is now the default in roundup init.
-# . The schemas have had their page headings modified to cope with the new
-# login handling. Existing installations should copy the interfaces.py
-# file from the roundup lib directory to their instance home.
-# . Incorrectly had a Bizar Software copyright on the cgitb.py module from
-# Ping - has been removed.
-# . Fixed a whole bunch of places in the CGI interface where we should have
-# been returning Not Found instead of throwing an exception.
-# . Fixed a deviation from the spec: trying to modify the 'id' property of
-# an item now throws an exception.
-#
-# Revision 1.20 2001/10/04 02:12:42 richard
-# Added nicer command-line item adding: passing no arguments will enter an
-# interactive more which asks for each property in turn. While I was at it, I
-# fixed an implementation problem WRT the spec - I wasn't raising a
-# ValueError if the key property was missing from a create(). Also added a
-# protected=boolean argument to getprops() so we can list only the mutable
-# properties (defaults to yes, which lists the immutables).
-#
-# Revision 1.19 2001/10/01 06:40:43 richard
-# made do_get have the args in the correct order
-#
-# Revision 1.18 2001/09/18 22:58:37 richard
-#
-# Added some more help to roundu-admin
-#
-# Revision 1.17 2001/08/28 05:58:33 anthonybaxter
-# added missing 'import' statements.
-#
-# Revision 1.16 2001/08/12 06:32:36 richard
-# using isinstance(blah, Foo) now instead of isFooType
-#
-# Revision 1.15 2001/08/07 00:24:42 richard
-# stupid typo
-#
-# Revision 1.14 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.13 2001/08/05 07:44:13 richard
-# Instances are now opened by a special function that generates a unique
-# module name for the instances on import time.
-#
-# Revision 1.12 2001/08/03 01:28:33 richard
-# Used the much nicer load_package, pointed out by Steve Majewski.
-#
-# Revision 1.11 2001/08/03 00:59:34 richard
-# Instance import now imports the instance using imp.load_module so that
-# we can have instance homes of "roundup" or other existing python package
-# names.
-#
-# Revision 1.10 2001/07/30 08:12:17 richard
-# Added time logging and file uploading to the templates.
-#
-# Revision 1.9 2001/07/30 03:52:55 richard
-# init help now lists templates and backends
-#
-# Revision 1.8 2001/07/30 02:37:07 richard
-# Freshen is really broken. Commented out.
-#
-# Revision 1.7 2001/07/30 01:28:46 richard
-# Bugfixes
-#
-# Revision 1.6 2001/07/30 00:57:51 richard
-# Now uses getopt, much improved command-line parsing. Much fuller help. Much
-# better internal structure. It's just BETTER. :)
-#
-# Revision 1.5 2001/07/30 00:04:48 richard
-# Made the "init" prompting more friendly.
-#
-# Revision 1.4 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.3 2001/07/23 08:45:28 richard
-# ok, so now "./roundup-admin init" will ask questions in an attempt to get a
-# workable instance_home set up :)
-# _and_ anydbm has had its first test :)
-#
-# Revision 1.2 2001/07/23 08:20:44 richard
-# Moved over to using marshal in the bsddb and anydbm backends.
-# roundup-admin now has a "freshen" command that'll load/save all nodes (not
-# retired - mod hyperdb.Class.list() so it lists retired nodes)
-#
-# Revision 1.1 2001/07/23 03:46:48 richard
-# moving the bin files to facilitate out-of-the-boxness
-#
-# Revision 1.1 2001/07/22 11:15:45 richard
-# More Grande Splite stuff
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/roundup-mailgw b/roundup-mailgw
--- a/roundup-mailgw
+++ /dev/null
@@ -1,271 +0,0 @@
-#! /usr/bin/python
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-# $Id: roundup-mailgw,v 1.21 2002-01-11 07:02:29 grubert Exp $
-
-# python version check
-from roundup import version_check
-
-import sys, os, re, cStringIO
-
-from roundup.mailgw import Message
-from roundup.i18n import _
-
-def do_pipe(handler):
- '''Read a message from standard input and pass it to the mail handler.
- '''
- handler.main(sys.stdin)
- return 0
-
-def do_mailbox(handler, filename):
- '''Read a series of messages from the specified unix mailbox file and
- pass each to the mail handler.
- '''
- # open the spool file and lock it
- import fcntl, FCNTL
- f = open(filename, 'r+')
- fcntl.flock(f.fileno(), FCNTL.LOCK_EX)
-
- # handle and clear the mailbox
- try:
- from mailbox import UnixMailbox
- mailbox = UnixMailbox(f, factory=Message)
- # grab one message
- message = mailbox.next()
- while message:
- # call the instance mail handler
- handler.handle_Message(message)
- message = mailbox.next()
- # nuke the file contents
- os.ftruncate(f.fileno(), 0)
- except:
- import traceback
- traceback.print_exc()
- return 1
- fcntl.flock(f.fileno(), FCNTL.LOCK_UN)
- return 0
-
-def do_pop(handler, server, user='', password=''):
- '''Read a series of messages from the specified POP server.
- '''
- import getpass, poplib, socket
- try:
- if not user:
- user = raw_input(_('User: '))
- if not password:
- password = getpass.getpass()
- except (KeyboardInterrupt, EOFError):
- # Ctrl C or D maybe also Ctrl Z under Windows.
- print "\nAborted by user."
- return 1
-
- # open a connection to the server and retrieve all messages
- try:
- server = poplib.POP3(server)
- except socket.error, message:
- print "POP server error:", message
- return 1
- server.user(user)
- server.pass_(password)
- numMessages = len(server.list()[1])
- for i in range(1, numMessages+1):
- # retr: returns
- # [ pop response e.g. '+OK 459 octets',
- # [ array of message lines ],
- # number of octets ]
- lines = server.retr(i)[1]
- s = cStringIO.StringIO('\n'.join(lines))
- s.seek(0)
- handler.handle_Message(Message(s))
- # delete the message
- server.dele(i)
-
- # quit the server to commit changes.
- server.quit()
- return 0
-
-def usage(args, message=None):
- if message is not None:
- print message
- print _('Usage: %(program)s <instance home> [source spec]')%{'program': args[0]}
- print _('''
-The roundup mail gateway may be called in one of two ways:
- . with an instance home as the only argument,
- . with both an instance home and a mail spool file, or
- . with both an instance home and a pop server account.
-
-PIPE:
- In the first case, the mail gateway reads a single message from the
- standard input and submits the message to the roundup.mailgw module.
-
-UNIX mailbox:
- In the second case, the gateway reads all messages from the mail spool
- file and submits each in turn to the roundup.mailgw module. The file is
- emptied once all messages have been successfully handled. The file is
- specified as:
- mailbox /path/to/mailbox
-
-POP:
- In the third case, the gateway reads all messages from the POP server
- specified and submits each in turn to the roundup.mailgw module. The
- server is specified as:
- pop username:password@server
- The username and password may be omitted:
- pop username@server
- pop server
- are both valid. The username and/or password will be prompted for if
- not supplied on the command-line.
-''')
- return 1
-
-def main(args):
- '''Handle the arguments to the program and initialise environment.
- '''
- # figure the instance home
- if len(args) > 1:
- instance_home = args[1]
- else:
- instance_home = os.environ.get('ROUNDUP_INSTANCE', '')
- if not instance_home:
- return usage(args)
-
- # get the instance
- import roundup.instance
- instance = roundup.instance.open(instance_home)
-
- # get a mail handler
- db = instance.open('admin')
- handler = instance.MailGW(instance, db)
-
- # if there's no more arguments, read a single message from stdin
- if len(args) == 2:
- return do_pipe(handler)
-
- # otherwise, figure what sort of mail source to handle
- if len(args) < 4:
- return usage(args, _('Error: not enough source specification information'))
- source, specification = args[2:]
- if source == 'mailbox':
- return do_mailbox(handler, specification)
- elif source == 'pop':
- m = re.match(r'((?P<user>[^:]+)(:(?P<pass>.+))?@)?(?P<server>.+)',
- specification)
- if m:
- return do_pop(handler, m.group('server'), m.group('user'),
- m.group('pass'))
- return usage(args, _('Error: pop specification not valid'))
-
- return usage(args, _('Error: The source must be either "mailbox" or "pop"'))
-
-# call main
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.20 2002/01/07 10:43:48 richard
-# #500329 ] exception on server not reachable-patch
-#
-# Revision 1.19 2002/01/05 02:19:03 richard
-# i18n'ification
-#
-# Revision 1.18 2001/12/13 00:20:01 richard
-# . Centralised the python version check code, bumped version to 2.1.1 (really
-# needs to be 2.1.2, but that isn't released yet :)
-#
-# Revision 1.17 2001/12/02 05:06:16 richard
-# . We now use weakrefs in the Classes to keep the database reference, so
-# the close() method on the database is no longer needed.
-# I bumped the minimum python requirement up to 2.1 accordingly.
-# . #487480 ] roundup-server
-# . #487476 ] INSTALL.txt
-#
-# I also cleaned up the change message / post-edit stuff in the cgi client.
-# There's now a clearly marked "TODO: append the change note" where I believe
-# the change note should be added there. The "changes" list will obviously
-# have to be modified to be a dict of the changes, or somesuch.
-#
-# More testing needed.
-#
-# Revision 1.16 2001/11/30 18:23:55 jhermann
-# Cleaned up strange import (less pollution, too)
-#
-# Revision 1.15 2001/11/30 13:16:37 rochecompaan
-# Fixed bug. Mail gateway was not using the extended Message class
-# resulting in failed submissions when mails were processed from a Unix
-# mailbox
-#
-# Revision 1.14 2001/11/13 21:44:44 richard
-# . re-open the database as the author in mail handling
-#
-# Revision 1.13 2001/11/09 01:05:55 richard
-# Fixed bug #479511 ] mailgw to pop once engelbert gruber tested the POP
-# gateway.
-#
-# Revision 1.12 2001/11/08 05:16:55 richard
-# Rolled roundup-popgw into roundup-mailgw. Cleaned mailgw up significantly,
-# tested unix mailbox some more. POP still untested.
-#
-# Revision 1.11 2001/11/07 05:32:58 richard
-# More roundup-mailgw usage help.
-#
-# Revision 1.10 2001/11/07 05:30:11 richard
-# Nicer usage message.
-#
-# Revision 1.9 2001/11/07 05:29:26 richard
-# Modified roundup-mailgw so it can read e-mails from a local mail spool
-# file. Truncates the spool file after parsing.
-# Fixed a couple of small bugs introduced in roundup.mailgw when I started
-# the popgw.
-#
-# Revision 1.8 2001/11/01 22:04:37 richard
-# Started work on supporting a pop3-fetching server
-# Fixed bugs:
-# . bug #477104 ] HTML tag error in roundup-server
-# . bug #477107 ] HTTP header problem
-#
-# Revision 1.7 2001/08/07 00:24:42 richard
-# stupid typo
-#
-# Revision 1.6 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.5 2001/08/05 07:44:25 richard
-# Instances are now opened by a special function that generates a unique
-# module name for the instances on import time.
-#
-# Revision 1.4 2001/08/03 01:28:33 richard
-# Used the much nicer load_package, pointed out by Steve Majewski.
-#
-# Revision 1.3 2001/08/03 00:59:34 richard
-# Instance import now imports the instance using imp.load_module so that
-# we can have instance homes of "roundup" or other existing python package
-# names.
-#
-# Revision 1.2 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.1 2001/07/23 03:46:48 richard
-# moving the bin files to facilitate out-of-the-boxness
-#
-# Revision 1.1 2001/07/22 11:15:45 richard
-# More Grande Splite stuff
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/roundup-server b/roundup-server
--- a/roundup-server
+++ /dev/null
@@ -1,375 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
-# This module is free software, and you may redistribute it and/or modify
-# under the same terms as Python, so long as this copyright message and
-# disclaimer are retained in their original form.
-#
-# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
-# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
-# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
-# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
-# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-#
-""" HTTP Server that serves roundup.
-
-$Id: roundup-server,v 1.25 2002-01-05 02:21:21 richard Exp $
-"""
-
-# python version check
-from roundup import version_check
-
-import sys, os, urllib, StringIO, traceback, cgi, binascii, getopt, imp
-import BaseHTTPServer
-
-# Roundup modules of use here
-from roundup import cgitb, cgi_client
-import roundup.instance
-from roundup.i18n import _
-
-#
-## Configuration
-#
-
-# This indicates where the Roundup instance lives
-ROUNDUP_INSTANCE_HOMES = {
- 'bar': '/tmp/bar',
-}
-
-ROUNDUP_USER = None
-
-
-# Where to log debugging information to. Use an instance of DevNull if you
-# don't want to log anywhere.
-# TODO: actually use this stuff
-#class DevNull:
-# def write(self, info):
-# pass
-#LOG = open('/var/log/roundup.cgi.log', 'a')
-#LOG = DevNull()
-
-#
-## end configuration
-#
-
-
-class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- ROUNDUP_INSTANCE_HOMES = ROUNDUP_INSTANCE_HOMES
- ROUNDUP_USER = ROUNDUP_USER
-
- def run_cgi(self):
- """ Execute the CGI command. Wrap an innner call in an error
- handler so all errors can be caught.
- """
- save_stdin = sys.stdin
- sys.stdin = self.rfile
- try:
- self.inner_run_cgi()
- except cgi_client.NotFound:
- self.send_error(404, self.path)
- except cgi_client.Unauthorised:
- self.send_error(403, self.path)
- except:
- # it'd be nice to be able to detect if these are going to have
- # any effect...
- self.send_response(400)
- self.send_header('Content-Type', 'text/html')
- self.end_headers()
- try:
- reload(cgitb)
- self.wfile.write(cgitb.breaker())
- self.wfile.write(cgitb.html())
- except:
- self.wfile.write("<pre>")
- s = StringIO.StringIO()
- traceback.print_exc(None, s)
- self.wfile.write(cgi.escape(s.getvalue()))
- self.wfile.write("</pre>\n")
- sys.stdin = save_stdin
-
- do_GET = do_POST = do_HEAD = send_head = run_cgi
-
- def index(self):
- ''' Print up an index of the available instances
- '''
- self.send_response(200)
- self.send_header('Content-Type', 'text/html')
- self.end_headers()
- w = self.wfile.write
- w(_('<html><head><title>Roundup instances index</title></head>\n'))
- w(_('<body><h1>Roundup instances index</h1><ol>\n'))
- for instance in self.ROUNDUP_INSTANCE_HOMES.keys():
- w(_('<li><a href="%(instance_url)s/index">%(instance_name)s</a>\n')%{
- 'instance_url': urllib.quote(instance),
- 'instance_name': cgi.escape(instance)})
- w(_('</ol></body></html>'))
-
- def inner_run_cgi(self):
- ''' This is the inner part of the CGI handling
- '''
-
- rest = self.path
- i = rest.rfind('?')
- if i >= 0:
- rest, query = rest[:i], rest[i+1:]
- else:
- query = ''
-
- # figure the instance
- if rest == '/':
- return self.index()
- l_path = rest.split('/')
- instance_name = urllib.unquote(l_path[1])
- if self.ROUNDUP_INSTANCE_HOMES.has_key(instance_name):
- instance_home = self.ROUNDUP_INSTANCE_HOMES[instance_name]
- instance = roundup.instance.open(instance_home)
- else:
- raise cgi_client.NotFound
-
- # figure out what the rest of the path is
- if len(l_path) > 2:
- rest = '/'.join(l_path[2:])
- else:
- rest = '/'
-
- # Set up the CGI environment
- env = {}
- env['INSTANCE_NAME'] = instance_name
- env['REQUEST_METHOD'] = self.command
- env['PATH_INFO'] = urllib.unquote(rest)
- if query:
- env['QUERY_STRING'] = query
- host = self.address_string()
- if self.headers.typeheader is None:
- env['CONTENT_TYPE'] = self.headers.type
- else:
- env['CONTENT_TYPE'] = self.headers.typeheader
- length = self.headers.getheader('content-length')
- if length:
- env['CONTENT_LENGTH'] = length
- co = filter(None, self.headers.getheaders('cookie'))
- if co:
- env['HTTP_COOKIE'] = ', '.join(co)
- env['SCRIPT_NAME'] = ''
- env['SERVER_NAME'] = self.server.server_name
- env['SERVER_PORT'] = str(self.server.server_port)
-
- decoded_query = query.replace('+', ' ')
-
- # do the roundup thang
- client = instance.Client(instance, self, env)
- client.main()
-
-def usage(message=''):
- if message:
- message = _('Error: %(error)s\n\n')%{'error': message}
- print _('''%(message)sUsage:
-roundup-server [-n hostname] [-p port] [name=instance home]*
-
- -n: sets the host name
- -p: sets the port to listen on
-
- name=instance home
- Sets the instance home(s) to use. The name is how the instance is
- identified in the URL (it's the first part of the URL path). The
- instance home is the directory that was identified when you did
- "roundup-admin init". You may specify any number of these name=home
- pairs on the command-line. For convenience, you may edit the
- ROUNDUP_INSTANCE_HOMES variable in the roundup-server file instead.
-''')%locals()
- sys.exit(0)
-
-def main():
- hostname = ''
- port = 8080
- try:
- # handle the command-line args
- try:
- optlist, args = getopt.getopt(sys.argv[1:], 'n:p:u:')
- except getopt.GetoptError, e:
- usage(str(e))
-
- user = ROUNDUP_USER
- for (opt, arg) in optlist:
- if opt == '-n': hostname = arg
- elif opt == '-p': port = int(arg)
- elif opt == '-u': user = arg
- elif opt == '-h': usage()
-
- if hasattr(os, 'getuid'):
- # if root, setuid to the running user
- if not os.getuid() and user is not None:
- try:
- import pwd
- except ImportError:
- raise ValueError, _("Can't change users - no pwd module")
- try:
- uid = pwd.getpwnam(user)[2]
- except KeyError:
- raise ValueError, _("User %(user)s doesn't exist")%locals()
- os.setuid(uid)
- elif os.getuid() and user is not None:
- print _('WARNING: ignoring "-u" argument, not root')
-
- # People can remove this check if they're really determined
- if not os.getuid() and user is None:
- raise ValueError, _("Can't run as root!")
-
- # handle instance specs
- if args:
- d = {}
- for arg in args:
- try:
- name, home = arg.split('=')
- except ValueError:
- raise ValueError, _("Instances must be name=home")
- d[name] = home
- RoundupRequestHandler.ROUNDUP_INSTANCE_HOMES = d
- except SystemExit:
- raise
- except:
- exc_type, exc_value = sys.exc_info()[:2]
- usage('%s: %s'%(exc_type, exc_value))
-
- # we don't want the cgi module interpreting the command-line args ;)
- sys.argv = sys.argv[:1]
- address = (hostname, port)
- httpd = BaseHTTPServer.HTTPServer(address, RoundupRequestHandler)
- print _('Roundup server started on %(address)s')%locals()
- httpd.serve_forever()
-
-if __name__ == '__main__':
- main()
-
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.24 2002/01/05 02:19:03 richard
-# i18n'ification
-#
-# Revision 1.23 2001/12/15 23:47:07 richard
-# sys module went away...
-#
-# Revision 1.22 2001/12/13 00:20:01 richard
-# . Centralised the python version check code, bumped version to 2.1.1 (really
-# needs to be 2.1.2, but that isn't released yet :)
-#
-# Revision 1.21 2001/12/02 05:06:16 richard
-# . We now use weakrefs in the Classes to keep the database reference, so
-# the close() method on the database is no longer needed.
-# I bumped the minimum python requirement up to 2.1 accordingly.
-# . #487480 ] roundup-server
-# . #487476 ] INSTALL.txt
-#
-# I also cleaned up the change message / post-edit stuff in the cgi client.
-# There's now a clearly marked "TODO: append the change note" where I believe
-# the change note should be added there. The "changes" list will obviously
-# have to be modified to be a dict of the changes, or somesuch.
-#
-# More testing needed.
-#
-# Revision 1.20 2001/11/26 22:55:56 richard
-# Feature:
-# . Added INSTANCE_NAME to configuration - used in web and email to identify
-# the instance.
-# . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
-# signature info in e-mails.
-# . Some more flexibility in the mail gateway and more error handling.
-# . Login now takes you to the page you back to the were denied access to.
-#
-# Fixed:
-# . Lots of bugs, thanks Roché and others on the devel mailing list!
-#
-# Revision 1.19 2001/11/12 22:51:04 jhermann
-# Fixed option & associated error handling
-#
-# Revision 1.18 2001/11/01 22:04:37 richard
-# Started work on supporting a pop3-fetching server
-# Fixed bugs:
-# . bug #477104 ] HTML tag error in roundup-server
-# . bug #477107 ] HTTP header problem
-#
-# Revision 1.17 2001/10/29 23:55:44 richard
-# Fix to CGI top-level index (thanks Juergen Hermann)
-#
-# Revision 1.16 2001/10/27 00:12:21 richard
-# Fixed roundup-server for windows, thanks Juergen Hermann.
-#
-# Revision 1.15 2001/10/12 02:23:26 richard
-# Didn't clean up after myself :)
-#
-# Revision 1.14 2001/10/12 02:20:32 richard
-# server now handles setuid'ing much better
-#
-# Revision 1.13 2001/10/05 02:23:24 richard
-# . roundup-admin create now prompts for property info if none is supplied
-# on the command-line.
-# . hyperdb Class getprops() method may now return only the mutable
-# properties.
-# . Login now uses cookies, which makes it a whole lot more flexible. We can
-# now support anonymous user access (read-only, unless there's an
-# "anonymous" user, in which case write access is permitted). Login
-# handling has been moved into cgi_client.Client.main()
-# . The "extended" schema is now the default in roundup init.
-# . The schemas have had their page headings modified to cope with the new
-# login handling. Existing installations should copy the interfaces.py
-# file from the roundup lib directory to their instance home.
-# . Incorrectly had a Bizar Software copyright on the cgitb.py module from
-# Ping - has been removed.
-# . Fixed a whole bunch of places in the CGI interface where we should have
-# been returning Not Found instead of throwing an exception.
-# . Fixed a deviation from the spec: trying to modify the 'id' property of
-# an item now throws an exception.
-#
-# Revision 1.12 2001/09/29 13:27:00 richard
-# CGI interfaces now spit up a top-level index of all the instances they can
-# serve.
-#
-# Revision 1.11 2001/08/07 00:24:42 richard
-# stupid typo
-#
-# Revision 1.10 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.9 2001/08/05 07:44:36 richard
-# Instances are now opened by a special function that generates a unique
-# module name for the instances on import time.
-#
-# Revision 1.8 2001/08/03 01:28:33 richard
-# Used the much nicer load_package, pointed out by Steve Majewski.
-#
-# Revision 1.7 2001/08/03 00:59:34 richard
-# Instance import now imports the instance using imp.load_module so that
-# we can have instance homes of "roundup" or other existing python package
-# names.
-#
-# Revision 1.6 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.5 2001/07/24 01:07:59 richard
-# Added command-line arg handling to roundup-server so it's more useful
-# out-of-the-box.
-#
-# Revision 1.4 2001/07/23 10:31:45 richard
-# disabled the reloading until it can be done properly
-#
-# Revision 1.3 2001/07/23 08:53:44 richard
-# Fixed the ROUNDUPS decl in roundup-server
-# Move the installation notes to INSTALL
-#
-# Revision 1.2 2001/07/23 04:05:05 anthonybaxter
-# actually quit if python version wrong
-#
-# Revision 1.1 2001/07/23 03:46:48 richard
-# moving the bin files to facilitate out-of-the-boxness
-#
-# Revision 1.1 2001/07/22 11:15:45 richard
-# More Grande Splite stuff
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/roundup/scripts/__init__.py b/roundup/scripts/__init__.py
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
+# This module is free software, and you may redistribute it and/or modify
+# under the same terms as Python, so long as this copyright message and
+# disclaimer are retained in their original form.
+#
+# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
+# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
+# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
+# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
+# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+#
+# $Id: __init__.py,v 1.1 2002-01-29 20:07:15 jhermann Exp $
+
+__doc__ = '''
+Subpackage containing the modules that implement the command line tools.
+Note that these are imported by script stubs generated by "setup.py".
+'''
index 42fffb8c78dfb3f6f791079b9ece85a7917b7a19..9596fe048dd182e7a38a9e809f241d5c42f3c2ac 100644 (file)
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: roundup_admin.py,v 1.1 2002-01-29 19:53:08 jhermann Exp $
+# $Id: roundup_admin.py,v 1.2 2002-01-29 20:07:15 jhermann Exp $
# python version check
from roundup import version_check
from roundup.i18n import _
import sys
-tool = AdminTool()
-sys.exit(tool.main())
+
+def run():
+ tool = AdminTool()
+ sys.exit(tool.main())
+
+if __name__ == '__main__':
+ run()
#
# $Log: not supported by cvs2svn $
+# Revision 1.1 2002/01/29 19:53:08 jhermann
+# Moved scripts from top-level dir to roundup.scripts subpackage
+#
# Revision 1.61 2002/01/05 02:21:21 richard
# fixes
#
index 8e6faac74cdd7af7ffb3797f021e825f66ea8a4e..faec3d997cd1b5053957d540ee3b70bb7860971f 100644 (file)
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: roundup_mailgw.py,v 1.1 2002-01-29 19:53:08 jhermann Exp $
+# $Id: roundup_mailgw.py,v 1.2 2002-01-29 20:07:15 jhermann Exp $
# python version check
from roundup import version_check
return usage(args, _('Error: The source must be either "mailbox" or "pop"'))
+def run():
+ sys.exit(main(sys.argv))
+
# call main
if __name__ == '__main__':
- sys.exit(main(sys.argv))
+ run()
#
# $Log: not supported by cvs2svn $
+# Revision 1.1 2002/01/29 19:53:08 jhermann
+# Moved scripts from top-level dir to roundup.scripts subpackage
+#
# Revision 1.21 2002/01/11 07:02:29 grubert
# put an exception around: do_pop user and password entry to catch ctrl-c/d.
#
index a6a2083737bb1da684d099a29389d15bb38d01d3..60d32e03c2fcde167f87d7fc28c7596adea3169c 100644 (file)
#
""" HTTP Server that serves roundup.
-$Id: roundup_server.py,v 1.1 2002-01-29 19:53:08 jhermann Exp $
+$Id: roundup_server.py,v 1.2 2002-01-29 20:07:15 jhermann Exp $
"""
# python version check
''')%locals()
sys.exit(0)
-def main():
+def run():
hostname = ''
port = 8080
try:
httpd.serve_forever()
if __name__ == '__main__':
- main()
+ run()
#
# $Log: not supported by cvs2svn $
+# Revision 1.1 2002/01/29 19:53:08 jhermann
+# Moved scripts from top-level dir to roundup.scripts subpackage
+#
# Revision 1.25 2002/01/05 02:21:21 richard
# fixes
#
diff --git a/setup.py b/setup.py
index 4e2717aa35c3ca46cb24310a43a17f97d3836cb2..68fc3cde7f80ec78f24bea98a9b9c14707ccc23b 100644 (file)
--- a/setup.py
+++ b/setup.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: setup.py,v 1.29 2002-01-23 06:05:36 richard Exp $
+# $Id: setup.py,v 1.30 2002-01-29 20:07:15 jhermann Exp $
from distutils.core import setup, Extension
from distutils.util import get_platform
+from distutils.command.build_scripts import build_scripts
+import sys, os, string
from glob import glob
-import sys,os
+
from roundup.templatebuilder import makeHtmlBase
+
+#############################################################################
+### Build script files
+#############################################################################
+
+class build_scripts_create(build_scripts):
+ """ Overload the build_scripts command and create the scripts
+ from scratch, depending on the target platform.
+
+ You have to define the name of your package in an inherited
+ class (due to the delayed instantiation of command classes
+ in distutils, this cannot be passed to __init__).
+
+ The scripts are created in an uniform scheme: they start the
+ run() function in the module
+
+ <packagename>.scripts.<mangled_scriptname>
+
+ The mangling of script names replaces '-' and '/' characters
+ with '-' and '.', so that they are valid module paths.
+ """
+ package_name = None
+
+ def copy_scripts(self):
+ """ Create each script listed in 'self.scripts'
+ """
+ if not self.package_name:
+ raise Exception("You have to inherit build_scripts_create and"
+ " provide a package name")
+
+ to_module = string.maketrans('-/', '_.')
+
+ self.mkpath(self.build_dir)
+ for script in self.scripts:
+ outfile = os.path.join(self.build_dir, os.path.basename(script))
+
+ #if not self.force and not newer(script, outfile):
+ # self.announce("not copying %s (up-to-date)" % script)
+ # continue
+
+ if self.dry_run:
+ self.announce("would create %s" % outfile)
+ continue
+
+ module = os.path.splitext(os.path.basename(script))[0]
+ module = string.translate(module, to_module)
+ script_vars = {
+ 'python': os.path.normpath(sys.executable),
+ 'package': self.package_name,
+ 'module': module,
+ }
+
+ self.announce("creating %s" % outfile)
+ file = open(outfile, 'w')
+
+ try:
+ if sys.platform == "win32":
+ file.write('@echo off\n'
+ '%(python)s -c "from %(package)s.scripts.%(module)s import run; run()" %%$\n'
+ % script_vars)
+ else:
+ file.write('#! %(python)s\n'
+ 'from %(package)s.scripts.%(module)s import run\n'
+ 'run()\n'
+ % script_vars)
+ finally:
+ file.close()
+
+
+class build_scripts_roundup(build_scripts_create):
+ package_name = 'roundup'
+
+
+def scriptname(path):
+ """ Helper for building a list of script names from a list of
+ module files.
+ """
+ script = os.path.splitext(os.path.basename(path))[0]
+ script = string.replace(script, '_', '-')
+ if sys.platform == "win32":
+ script = script + ".bat"
+ return script
+
+# build list of scripts from their implementation modules
+roundup_scripts = map(scriptname, glob('roundup/scripts/[!_]*.py'))
+
+
+#############################################################################
+### 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'))
packagelist = [
'roundup',
'roundup.backends',
+ 'roundup.scripts',
'roundup.templates'
]
installdatafiles = [
author_email = "richard@users.sourceforge.net",
url = 'http://sourceforge.net/projects/roundup/',
packages = packagelist,
- scripts = ['roundup-admin', 'roundup-mailgw', 'roundup-server'],
+
+ # Override certain command classes with our own ones
+ cmdclass = {
+ 'build_scripts': build_scripts_roundup,
+ },
+ scripts = roundup_scripts,
+
data_files = installdatafiles
)
#
# $Log: not supported by cvs2svn $
+# Revision 1.29 2002/01/23 06:05:36 richard
+# prep work for release
+#
# Revision 1.28 2002/01/11 03:24:15 richard
# minor changes for 0.4.0b2
#