You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(226) |
Aug
(123) |
Sep
(22) |
Oct
(143) |
Nov
(135) |
Dec
(92) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(205) |
Feb
(118) |
Mar
(29) |
Apr
(57) |
May
(133) |
Jun
(71) |
Jul
(209) |
Aug
(94) |
Sep
(467) |
Oct
(139) |
Nov
(38) |
Dec
(63) |
| 2003 |
Jan
(125) |
Feb
(150) |
Mar
(159) |
Apr
(106) |
May
(50) |
Jun
(87) |
Jul
(23) |
Aug
(103) |
Sep
(78) |
Oct
(87) |
Nov
(116) |
Dec
(58) |
| 2004 |
Jan
(57) |
Feb
(117) |
Mar
(213) |
Apr
(136) |
May
(246) |
Jun
(254) |
Jul
(234) |
Aug
(26) |
Sep
(61) |
Oct
(191) |
Nov
(199) |
Dec
(80) |
| 2005 |
Jan
(196) |
Feb
(204) |
Mar
(46) |
Apr
(115) |
May
(63) |
Jun
(66) |
Jul
(52) |
Aug
(4) |
Sep
(20) |
Oct
(16) |
Nov
(3) |
Dec
(24) |
| 2006 |
Jan
(165) |
Feb
(93) |
Mar
(40) |
Apr
(44) |
May
(11) |
Jun
(37) |
Jul
(39) |
Aug
(96) |
Sep
(19) |
Oct
(36) |
Nov
(68) |
Dec
(51) |
| 2007 |
Jan
(18) |
Feb
(12) |
Mar
(22) |
Apr
(26) |
May
(9) |
Jun
(3) |
Jul
(3) |
Aug
(25) |
Sep
(83) |
Oct
(12) |
Nov
(31) |
Dec
(9) |
| 2008 |
Jan
(6) |
Feb
(26) |
Mar
(12) |
Apr
(1) |
May
|
Jun
|
Jul
(5) |
Aug
(64) |
Sep
(19) |
Oct
|
Nov
|
Dec
(1) |
| 2009 |
Jan
|
Feb
(97) |
Mar
(36) |
Apr
|
May
(1) |
Jun
(28) |
Jul
(96) |
Aug
(15) |
Sep
(8) |
Oct
(26) |
Nov
(10) |
Dec
(23) |
| 2010 |
Jan
(20) |
Feb
(30) |
Mar
(5) |
Apr
(7) |
May
(2) |
Jun
(2) |
Jul
(25) |
Aug
(9) |
Sep
(9) |
Oct
(33) |
Nov
(16) |
Dec
(1) |
| 2011 |
Jan
(1) |
Feb
(1) |
Mar
(5) |
Apr
(18) |
May
(12) |
Jun
(8) |
Jul
(20) |
Aug
(2) |
Sep
(6) |
Oct
(17) |
Nov
|
Dec
|
| 2012 |
Jan
|
Feb
(1) |
Mar
|
Apr
(16) |
May
(6) |
Jun
(4) |
Jul
(12) |
Aug
(6) |
Sep
(6) |
Oct
(7) |
Nov
(34) |
Dec
(49) |
| 2013 |
Jan
(58) |
Feb
(35) |
Mar
(12) |
Apr
(15) |
May
(10) |
Jun
(8) |
Jul
(21) |
Aug
|
Sep
(50) |
Oct
(14) |
Nov
(6) |
Dec
(10) |
| 2014 |
Jan
(3) |
Feb
(2) |
Mar
(46) |
Apr
(21) |
May
(12) |
Jun
(4) |
Jul
(22) |
Aug
(15) |
Sep
(6) |
Oct
(23) |
Nov
(10) |
Dec
(23) |
| 2015 |
Jan
(6) |
Feb
(4) |
Mar
(39) |
Apr
(4) |
May
(6) |
Jun
(4) |
Jul
(2) |
Aug
(7) |
Sep
(7) |
Oct
(4) |
Nov
|
Dec
(2) |
| 2016 |
Jan
(59) |
Feb
|
Mar
(2) |
Apr
(16) |
May
(19) |
Jun
(75) |
Jul
(93) |
Aug
(6) |
Sep
(4) |
Oct
(4) |
Nov
(2) |
Dec
(6) |
| 2017 |
Jan
(12) |
Feb
(18) |
Mar
(52) |
Apr
(31) |
May
(3) |
Jun
(2) |
Jul
|
Aug
(35) |
Sep
(49) |
Oct
(22) |
Nov
(6) |
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
(4) |
Apr
(12) |
May
(9) |
Jun
(28) |
Jul
(230) |
Aug
(76) |
Sep
(48) |
Oct
(4) |
Nov
(4) |
Dec
|
| 2019 |
Jan
(55) |
Feb
(33) |
Mar
(99) |
Apr
(60) |
May
(58) |
Jun
(135) |
Jul
(39) |
Aug
(49) |
Sep
(25) |
Oct
(138) |
Nov
(39) |
Dec
(34) |
| 2020 |
Jan
(84) |
Feb
(82) |
Mar
(9) |
Apr
(40) |
May
(54) |
Jun
(54) |
Jul
(57) |
Aug
(19) |
Sep
(17) |
Oct
(26) |
Nov
(16) |
Dec
(27) |
| 2021 |
Jan
(18) |
Feb
(15) |
Mar
(72) |
Apr
(41) |
May
(66) |
Jun
(39) |
Jul
(20) |
Aug
(33) |
Sep
(41) |
Oct
(31) |
Nov
(35) |
Dec
(69) |
| 2022 |
Jan
(60) |
Feb
(15) |
Mar
(18) |
Apr
(39) |
May
(74) |
Jun
(97) |
Jul
(105) |
Aug
(61) |
Sep
(249) |
Oct
(78) |
Nov
(83) |
Dec
(49) |
| 2023 |
Jan
(23) |
Feb
(113) |
Mar
(60) |
Apr
(79) |
May
(230) |
Jun
(125) |
Jul
(126) |
Aug
(32) |
Sep
(66) |
Oct
(55) |
Nov
(32) |
Dec
(28) |
| 2024 |
Jan
(13) |
Feb
(34) |
Mar
(126) |
Apr
(112) |
May
(109) |
Jun
(55) |
Jul
(94) |
Aug
(13) |
Sep
(8) |
Oct
(43) |
Nov
(54) |
Dec
(129) |
| 2025 |
Jan
(91) |
Feb
(10) |
Mar
(6) |
Apr
(1) |
May
(24) |
Jun
(49) |
Jul
(62) |
Aug
(62) |
Sep
(36) |
Oct
(11) |
Nov
(14) |
Dec
|
|
From: Richard J. <ri...@us...> - 2001-07-27 07:33:06
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv3286 Modified Files: INSTALL.txt Log Message: more notes for installation Index: INSTALL.txt =================================================================== RCS file: /cvsroot/roundup/roundup/INSTALL.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** INSTALL.txt 2001/07/27 07:04:18 1.1 --- INSTALL.txt 2001/07/27 07:33:04 1.2 *************** *** 29,41 **** ----------------------- ! 1. "./setup.py install" ! 2. At present, the programs aren't installed, so you will need to copy: ! roundup-admin ! roundup-mailgw ! roundup-server ! to /usr/local/bin if you wish to have them installed. Initial Setup ============= --- 29,44 ---- ----------------------- ! 1. Run: + python setup.py install + 2. If you want the scripts installed, also run the following command. If + you would prefer the scripts installed in somewhere other than + /usr/local/bin, add "--install-dir=<dir>" to the command. + python setup.py install_scripts + + + Initial Setup ============= *************** *** 43,47 **** Instance -------- ! Try "./roundup-admin init" :) Roundup is configurable using a localconfig.py file in the instance home. --- 46,50 ---- Instance -------- ! Run "./roundup-admin init". This initialises a roundup instance. Roundup is configurable using a localconfig.py file in the instance home. |
|
From: Anthony B. <ant...@us...> - 2001-07-27 07:31:25
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv3020 Modified Files: ChangeLog Log Message: regenerated on Fri Jul 27 17:31:18 EST 2001 Index: ChangeLog =================================================================== RCS file: /cvsroot/roundup/roundup/ChangeLog,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ChangeLog 2001/07/25 04:21:24 1.4 --- ChangeLog 2001/07/27 07:31:22 1.5 *************** *** 1,15 **** ! 2001-07-25 14:19 anthonybaxter ! * setup.py: first cut at setup.py - installs the package, but not ! the bin/cgi-bin yet ! 2001-07-25 14:10 richard ! * tests/__init__.py: added date test suite ! 2001-07-25 14:10 richard ! * tests/test_dates.py: Date test suite 2001-07-25 14:09 richard --- 1,64 ---- ! 2001-07-27 17:30 richard ! * BUILD.txt: minor notes ! ! 2001-07-27 17:27 richard ! ! * BUILD.txt, README.txt: Added build instructions, changed my ! e-mail address in the docs to the sourceforge address. ! ! 2001-07-27 17:20 richard ! ! * Makefile, setup.cfg, setup.py: Makefile is now obsolete - setup ! does what it used to do. ! ! 2001-07-27 17:18 richard ! ! * MANIFEST.in: Added the distutils manifest template (for ! "documentation", see distutils.filelist). Has no facility for ! comments, so no ID or LOG for this baby. ! ! 2001-07-27 17:16 richard ! ! * test/: README.TXT, README.txt: rename for consistency ! ! 2001-07-27 17:04 richard ! ! * INSTALL.TXT, CHANGES.txt, INSTALL.txt, README.TXT, README.txt: ! name changes to make distutils happy ! ! 2001-07-27 16:56 richard ! ! * setup.cfg, setup.py: Added scripts to the setup and added the ! config so the default script install dir is /usr/local/bin. ! ! 2001-07-27 16:55 richard ! * test/: README.TXT, __init__.py, test_dates.py, test_db.py, ! test_schema.py: moving tests -> test ! 2001-07-27 16:25 richard ! * roundup/hyperdb.py: Fixed some of the exceptions so they're the ! right type. Removed the str()-ification of node ids so we don't ! mask oopsy errors any more. ! 2001-07-27 15:17 richard + * roundup/hyperdb.py: just some comments + + 2001-07-26 17:14 richard + + * setup.py: Made setup.py executable, added id and log. + + 2001-07-26 16:47 richard + + * INSTALL.TXT: Updated for new installation procedure + + 2001-07-25 14:19 anthonybaxter + + * setup.py: first cut at setup.py - installs the package, but not + the bin/cgi-bin yet + 2001-07-25 14:09 richard *************** *** 21,28 **** * README.TXT: added note about the spec - 2001-07-25 13:40 richard - - * tests/test_db.py: Fixed an oops - 2001-07-25 13:39 richard --- 70,73 ---- *************** *** 38,44 **** doc/images/logo-software-carpentry-standard.gif, roundup/backends/back_anydbm.py, ! roundup/templates/extended/dbinit.py, tests/test_db.py, ! tests/test_schema.py: Added the Roundup spec to the new ! documentation directory. 2001-07-24 21:18 anthonybaxter --- 83,88 ---- doc/images/logo-software-carpentry-standard.gif, roundup/backends/back_anydbm.py, ! roundup/templates/extended/dbinit.py: Added the Roundup spec to the ! new documentation directory. 2001-07-24 21:18 anthonybaxter *************** *** 63,71 **** import magic. Reducing level of import magic == (good, future) - 2001-07-24 15:22 richard - - * tests/: README.TXT, __init__.py, test_db.py, test_schema.py: - Added some unit tests - 2001-07-24 14:26 anthonybaxter --- 107,110 ---- *************** *** 346,351 **** roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.4 2001/07/25 04:21:24 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Wed Jul 25 14:21:20 EST 2001 Added CVS keywords $Id$ and to all python files. --- 385,390 ---- roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.5 2001/07/27 07:31:22 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Fri Jul 27 17:31:18 EST 2001 Added CVS keywords $Id$ and to all python files. |
|
From: Richard J. <ri...@us...> - 2001-07-27 07:30:30
|
Update of /cvsroot/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv2813
Modified Files:
BUILD.txt
Log Message:
minor notes
Index: BUILD.txt
===================================================================
RCS file: /cvsroot/roundup/roundup/BUILD.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** BUILD.txt 2001/07/27 07:27:13 1.1
--- BUILD.txt 2001/07/27 07:30:27 1.2
***************
*** 20,28 ****
1. Edit setup.py to ensure that all information therein (version, contact
information etc) is correct.
! 2. ./setup.py sdist -o
3. Check the MANIFEST to make sure that any new files are included. If
they are not, edit MANIFEST.in to include them. "Documentation" for
MANIFEST.in may be found in disutils.filelist._parse_template_line.
! 4. ./setup.py sdist
5. FTP the tar.gz from the dist directory to to the "incoming" directory on
"upload.sourceforge.net".
--- 20,29 ----
1. Edit setup.py to ensure that all information therein (version, contact
information etc) is correct.
! 2. python setup.py sdist -o
3. Check the MANIFEST to make sure that any new files are included. If
they are not, edit MANIFEST.in to include them. "Documentation" for
MANIFEST.in may be found in disutils.filelist._parse_template_line.
! 4. python setup.py sdist
! (if you find sdist a little verbose, add "-q" to the end of the command)
5. FTP the tar.gz from the dist directory to to the "incoming" directory on
"upload.sourceforge.net".
|
|
From: Richard J. <ri...@us...> - 2001-07-27 07:27:16
|
Update of /cvsroot/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv2140
Modified Files:
README.txt
Added Files:
BUILD.txt
Log Message:
Added build instructions, changed my e-mail address in the docs to the
sourceforge address.
--- NEW FILE: BUILD.txt ---
Roundup
=======
This software is released under the GNU GPL. The copyright is held by Bizar
Software Pty Ltd (http://www.bizarsoftware.com.au).
The stylesheet included with this package has been copied from the Zope
management interface and presumably belongs to Digital Creations.
1. Building Releases
====================
Roundup is currently a source-only release - it has no binary components. I
want it to stay that way, too.
This means that we only need to ever build source releases. This is done by
running:
1. Edit setup.py to ensure that all information therein (version, contact
information etc) is correct.
2. ./setup.py sdist -o
3. Check the MANIFEST to make sure that any new files are included. If
they are not, edit MANIFEST.in to include them. "Documentation" for
MANIFEST.in may be found in disutils.filelist._parse_template_line.
4. ./setup.py sdist
5. FTP the tar.gz from the dist directory to to the "incoming" directory on
"upload.sourceforge.net".
6. Make a quick release at:
http://sourceforge.net/project/admin/qrs.php?package_id=&group_id=31577
2. Author
=========
ri...@so...
Index: README.txt
===================================================================
RCS file: /cvsroot/roundup/roundup/README.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** README.txt 2001/07/27 07:04:18 1.1
--- README.txt 2001/07/27 07:27:13 1.2
***************
*** 150,154 ****
6. Author
=========
! ri...@bi...
--- 150,154 ----
6. Author
=========
! ri...@so...
|
|
From: Richard J. <ri...@us...> - 2001-07-27 07:20:21
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv715 Modified Files: setup.cfg setup.py Removed Files: Makefile Log Message: Makefile is now obsolete - setup does what it used to do. Index: setup.cfg =================================================================== RCS file: /cvsroot/roundup/roundup/setup.cfg,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** setup.cfg 2001/07/27 06:56:25 1.1 --- setup.cfg 2001/07/27 07:20:17 1.2 *************** *** 4,9 **** --- 4,13 ---- install_dir=/usr/local/bin + # # $Log$ + # Revision 1.2 2001/07/27 07:20:17 richard + # Makefile is now obsolete - setup does what it used to do. + # # Revision 1.1 2001/07/27 06:56:25 richard # Added scripts to the setup and added the config so the default script Index: setup.py =================================================================== RCS file: /cvsroot/roundup/roundup/setup.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** setup.py 2001/07/27 06:56:25 1.3 --- setup.py 2001/07/27 07:20:17 1.4 *************** *** 24,27 **** --- 24,28 ---- description = "roundup tracking system", author = "Richard Jones", + author_email = "ri...@so...", url = 'http://sourceforge.net/projects/roundup/', packages = packagelist, *************** *** 34,37 **** --- 35,41 ---- # # $Log$ + # Revision 1.4 2001/07/27 07:20:17 richard + # Makefile is now obsolete - setup does what it used to do. + # # Revision 1.3 2001/07/27 06:56:25 richard # Added scripts to the setup and added the config so the default script --- Makefile DELETED --- |
|
From: Richard J. <ri...@us...> - 2001-07-27 07:18:36
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv32439 Added Files: MANIFEST.in Log Message: Added the distutils manifest template (for "documentation", see distutils.filelist). Has no facility for comments, so no ID or LOG for this baby. --- NEW FILE: MANIFEST.in --- recursive-include roundup *.py *.txt *.item *.index *.css *.filter recursive-include cgi-bin *.cgi recursive-include test *.py *.txt recursive-include doc *.* include roundup-* include *.txt |
|
From: Richard J. <ri...@us...> - 2001-07-27 07:16:24
|
Update of /cvsroot/roundup/roundup/test In directory usw-pr-cvs1:/tmp/cvs-serv32178 Added Files: README.txt Removed Files: README.TXT Log Message: rename for consistency --- NEW FILE: README.txt --- $Id: README.txt,v 1.1 2001/07/27 07:16:21 richard Exp $ Structre of the tests: 1 Test date classes 1.1 Date 1.2 Interval 2 Set up schema 3 Open with specific backend 3.1 anydbm 3.2 bsddb 4 Create database base set (stati, priority, etc) 5 Perform some actions 6 Perform mail import 6.1 text/plain 6.2 multipart/mixed (with one text/plain) 6.3 text/html 6.4 multipart/alternative (with one text/plain) 6.5 multipart/alternative (with no text/plain) ------ $Log: README.txt,v $ Revision 1.1 2001/07/27 07:16:21 richard rename for consistency Revision 1.1 2001/07/27 06:55:07 richard moving tests -> test Revision 1.2 2001/07/25 04:34:31 richard Added id and log to tests files... --- README.TXT DELETED --- |
|
From: Richard J. <ri...@us...> - 2001-07-27 07:04:20
|
Update of /cvsroot/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv29928
Added Files:
CHANGES.txt INSTALL.txt README.txt
Removed Files:
CHANGES.TXT INSTALL.TXT README.TXT
Log Message:
name changes to make distutils happy
--- NEW FILE: CHANGES.txt ---
2001-07-11 - 0.1.0
. Needed a bug tracking system. Looked around. Tried to install many
Perl-based systems, to no avail. Got tired of waiting for Roundup to be
released. Had just finished major product project, so needed something
different for a while. Roundup here I come...
2001-07-18 - 0.1.1
. Initial version release with consent of Roundup spec author, Ka-Ping Yee:
"Amazing! Nice work. I'll watch for the source code on your website."
2001-07-18 - 0.1.2
. Set default index to ?:group=priority&:columns=activity,status,title so
the priority column isn't displayed.
. Thanks Anthony:
. added notes to the README about Python prerequisites
. added check to roundup.py, roundup.cgi, server.py and roundup-mailgw.py
for python 2+ - and made the file itself parseable by 1.5.2 ;)
. python 2.0 didn't have the default args for the time module functions.
. better handling of db directory in initDB
. Sorting on the extra properties defined by roundupdb classes was broken
due to the caching used. May now sort on activity and creation
properties, etc.
. Set the default index to sort on activity
2001-07-19 - 0.1.3
. Reldate now takes an argument "pretty" - when true, it pretty-prints the
interval generated up to 5 days, then pretty-prints the date of last
activity. The issue index and item now use the pretty format.
. Classes list for admin user in CGI interface.
. Made the view configuration more accessible, neater and more realistic.
. Fixed list view grouping handling grouping by a Multilink or String or Link
value of None or Date, ... (mind you, sorting by Date???)
. Fixed bug in the plain formatter when a Link was None.
. Fixed ordering of list view column headings.
. Fixed list view column heading sort links - and limited the number of
columns to sort by to 2.
. Added searching by glob to StringType filtering -
^text - search for text at start of fields
text$ - search for text at end of fields
^text$ - exactly match text in fields
te*xt - search for text matching "te"<any characters>"xt"
te?xt - search for text matching "te"<any one character>"xt"
. Added more fields to the issue.filter and issue.index templates
2001-07-26 - 0.2.0
Features:
. Major reorganisation of code to allow multiple roundup instances and a
single, site-packages -based installation. Also allows multiple database
back-ends.
. Moved the bin/ proggies into the top dir, so that it all works
out-of-the-box
. Added the "classic" template - a direct implementation of the Roundup
spec. Well, as close as we're going to get, anyway.
. Added an issue priority of support to "extended"
. Added command-line arg handling to roundup-server so it's more useful
out-of-the-box.
. Added distutils-style installation of "lib" files.
. Added some unit tests.
Fixes:
. Fixed bug in re generation in the filter
. Fixed handling of None String property in grouped list headings
. Fixed adding new issue with no change note
. Fixed values in text input fields which contained quotes (") are now
quoted.
. Fixed a bug in the hyperdb filter - wrong variable names in the error
message.
--- NEW FILE: INSTALL.txt ---
Roundup
=======
Installation
===============
These instructions work on redhat 6.2 and mandrake 8.0 - with the caveat
that these systems don't come with python 2.0 or newer installed, so you'll
have to upgrade python before this stuff will work.
Prerequisites
-------------
Either:
. Python 2.0 with pydoc installed. See http://www.lfw.org/ for pydoc.
or
. Python 2.1
You will need either the anydbm or bsddb module.
Testing the Software
--------------------
Run "python -c 'import tests;tests.go()'" and make sure there's no errors.
If there are errors, please let us know!
Installing the Software
-----------------------
1. "./setup.py install"
2. At present, the programs aren't installed, so you will need to copy:
roundup-admin
roundup-mailgw
roundup-server
to /usr/local/bin if you wish to have them installed.
Initial Setup
=============
Instance
--------
Try "./roundup-admin init" :)
Roundup is configurable using a localconfig.py file in the instance home.
It may have the following variable declarations:
MAILHOST - The SMTP mail host that roundup will use to send mail
MAIL_DOMAIN - The domain name used for email addresses
Any further configuration should be possible by editing the instance home's
__init__.py directly.
The email addresses used by the system by default are:
issue_tracker@MAIL_DOMAIN - submissions of issues
roundup-admin@MAIL_DOMAIN - roundup's internal use (problems, etc)
Mail
----
Set up a mail alias called "issue_tracker" as:
"|/usr/bin/python /home/httpd/html/roundup/roundup-mailgw <instance_home>"
In some installations (e.g. RedHat 6.2 I think) you'll need to set up smrsh
so sendmail will accept the pipe command. In that case, symlink
/etc/smrsh/python to /usr/bin/python and change the command to:
"|python /home/httpd/html/roundup/roundup-mailgw <instance_home>"
Web Interface
-------------
This software will work through apache or stand-alone.
Stand-alone:
1. Edit roundup-server at the top - ROUNDUP_INSTANCE_HOMES needs to know
about your instance.
2. "./roundup-server [hostname port]" (hostname may be "")
3. Load up the page "/" using the port number you set.
Apache:
1. Make sure roundup.cgi is executable. Edit it at the top -
ROUNDUP_INSTANCE_HOMES needs to know about your instance.
2. Edit your /etc/httpd/conf/httpd.conf and make sure that the
/home/httpd/html/roundup/roundup.cgi script will be treated as a CGI
script.
3. Add the following to your /etc/httpd/conf/httpd.conf:
------8<------- snip here ------8<-------
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^/roundup/roundup.cgi(.*) /home/httpd/html/roundup/roundup.cgi$1 [e=HTTP_CGI_AUTHORIZATION:%1,t=application/x-httpd-cgi,l]
------8<------- snip here ------8<-------
note: the RewriteRule must be on one line - no breaks
4. Re-start your apache to re-load the config
5. Load up the page "/roundup/roundup.cgi/"
--- NEW FILE: README.txt ---
Roundup
=======
1. License
==========
This software is released under the GNU GPL. The copyright is held by Bizar
Software Pty Ltd (http://www.bizarsoftware.com.au).
The stylesheet included with this package has been copied from the Zope
management interface and presumably belongs to Digital Creations.
2. Installation
===============
For installation notes, please see the file INSTALL.TXT
3. Usage
========
The system is designed to accessed through the command-line, e-mail or web
interface.
3.1 Command-line
----------------
The command-line tool is called "roundup-admin" and is used for most low-level
database manipulations such as:
. creating a database instance
. redefining the list of products ("create" and "retire" commands)
. adding users manually, or setting their passwords ("create" and "set")
. other stuff - run it with no arguments to get a better description of
what it does.
3.2 E-mail
----------
See the docstring at the start of the roundup/mailgw.py source file.
3.3 Web
-------
Hopefully, this interface is pretty self-explanatory...
Index views may be modified by the following arguments:
:sort - sort by prop name, optionally preceeded with '-'
to give descending or nothing for ascending sorting.
:group - group by prop name, optionally preceeded with '-' or
to sort in descending or nothing for ascending order.
:filter - selects which props should be displayed in the filter
section. Default is all.
:columns - selects the columns that should be displayed.
Default is all.
propname - selects the values the node properties given by propname
must have (very basic search/filter).
3. Design
=========
This software was written according to the specification found at
http://software-carpentry.codesourcery.com/entries/second-round/track/Roundup/
a copy of the spec is distributed with roundup as doc/spec.html.
There have been some modifications. I've marked these in the source with
'XXX' comments when I remember to.
In short:
Class.find() - may match multiple properties, uses keyword args.
Class.filter() - isn't in the spec and it's very useful to have at the Class
level.
CGI interface index view specifier layout part - lose the '+' from the
sorting arguments (it's a reserved URL character ;). Just made no
prefix mean ascending and '-' prefix descending.
ItemClass - renamed to IssueClass to better match it only having one
hypderdb class "issue". Allowing > 1 hyperdb class breaks the
"superseder" multilink (since it can only link to one thing, and we'd
want bugs to link to support and vice-versa).
templates - the call="link()" is handled by special-case mechanisms in my
top-level CGI handler. In a nutshell, the handler looks for a method on
itself called 'index%s' or 'item%s' where %s is a class. Most items
pass on to the templating mechanism, but the file class _always_ does
downloading. It'll probably stay this way too...
template - call="link(property)" may be used to link "the current node"
(from an index) - the link text is the property specified.
template - added functions that I found very useful: List, History and
Submit.
template - items must specify the message lists, history, etc. Having them
by default was sometimes not wanted.
template - index view determines its default columns from the template's
<property> tags.
template - menu() and field() look awfully similar now .... ;)
roundup.py - the command-line tool has a lot more commands at its disposal
4. TODO
=======
Most of the TODO items are captured in comments in the code. In summary:
in general:
. better error handling (nicer messages for users)
. possibly revert the entire damn thing to 1.5.2 ... :(
roundup.py:
. getopt() for command line
. default init db in some way?
hyperdb:
. transaction support
roundupdb:
. split the file storage into multiple files
roundup-mailgw:
. errors as attachments
. snip signatures?
server:
. check the source file timestamps before reloading
date:
. blue Date.__sub__ needs food, badly
config
. default to blank config in distribution and warn appropriately
roundup_cgi
. searching
. keep form fields in form on bad submission - only clear it if all ok
. messages should have the roundup CGI URL in them
5. Known Bugs
=============
date:
. date subtraction doesn't work correctly "if the dates cross leap years,
phases of the moon, ..."
filter:
. incorrectly embeds hidden fields for filters being displayed - and
doesn't use the existing values for filters being displayed either.
6. Author
=========
ri...@bi...
7. Thanks
=========
Well, Ping, of course ;)
Anthony Baxter, for some good first-release feedback. And then continuing
support through development on sourceforge.
--- CHANGES.TXT DELETED ---
--- INSTALL.TXT DELETED ---
--- README.TXT DELETED ---
|
|
From: Richard J. <ri...@us...> - 2001-07-27 06:56:27
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv28551 Modified Files: setup.py Added Files: setup.cfg Log Message: Added scripts to the setup and added the config so the default script install dir is /usr/local/bin. --- NEW FILE: setup.cfg --- # $Id: setup.cfg,v 1.1 2001/07/27 06:56:25 richard Exp $ [install_scripts] install_dir=/usr/local/bin # # $Log: setup.cfg,v $ # Revision 1.1 2001/07/27 06:56:25 richard # Added scripts to the setup and added the config so the default script # install dir is /usr/local/bin. # # Index: setup.py =================================================================== RCS file: /cvsroot/roundup/roundup/setup.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** setup.py 2001/07/26 07:14:27 1.2 --- setup.py 2001/07/27 06:56:25 1.3 *************** *** 21,29 **** setup ( name = "roundup", ! version = "0.1.4", description = "roundup tracking system", author = "Richard Jones", url = 'http://sourceforge.net/projects/roundup/', packages = packagelist, ) --- 21,30 ---- setup ( name = "roundup", ! version = "0.2.0", description = "roundup tracking system", author = "Richard Jones", url = 'http://sourceforge.net/projects/roundup/', packages = packagelist, + scripts = ['roundup-admin', 'roundup-mailgw', 'roundup-server'] ) *************** *** 33,36 **** --- 34,41 ---- # # $Log$ + # Revision 1.3 2001/07/27 06:56:25 richard + # Added scripts to the setup and added the config so the default script + # install dir is /usr/local/bin. + # # Revision 1.2 2001/07/26 07:14:27 richard # Made setup.py executable, added id and log. |
|
From: Richard J. <ri...@us...> - 2001-07-27 06:55:09
|
Update of /cvsroot/roundup/roundup/test
In directory usw-pr-cvs1:/tmp/cvs-serv28352
Added Files:
.cvsignore README.TXT __init__.py test_dates.py test_db.py
test_schema.py
Log Message:
moving tests -> test
--- NEW FILE: .cvsignore ---
*.pyc
localconfig.py
db
--- NEW FILE: README.TXT ---
$Id: README.TXT,v 1.1 2001/07/27 06:55:07 richard Exp $
Structre of the tests:
1 Test date classes
1.1 Date
1.2 Interval
2 Set up schema
3 Open with specific backend
3.1 anydbm
3.2 bsddb
4 Create database base set (stati, priority, etc)
5 Perform some actions
6 Perform mail import
6.1 text/plain
6.2 multipart/mixed (with one text/plain)
6.3 text/html
6.4 multipart/alternative (with one text/plain)
6.5 multipart/alternative (with no text/plain)
------
$Log: README.TXT,v $
Revision 1.1 2001/07/27 06:55:07 richard
moving tests -> test
Revision 1.2 2001/07/25 04:34:31 richard
Added id and log to tests files...
--- NEW FILE: __init__.py ---
# $Id: __init__.py,v 1.1 2001/07/27 06:55:07 richard Exp $
import unittest
import test_dates, test_schema, test_db
def go():
suite = unittest.TestSuite((
test_dates.suite(),
test_schema.suite(),
test_db.suite(),
))
runner = unittest.TextTestRunner()
runner.run(suite)
#
# $Log: __init__.py,v $
# Revision 1.1 2001/07/27 06:55:07 richard
# moving tests -> test
#
# Revision 1.3 2001/07/25 04:34:31 richard
# Added id and log to tests files...
#
#
--- NEW FILE: test_dates.py ---
# $Id: test_dates.py,v 1.1 2001/07/27 06:55:07 richard Exp $
import unittest, time
from roundup.date import Date, Interval
class DateTestCase(unittest.TestCase):
def testDateInterval(self):
date = Date("2000-06-26.00:34:02 + 2d")
self.assertEqual(str(date), '2000-06-28.00:34:02')
date = Date("2000-02-27 + 2d")
self.assertEqual(str(date), '2000-02-29.00:00:00')
date = Date("2001-02-27 + 2d")
self.assertEqual(str(date), '2001-03-01.00:00:00')
def testDate(self):
date = Date("2000-04-17")
self.assertEqual(str(date), '2000-04-17.00:00:00')
date = Date("01-25")
y, m, d, x, x, x, x, x, x = time.gmtime()
self.assertEqual(str(date), '%s-01-25.00:00:00'%y)
date = Date("2000-04-17.03:45")
self.assertEqual(str(date), '2000-04-17.03:45:00')
date = Date("08-13.22:13")
self.assertEqual(str(date), '%s-08-13.22:13:00'%y)
date = Date("11-07.09:32:43")
self.assertEqual(str(date), '%s-11-07.09:32:43'%y)
date = Date("14:25")
self.assertEqual(str(date), '%s-%02d-%02d.14:25:00'%(y, m, d))
date = Date("8:47:11")
self.assertEqual(str(date), '%s-%02d-%02d.08:47:11'%(y, m, d))
def testOffset(self):
date = Date("2000-04-17", -5)
self.assertEqual(str(date), '2000-04-17.00:00:00')
date = Date("01-25", -5)
y, m, d, x, x, x, x, x, x = time.gmtime()
self.assertEqual(str(date), '%s-01-25.00:00:00'%y)
date = Date("2000-04-17.03:45", -5)
self.assertEqual(str(date), '2000-04-17.08:45:00')
date = Date("08-13.22:13", -5)
self.assertEqual(str(date), '%s-08-14.03:13:00'%y)
date = Date("11-07.09:32:43", -5)
self.assertEqual(str(date), '%s-11-07.14:32:43'%y)
date = Date("14:25", -5)
self.assertEqual(str(date), '%s-%02d-%02d.19:25:00'%(y, m, d))
date = Date("8:47:11", -5)
self.assertEqual(str(date), '%s-%02d-%02d.13:47:11'%(y, m, d))
def testInterval(self):
pass
def suite():
return unittest.makeSuite(DateTestCase, 'test')
#
# $Log: test_dates.py,v $
# Revision 1.1 2001/07/27 06:55:07 richard
# moving tests -> test
#
# Revision 1.2 2001/07/25 04:34:31 richard
# Added id and log to tests files...
#
#
--- NEW FILE: test_db.py ---
# $Id: test_db.py,v 1.1 2001/07/27 06:55:07 richard Exp $
import unittest, os, shutil
from roundup.backends import anydbm
from roundup.hyperdb import String, Link, Multilink, Date, Interval, Class, \
DatabaseError
def setupSchema(db, create):
status = Class(db, "status", name=String())
status.setkey("name")
if create:
status.create(name="unread")
status.create(name="in-progress")
status.create(name="testing")
status.create(name="resolved")
Class(db, "user", username=String(), password=String())
Class(db, "issue", title=String(), status=Link("status"),
nosy=Multilink("user"))
class DBTestCase(unittest.TestCase):
def setUp(self):
class Database(anydbm.Database):
pass
# remove previous test, ignore errors
if os.path.exists('_test_dir'):
shutil.rmtree('_test_dir')
os.mkdir('_test_dir')
self.db = Database('_test_dir', 'test')
setupSchema(self.db, 1)
def tearDown(self):
self.db.close()
shutil.rmtree('_test_dir')
def testChanges(self):
self.db.issue.create(title="spam", status='1')
self.db.issue.create(title="eggs", status='2')
self.db.issue.create(title="ham", status='4')
self.db.issue.create(title="arguments", status='2')
self.db.issue.create(title="abuse", status='1')
self.db.issue.addprop(fixer=Link("user"))
props = self.db.issue.getprops()
keys = props.keys()
keys.sort()
self.assertEqual(keys, ['fixer', 'nosy', 'status', 'title'])
self.db.issue.set('5', status='2')
self.db.issue.get('5', "status")
self.db.status.get('2', "name")
self.db.issue.get('5', "title")
self.db.issue.find(status = self.db.status.lookup("in-progress"))
self.db.issue.history('5')
self.db.status.history('1')
self.db.status.history('2')
def testExceptions(self):
# this tests the exceptions that should be raised
ar = self.assertRaises
#
# class create
#
# string property
ar(TypeError, self.db.status.create, name=1)
# invalid property name
ar(KeyError, self.db.status.create, foo='foo')
# key name clash
ar(ValueError, self.db.status.create, name='unread')
# invalid link index
ar(IndexError, self.db.issue.create, title='foo', status='bar')
# invalid link value
ar(ValueError, self.db.issue.create, title='foo', status=1)
# invalid multilink type
ar(TypeError, self.db.issue.create, title='foo', status='1',
nosy='hello')
# invalid multilink index type
ar(ValueError, self.db.issue.create, title='foo', status='1',
nosy=[1])
# invalid multilink index
ar(IndexError, self.db.issue.create, title='foo', status='1',
nosy=['10'])
#
# class get
#
# invalid node id
ar(IndexError, self.db.status.get, '10', 'name')
# invalid property name
ar(KeyError, self.db.status.get, '2', 'foo')
#
# class set
#
# invalid node id
ar(IndexError, self.db.issue.set, '1', name='foo')
# invalid property name
ar(KeyError, self.db.status.set, '1', foo='foo')
# string property
ar(TypeError, self.db.status.set, '1', name=1)
# key name clash
ar(ValueError, self.db.status.set, '2', name='unread')
# set up a valid issue for me to work on
self.db.issue.create(title="spam", status='1')
# invalid link index
ar(IndexError, self.db.issue.set, '1', title='foo', status='bar')
# invalid link value
ar(ValueError, self.db.issue.set, '1', title='foo', status=1)
# invalid multilink type
ar(TypeError, self.db.issue.set, '1', title='foo', status='1',
nosy='hello')
# invalid multilink index type
ar(ValueError, self.db.issue.set, '1', title='foo', status='1',
nosy=[1])
# invalid multilink index
ar(IndexError, self.db.issue.set, '1', title='foo', status='1',
nosy=['10'])
def testRetire(self):
''' test retiring a node
'''
pass
class ReadOnlyDBTestCase(unittest.TestCase):
def setUp(self):
class Database(anydbm.Database):
pass
# remove previous test, ignore errors
if os.path.exists('_test_dir'):
shutil.rmtree('_test_dir')
os.mkdir('_test_dir')
db = Database('_test_dir', 'test')
setupSchema(db, 1)
db.close()
self.db = Database('_test_dir')
setupSchema(self.db, 0)
def tearDown(self):
self.db.close()
shutil.rmtree('_test_dir')
def testExceptions(self):
# this tests the exceptions that should be raised
ar = self.assertRaises
# this tests the exceptions that should be raised
ar(DatabaseError, self.db.status.create, name="foo")
ar(DatabaseError, self.db.status.set, '1', name="foo")
ar(DatabaseError, self.db.status.retire, '1')
def suite():
db = unittest.makeSuite(DBTestCase, 'test')
readonlydb = unittest.makeSuite(ReadOnlyDBTestCase, 'test')
return unittest.TestSuite((db, readonlydb))
#
# $Log: test_db.py,v $
# Revision 1.1 2001/07/27 06:55:07 richard
# moving tests -> test
#
# Revision 1.7 2001/07/27 06:26:43 richard
# oops - wasn't deleting the test dir after the read-only tests
#
# Revision 1.6 2001/07/27 06:23:59 richard
# consistency
#
# Revision 1.5 2001/07/27 06:23:09 richard
# Added some new hyperdb tests to make sure we raise the right exceptions.
#
# Revision 1.4 2001/07/25 04:34:31 richard
# Added id and log to tests files...
#
#
--- NEW FILE: test_schema.py ---
# $Id: test_schema.py,v 1.1 2001/07/27 06:55:07 richard Exp $
import unittest, os, shutil
from roundup.backends import anydbm
from roundup.hyperdb import String, Link, Multilink, Date, Interval, Class
class SchemaTestCase(unittest.TestCase):
def setUp(self):
class Database(anydbm.Database):
pass
# remove previous test, ignore errors
if os.path.exists('_test_dir'):
shutil.rmtree('_test_dir')
os.mkdir('_test_dir')
self.db = Database('_test_dir', 'test')
self.db.clear()
def tearDown(self):
self.db.close()
shutil.rmtree('_test_dir')
def testA_Status(self):
status = Class(self.db, "status", name=String())
self.assert_(status, 'no class object generated')
status.setkey("name")
val = status.create(name="unread")
self.assertEqual(val, '1', 'expecting "1"')
val = status.create(name="in-progress")
self.assertEqual(val, '2', 'expecting "2"')
val = status.create(name="testing")
self.assertEqual(val, '3', 'expecting "3"')
val = status.create(name="resolved")
self.assertEqual(val, '4', 'expecting "4"')
val = status.count()
self.assertEqual(val, 4, 'expecting 4')
val = status.list()
self.assertEqual(val, ['1', '2', '3', '4'], 'blah')
val = status.lookup("in-progress")
self.assertEqual(val, '2', 'expecting "2"')
status.retire('3')
val = status.list()
self.assertEqual(val, ['1', '2', '4'], 'blah')
def testB_Issue(self):
issue = Class(self.db, "issue", title=String(), status=Link("status"))
self.assert_(issue, 'no class object returned')
def testC_User(self):
user = Class(self.db, "user", username=String(), password=String())
self.assert_(user, 'no class object returned')
user.setkey("username")
def suite():
return unittest.makeSuite(SchemaTestCase, 'test')
#
# $Log: test_schema.py,v $
# Revision 1.1 2001/07/27 06:55:07 richard
# moving tests -> test
#
# Revision 1.3 2001/07/25 04:34:31 richard
# Added id and log to tests files...
#
#
|
|
From: Richard J. <ri...@us...> - 2001-07-27 06:54:04
|
Update of /cvsroot/roundup/roundup/tests In directory usw-pr-cvs1:/tmp/cvs-serv28109 Removed Files: .cvsignore Log Message: Moving tests -> test --- .cvsignore DELETED --- |
|
From: Richard J. <ri...@us...> - 2001-07-27 06:53:33
|
Update of /cvsroot/roundup/roundup/tests In directory usw-pr-cvs1:/tmp/cvs-serv28007 Removed Files: README.TXT __init__.py test_dates.py test_db.py test_schema.py Log Message: moving tests -> test --- README.TXT DELETED --- --- __init__.py DELETED --- --- test_dates.py DELETED --- --- test_db.py DELETED --- --- test_schema.py DELETED --- |
|
From: Richard J. <ri...@us...> - 2001-07-27 06:26:45
|
Update of /cvsroot/roundup/roundup/tests
In directory usw-pr-cvs1:/tmp/cvs-serv23168/tests
Modified Files:
test_db.py
Log Message:
oops - wasn't deleting the test dir after the read-only tests
Index: test_db.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_db.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** test_db.py 2001/07/27 06:23:59 1.6
--- test_db.py 2001/07/27 06:26:43 1.7
***************
*** 136,139 ****
--- 136,143 ----
setupSchema(self.db, 0)
+ def tearDown(self):
+ self.db.close()
+ shutil.rmtree('_test_dir')
+
def testExceptions(self):
# this tests the exceptions that should be raised
***************
*** 154,157 ****
--- 158,164 ----
#
# $Log$
+ # Revision 1.7 2001/07/27 06:26:43 richard
+ # oops - wasn't deleting the test dir after the read-only tests
+ #
# Revision 1.6 2001/07/27 06:23:59 richard
# consistency
|
|
From: Richard J. <ri...@us...> - 2001-07-27 06:25:37
|
Update of /cvsroot/roundup/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv22927/roundup
Modified Files:
hyperdb.py
Log Message:
Fixed some of the exceptions so they're the right type.
Removed the str()-ification of node ids so we don't mask oopsy errors any
more.
Index: hyperdb.py
===================================================================
RCS file: /cvsroot/roundup/roundup/roundup/hyperdb.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** hyperdb.py 2001/07/27 05:17:14 1.3
--- hyperdb.py 2001/07/27 06:25:35 1.4
***************
*** 117,131 ****
if prop.isLinkType:
! value = str(value)
link_class = self.properties[key].classname
if not num_re.match(value):
try:
value = self.db.classes[link_class].lookup(value)
except:
! raise ValueError, 'new property "%s": %s not a %s'%(
key, value, self.properties[key].classname)
propvalues[key] = value
if not self.db.hasnode(link_class, value):
! raise ValueError, '%s has no node %s'%(link_class, value)
# register the link with the newly linked node
--- 117,134 ----
if prop.isLinkType:
! if type(value) != type(''):
! raise ValueError, 'link value must be String'
! # value = str(value)
link_class = self.properties[key].classname
+ # if it isn't a number, it's a key
if not num_re.match(value):
try:
value = self.db.classes[link_class].lookup(value)
except:
! raise IndexError, 'new property "%s": %s not a %s'%(
key, value, self.properties[key].classname)
propvalues[key] = value
if not self.db.hasnode(link_class, value):
! raise IndexError, '%s has no node %s'%(link_class, value)
# register the link with the newly linked node
***************
*** 138,147 ****
link_class = self.properties[key].classname
l = []
! for entry in map(str, value):
if not num_re.match(entry):
try:
entry = self.db.classes[link_class].lookup(entry)
except:
! raise ValueError, 'new property "%s": %s not a %s'%(
key, entry, self.properties[key].classname)
l.append(entry)
--- 141,153 ----
link_class = self.properties[key].classname
l = []
! for entry in value:
! if type(entry) != type(''):
! raise ValueError, 'link value must be String'
! # if it isn't a number, it's a key
if not num_re.match(entry):
try:
entry = self.db.classes[link_class].lookup(entry)
except:
! raise IndexError, 'new property "%s": %s not a %s'%(
key, entry, self.properties[key].classname)
l.append(entry)
***************
*** 152,156 ****
for id in value:
if not self.db.hasnode(link_class, id):
! raise ValueError, '%s has no node %s'%(link_class, id)
# register the link with the newly linked node
self.db.addjournal(link_class, id, 'link',
--- 158,162 ----
for id in value:
if not self.db.hasnode(link_class, id):
! raise IndexError, '%s has no node %s'%(link_class, id)
# register the link with the newly linked node
self.db.addjournal(link_class, id, 'link',
***************
*** 169,174 ****
raise TypeError, 'new property "%s" not an Interval'% key
! for key,prop in self.properties.items():
! if propvalues.has_key(str(key)):
continue
if prop.isMultilinkType:
--- 175,180 ----
raise TypeError, 'new property "%s" not an Interval'% key
! for key, prop in self.properties.items():
! if propvalues.has_key(key):
continue
if prop.isMultilinkType:
***************
*** 189,193 ****
of this class or a KeyError is raised.
"""
! d = self.db.getnode(self.classname, str(nodeid))
return d[propname]
--- 195,200 ----
of this class or a KeyError is raised.
"""
! # nodeid = str(nodeid)
! d = self.db.getnode(self.classname, nodeid)
return d[propname]
***************
*** 220,224 ****
if self.db.journaltag is None:
raise DatabaseError, 'Database open read-only'
! nodeid = str(nodeid)
node = self.db.getnode(self.classname, nodeid)
if node.has_key(self.db.RETIRED_FLAG):
--- 227,231 ----
if self.db.journaltag is None:
raise DatabaseError, 'Database open read-only'
! # nodeid = str(nodeid)
node = self.db.getnode(self.classname, nodeid)
if node.has_key(self.db.RETIRED_FLAG):
***************
*** 240,254 ****
if prop.isLinkType:
! value = str(value)
link_class = self.properties[key].classname
if not num_re.match(value):
try:
value = self.db.classes[link_class].lookup(value)
except:
! raise ValueError, 'new property "%s": %s not a %s'%(
key, value, self.properties[key].classname)
if not self.db.hasnode(link_class, value):
! raise ValueError, '%s has no node %s'%(link_class, value)
# register the unlink with the old linked node
--- 247,264 ----
if prop.isLinkType:
! # value = str(value)
link_class = self.properties[key].classname
+ # if it isn't a number, it's a key
+ if type(value) != type(''):
+ raise ValueError, 'link value must be String'
if not num_re.match(value):
try:
value = self.db.classes[link_class].lookup(value)
except:
! raise IndexError, 'new property "%s": %s not a %s'%(
key, value, self.properties[key].classname)
if not self.db.hasnode(link_class, value):
! raise IndexError, '%s has no node %s'%(link_class, value)
# register the unlink with the old linked node
***************
*** 267,276 ****
link_class = self.properties[key].classname
l = []
! for entry in map(str, value):
if not num_re.match(entry):
try:
entry = self.db.classes[link_class].lookup(entry)
except:
! raise ValueError, 'new property "%s": %s not a %s'%(
key, entry, self.properties[key].classname)
l.append(entry)
--- 277,289 ----
link_class = self.properties[key].classname
l = []
! for entry in value:
! # if it isn't a number, it's a key
! if type(entry) != type(''):
! raise ValueError, 'link value must be String'
if not num_re.match(entry):
try:
entry = self.db.classes[link_class].lookup(entry)
except:
! raise IndexError, 'new property "%s": %s not a %s'%(
key, entry, self.properties[key].classname)
l.append(entry)
***************
*** 291,295 ****
for id in value:
if not self.db.hasnode(link_class, id):
! raise ValueError, '%s has no node %s'%(link_class, id)
if id in l:
continue
--- 304,308 ----
for id in value:
if not self.db.hasnode(link_class, id):
! raise IndexError, '%s has no node %s'%(link_class, id)
if id in l:
continue
***************
*** 325,329 ****
methods, and other nodes may reuse the values of their key properties.
"""
! nodeid = str(nodeid)
if self.db.journaltag is None:
raise DatabaseError, 'Database open read-only'
--- 338,342 ----
methods, and other nodes may reuse the values of their key properties.
"""
! # nodeid = str(nodeid)
if self.db.journaltag is None:
raise DatabaseError, 'Database open read-only'
***************
*** 396,400 ****
propspec = propspec.items()
for propname, nodeid in propspec:
! nodeid = str(nodeid)
# check the prop is OK
prop = self.properties[propname]
--- 409,413 ----
propspec = propspec.items()
for propname, nodeid in propspec:
! # nodeid = str(nodeid)
# check the prop is OK
prop = self.properties[propname]
***************
*** 412,416 ****
continue
for propname, nodeid in propspec:
! nodeid = str(nodeid)
property = node[propname]
if prop.isLinkType and nodeid == property:
--- 425,429 ----
continue
for propname, nodeid in propspec:
! # nodeid = str(nodeid)
property = node[propname]
if prop.isLinkType and nodeid == property:
***************
*** 741,744 ****
--- 754,762 ----
#
# $Log$
+ # Revision 1.4 2001/07/27 06:25:35 richard
+ # Fixed some of the exceptions so they're the right type.
+ # Removed the str()-ification of node ids so we don't mask oopsy errors any
+ # more.
+ #
# Revision 1.3 2001/07/27 05:17:14 richard
# just some comments
|
|
From: Richard J. <ri...@us...> - 2001-07-27 06:24:01
|
Update of /cvsroot/roundup/roundup/tests
In directory usw-pr-cvs1:/tmp/cvs-serv22735
Modified Files:
test_db.py
Log Message:
consistency
Index: test_db.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_db.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** test_db.py 2001/07/27 06:23:09 1.5
--- test_db.py 2001/07/27 06:23:59 1.6
***************
*** 138,146 ****
def testExceptions(self):
# this tests the exceptions that should be raised
! self.assertRaises(DatabaseError, self.db.status.create, name="foo")
! self.assertRaises(DatabaseError, self.db.status.set, '1', name="foo")
! self.assertRaises(DatabaseError, self.db.status.retire, '1')
def suite():
db = unittest.makeSuite(DBTestCase, 'test')
--- 138,149 ----
def testExceptions(self):
# this tests the exceptions that should be raised
! ar = self.assertRaises
+ # this tests the exceptions that should be raised
+ ar(DatabaseError, self.db.status.create, name="foo")
+ ar(DatabaseError, self.db.status.set, '1', name="foo")
+ ar(DatabaseError, self.db.status.retire, '1')
+
def suite():
db = unittest.makeSuite(DBTestCase, 'test')
***************
*** 151,154 ****
--- 154,160 ----
#
# $Log$
+ # Revision 1.6 2001/07/27 06:23:59 richard
+ # consistency
+ #
# Revision 1.5 2001/07/27 06:23:09 richard
# Added some new hyperdb tests to make sure we raise the right exceptions.
|
|
From: Richard J. <ri...@us...> - 2001-07-27 06:23:13
|
Update of /cvsroot/roundup/roundup/tests
In directory usw-pr-cvs1:/tmp/cvs-serv22491
Modified Files:
test_db.py
Log Message:
Added some new hyperdb tests to make sure we raise the right exceptions.
Index: test_db.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_db.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** test_db.py 2001/07/25 04:34:31 1.4
--- test_db.py 2001/07/27 06:23:09 1.5
***************
*** 4,18 ****
from roundup.backends import anydbm
! from roundup.hyperdb import String, Link, Multilink, Date, Interval, Class
! def setupSchema(db):
status = Class(db, "status", name=String())
status.setkey("name")
! status.create(name="unread")
! status.create(name="in-progress")
! status.create(name="testing")
! status.create(name="resolved")
Class(db, "user", username=String(), password=String())
! Class(db, "issue", title=String(), status=Link("status"))
class DBTestCase(unittest.TestCase):
--- 4,21 ----
from roundup.backends import anydbm
! from roundup.hyperdb import String, Link, Multilink, Date, Interval, Class, \
! DatabaseError
! def setupSchema(db, create):
status = Class(db, "status", name=String())
status.setkey("name")
! if create:
! status.create(name="unread")
! status.create(name="in-progress")
! status.create(name="testing")
! status.create(name="resolved")
Class(db, "user", username=String(), password=String())
! Class(db, "issue", title=String(), status=Link("status"),
! nosy=Multilink("user"))
class DBTestCase(unittest.TestCase):
***************
*** 25,29 ****
os.mkdir('_test_dir')
self.db = Database('_test_dir', 'test')
! setupSchema(self.db)
def tearDown(self):
--- 28,32 ----
os.mkdir('_test_dir')
self.db = Database('_test_dir', 'test')
! setupSchema(self.db, 1)
def tearDown(self):
***************
*** 41,46 ****
keys = props.keys()
keys.sort()
! self.assertEqual(keys, ['fixer', 'status', 'title'], 'wrong prop list')
! self.db.issue.set('5', status=2)
self.db.issue.get('5', "status")
self.db.status.get('2', "name")
--- 44,49 ----
keys = props.keys()
keys.sort()
! self.assertEqual(keys, ['fixer', 'nosy', 'status', 'title'])
! self.db.issue.set('5', status='2')
self.db.issue.get('5', "status")
self.db.status.get('2', "name")
***************
*** 53,64 ****
def testExceptions(self):
# this tests the exceptions that should be raised
pass
def suite():
! return unittest.makeSuite(DBTestCase, 'test')
#
# $Log$
# Revision 1.4 2001/07/25 04:34:31 richard
# Added id and log to tests files...
--- 56,157 ----
def testExceptions(self):
# this tests the exceptions that should be raised
+ ar = self.assertRaises
+
+ #
+ # class create
+ #
+ # string property
+ ar(TypeError, self.db.status.create, name=1)
+ # invalid property name
+ ar(KeyError, self.db.status.create, foo='foo')
+ # key name clash
+ ar(ValueError, self.db.status.create, name='unread')
+ # invalid link index
+ ar(IndexError, self.db.issue.create, title='foo', status='bar')
+ # invalid link value
+ ar(ValueError, self.db.issue.create, title='foo', status=1)
+ # invalid multilink type
+ ar(TypeError, self.db.issue.create, title='foo', status='1',
+ nosy='hello')
+ # invalid multilink index type
+ ar(ValueError, self.db.issue.create, title='foo', status='1',
+ nosy=[1])
+ # invalid multilink index
+ ar(IndexError, self.db.issue.create, title='foo', status='1',
+ nosy=['10'])
+
+ #
+ # class get
+ #
+ # invalid node id
+ ar(IndexError, self.db.status.get, '10', 'name')
+ # invalid property name
+ ar(KeyError, self.db.status.get, '2', 'foo')
+
+ #
+ # class set
+ #
+ # invalid node id
+ ar(IndexError, self.db.issue.set, '1', name='foo')
+ # invalid property name
+ ar(KeyError, self.db.status.set, '1', foo='foo')
+ # string property
+ ar(TypeError, self.db.status.set, '1', name=1)
+ # key name clash
+ ar(ValueError, self.db.status.set, '2', name='unread')
+ # set up a valid issue for me to work on
+ self.db.issue.create(title="spam", status='1')
+ # invalid link index
+ ar(IndexError, self.db.issue.set, '1', title='foo', status='bar')
+ # invalid link value
+ ar(ValueError, self.db.issue.set, '1', title='foo', status=1)
+ # invalid multilink type
+ ar(TypeError, self.db.issue.set, '1', title='foo', status='1',
+ nosy='hello')
+ # invalid multilink index type
+ ar(ValueError, self.db.issue.set, '1', title='foo', status='1',
+ nosy=[1])
+ # invalid multilink index
+ ar(IndexError, self.db.issue.set, '1', title='foo', status='1',
+ nosy=['10'])
+
+ def testRetire(self):
+ ''' test retiring a node
+ '''
pass
+
+ class ReadOnlyDBTestCase(unittest.TestCase):
+ def setUp(self):
+ class Database(anydbm.Database):
+ pass
+ # remove previous test, ignore errors
+ if os.path.exists('_test_dir'):
+ shutil.rmtree('_test_dir')
+ os.mkdir('_test_dir')
+ db = Database('_test_dir', 'test')
+ setupSchema(db, 1)
+ db.close()
+ self.db = Database('_test_dir')
+ setupSchema(self.db, 0)
+
+ def testExceptions(self):
+ # this tests the exceptions that should be raised
+ self.assertRaises(DatabaseError, self.db.status.create, name="foo")
+ self.assertRaises(DatabaseError, self.db.status.set, '1', name="foo")
+ self.assertRaises(DatabaseError, self.db.status.retire, '1')
+
+
def suite():
! db = unittest.makeSuite(DBTestCase, 'test')
! readonlydb = unittest.makeSuite(ReadOnlyDBTestCase, 'test')
! return unittest.TestSuite((db, readonlydb))
#
# $Log$
+ # Revision 1.5 2001/07/27 06:23:09 richard
+ # Added some new hyperdb tests to make sure we raise the right exceptions.
+ #
# Revision 1.4 2001/07/25 04:34:31 richard
# Added id and log to tests files...
|
|
From: Richard J. <ri...@us...> - 2001-07-27 05:17:18
|
Update of /cvsroot/roundup/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv12413/roundup
Modified Files:
hyperdb.py
Log Message:
just some comments
Index: hyperdb.py
===================================================================
RCS file: /cvsroot/roundup/roundup/roundup/hyperdb.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** hyperdb.py 2001/07/22 12:09:32 1.2
--- hyperdb.py 2001/07/27 05:17:14 1.3
***************
*** 594,597 ****
--- 594,598 ----
a_id, an = a
b_id, bn = b
+ # sort by group and then sort
for list in group, sort:
for dir, prop in list:
***************
*** 662,666 ****
--- 663,671 ----
r = cmp(len(bv), len(av))
if r != 0: return r
+ # end for dir, prop in list:
+ # end for list in sort, group:
+ # if all else fails, compare the ids
return cmp(a[0], b[0])
+
l.sort(sortfun)
return [i[0] for i in l]
***************
*** 736,739 ****
--- 741,747 ----
#
# $Log$
+ # Revision 1.3 2001/07/27 05:17:14 richard
+ # just some comments
+ #
# Revision 1.2 2001/07/22 12:09:32 richard
# Final commit of Grande Splite
|
|
From: Richard J. <ri...@us...> - 2001-07-26 07:14:30
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv27882 Modified Files: setup.py Log Message: Made setup.py executable, added id and log. Index: setup.py =================================================================== RCS file: /cvsroot/roundup/roundup/setup.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** setup.py 2001/07/25 04:19:55 1.1 --- setup.py 2001/07/26 07:14:27 1.2 *************** *** 1,2 **** --- 1,6 ---- + #! /usr/bin/env python + + # $Id$ + from distutils.core import setup, Extension from distutils.util import get_platform *************** *** 26,27 **** --- 30,38 ---- # now install the bin programs, and the cgi-bin programs # not sure how, yet. + + # + # $Log$ + # Revision 1.2 2001/07/26 07:14:27 richard + # Made setup.py executable, added id and log. + # + # |
|
From: Richard J. <ri...@us...> - 2001-07-26 06:48:24
|
Update of /cvsroot/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv24035
Modified Files:
CHANGES.TXT
Log Message:
More changes
Index: CHANGES.TXT
===================================================================
RCS file: /cvsroot/roundup/roundup/CHANGES.TXT,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** CHANGES.TXT 2001/07/24 01:08:15 1.3
--- CHANGES.TXT 2001/07/26 06:48:21 1.4
***************
*** 47,60 ****
! 2001-07-19 - 0.1.4
! . Fixed bug in re generation in the filter (I hadn't finished the code ;)
! . Fixed handling of None String property in grouped list headings
! . Fixed adding new issue with no change note
! . Added an issue priority of support
! . Fixed values in text input fields which contained quotes (") are now
! quoted.
! . Fixed a bug in the hyperdb filter - wrong variable names in the error
! message.
! . Major reshuffle of code to allow multiple roundup instances and a
single, site-packages -based installation. Also allows multiple database
back-ends.
--- 47,53 ----
! 2001-07-26 - 0.2.0
! Features:
! . Major reorganisation of code to allow multiple roundup instances and a
single, site-packages -based installation. Also allows multiple database
back-ends.
***************
*** 63,66 ****
--- 56,72 ----
. Added the "classic" template - a direct implementation of the Roundup
spec. Well, as close as we're going to get, anyway.
+ . Added an issue priority of support to "extended"
. Added command-line arg handling to roundup-server so it's more useful
out-of-the-box.
+ . Added distutils-style installation of "lib" files.
+ . Added some unit tests.
+
+ Fixes:
+ . Fixed bug in re generation in the filter
+ . Fixed handling of None String property in grouped list headings
+ . Fixed adding new issue with no change note
+ . Fixed values in text input fields which contained quotes (") are now
+ quoted.
+ . Fixed a bug in the hyperdb filter - wrong variable names in the error
+ message.
+
|
|
From: Richard J. <ri...@us...> - 2001-07-26 06:48:02
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv23924 Modified Files: INSTALL.TXT Log Message: Updated for new installation procedure Index: INSTALL.TXT =================================================================== RCS file: /cvsroot/roundup/roundup/INSTALL.TXT,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** INSTALL.TXT 2001/07/23 23:32:24 1.2 --- INSTALL.TXT 2001/07/26 06:47:57 1.3 *************** *** 8,28 **** have to upgrade python before this stuff will work. - Roundup is configurable using a localconfig.py file in the instance home. - It may have the following variable declarations: - - MAILHOST - The SMTP mail host that roundup will use to send mail - MAIL_DOMAIN - The domain name used for email addresses - Any further configuration should be possible by editing the instance home's - __init__.py directly. - - The email addresses used by the system by default are: - - issue_tracker@MAIL_DOMAIN - submissions of issues - roundup-admin@MAIL_DOMAIN - roundup's internal use (problems, etc) - - Prerequisites ! ----------------- Either: . Python 2.0 with pydoc installed. See http://www.lfw.org/ for pydoc. --- 8,14 ---- have to upgrade python before this stuff will work. Prerequisites ! ------------- Either: . Python 2.0 with pydoc installed. See http://www.lfw.org/ for pydoc. *************** *** 33,37 **** --- 19,41 ---- + Testing the Software + -------------------- + + Run "python -c 'import tests;tests.go()'" and make sure there's no errors. + If there are errors, please let us know! + + + Installing the Software + ----------------------- + + 1. "./setup.py install" + 2. At present, the programs aren't installed, so you will need to copy: + roundup-admin + roundup-mailgw + roundup-server + to /usr/local/bin if you wish to have them installed. + + Initial Setup ============= *************** *** 40,43 **** --- 44,61 ---- -------- Try "./roundup-admin init" :) + + Roundup is configurable using a localconfig.py file in the instance home. + It may have the following variable declarations: + + MAILHOST - The SMTP mail host that roundup will use to send mail + MAIL_DOMAIN - The domain name used for email addresses + + Any further configuration should be possible by editing the instance home's + __init__.py directly. + + The email addresses used by the system by default are: + + issue_tracker@MAIL_DOMAIN - submissions of issues + roundup-admin@MAIL_DOMAIN - roundup's internal use (problems, etc) |
|
From: Richard J. <ri...@us...> - 2001-07-25 04:34:36
|
Update of /cvsroot/roundup/roundup/tests
In directory usw-pr-cvs1:/tmp/cvs-serv5485/tests
Modified Files:
README.TXT __init__.py test_dates.py test_db.py test_schema.py
Log Message:
Added id and log to tests files...
Index: README.TXT
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/README.TXT,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** README.TXT 2001/07/24 05:22:55 1.1
--- README.TXT 2001/07/25 04:34:31 1.2
***************
*** 1,2 ****
--- 1,4 ----
+ $Id$
+
Structre of the tests:
***************
*** 16,18 ****
--- 18,26 ----
6.4 multipart/alternative (with one text/plain)
6.5 multipart/alternative (with no text/plain)
+
+
+ ------
+ $Log$
+ Revision 1.2 2001/07/25 04:34:31 richard
+ Added id and log to tests files...
Index: __init__.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/__init__.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** __init__.py 2001/07/25 04:10:15 1.2
--- __init__.py 2001/07/25 04:34:31 1.3
***************
*** 1,2 ****
--- 1,4 ----
+ # $Id$
+
import unittest
***************
*** 11,12 ****
--- 13,21 ----
runner = unittest.TextTestRunner()
runner.run(suite)
+
+ #
+ # $Log$
+ # Revision 1.3 2001/07/25 04:34:31 richard
+ # Added id and log to tests files...
+ #
+ #
Index: test_dates.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_dates.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** test_dates.py 2001/07/25 04:10:02 1.1
--- test_dates.py 2001/07/25 04:34:31 1.2
***************
*** 1,2 ****
--- 1,4 ----
+ # $Id$
+
import unittest, time
***************
*** 52,53 ****
--- 54,62 ----
return unittest.makeSuite(DateTestCase, 'test')
+
+ #
+ # $Log$
+ # Revision 1.2 2001/07/25 04:34:31 richard
+ # Added id and log to tests files...
+ #
+ #
Index: test_db.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_db.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** test_db.py 2001/07/25 03:40:19 1.3
--- test_db.py 2001/07/25 04:34:31 1.4
***************
*** 1,2 ****
--- 1,4 ----
+ # $Id$
+
import unittest, os, shutil
***************
*** 56,57 ****
--- 58,66 ----
return unittest.makeSuite(DBTestCase, 'test')
+
+ #
+ # $Log$
+ # Revision 1.4 2001/07/25 04:34:31 richard
+ # Added id and log to tests files...
+ #
+ #
Index: test_schema.py
===================================================================
RCS file: /cvsroot/roundup/roundup/tests/test_schema.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** test_schema.py 2001/07/25 01:23:07 1.2
--- test_schema.py 2001/07/25 04:34:31 1.3
***************
*** 1,2 ****
--- 1,4 ----
+ # $Id$
+
import unittest, os, shutil
***************
*** 54,55 ****
--- 56,64 ----
return unittest.makeSuite(SchemaTestCase, 'test')
+
+ #
+ # $Log$
+ # Revision 1.3 2001/07/25 04:34:31 richard
+ # Added id and log to tests files...
+ #
+ #
|
|
From: Anthony B. <ant...@us...> - 2001-07-25 04:21:27
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv3565 Modified Files: ChangeLog Log Message: regenerated on Wed Jul 25 14:21:20 EST 2001 Index: ChangeLog =================================================================== RCS file: /cvsroot/roundup/roundup/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** ChangeLog 2001/07/25 04:20:59 1.3 --- ChangeLog 2001/07/25 04:21:24 1.4 *************** *** 34,38 **** 2001-07-25 11:23 richard ! * roundup/backends/back_anydbm.py, roundup/templates/extended/dbinit.py, tests/test_db.py, tests/test_schema.py: Added the Roundup spec to the new --- 34,41 ---- 2001-07-25 11:23 richard ! * doc/spec.html, doc/images/logo-acl-medium.gif, ! doc/images/logo-codesourcery-medium.gif, ! doc/images/logo-software-carpentry-standard.gif, ! roundup/backends/back_anydbm.py, roundup/templates/extended/dbinit.py, tests/test_db.py, tests/test_schema.py: Added the Roundup spec to the new *************** *** 343,348 **** roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.3 2001/07/25 04:20:59 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Wed Jul 25 14:20:54 EST 2001 Added CVS keywords $Id$ and to all python files. --- 346,351 ---- roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.4 2001/07/25 04:21:24 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Wed Jul 25 14:21:20 EST 2001 Added CVS keywords $Id$ and to all python files. |
|
From: Anthony B. <ant...@us...> - 2001-07-25 04:21:02
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv3454 Modified Files: ChangeLog Log Message: regenerated on Wed Jul 25 14:20:54 EST 2001 Index: ChangeLog =================================================================== RCS file: /cvsroot/roundup/roundup/ChangeLog,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ChangeLog 2001/07/24 04:53:39 1.2 --- ChangeLog 2001/07/25 04:20:59 1.3 *************** *** 1,2 **** --- 1,68 ---- + 2001-07-25 14:19 anthonybaxter + + * setup.py: first cut at setup.py - installs the package, but not + the bin/cgi-bin yet + + 2001-07-25 14:10 richard + + * tests/__init__.py: added date test suite + + 2001-07-25 14:10 richard + + * tests/test_dates.py: Date test suite + + 2001-07-25 14:09 richard + + * roundup/date.py: Fixed offset handling (shoulda read the spec a + little better) + + 2001-07-25 13:40 richard + + * README.TXT: added note about the spec + + 2001-07-25 13:40 richard + + * tests/test_db.py: Fixed an oops + + 2001-07-25 13:39 richard + + * roundup/htmltemplate.py: Hrm - displaying links to classes that + don't specify a key property. I've got it defaulting to 'name', + then 'title' and then a "random" property (first one returned by + getprops().keys(). Needs to be moved onto the Class I think... + + 2001-07-25 11:23 richard + + * roundup/backends/back_anydbm.py, + roundup/templates/extended/dbinit.py, tests/test_db.py, + tests/test_schema.py: Added the Roundup spec to the new + documentation directory. + + 2001-07-24 21:18 anthonybaxter + + * roundup/init.py: oops. left a print in + + 2001-07-24 20:54 anthonybaxter + + * roundup/: init.py, templatebuilder.py: oops. Html. + + 2001-07-24 20:46 anthonybaxter + + * roundup/: init.py, templatebuilder.py, templates/__init__.py, + templates/classic/__init__.py, templates/classic/dbinit.py, + templates/classic/htmlbase.py, templates/extended/__init__.py, + templates/extended/htmlbase.py: Added templatebuilder module. two + functions - one to pack up the html base, one to unpack it. Packed + up the two standard templates into htmlbases. Modified __init__ to + install them. + + __init__.py magic was needed for the rather high levels of wierd + import magic. Reducing level of import magic == (good, future) + + 2001-07-24 15:22 richard + + * tests/: README.TXT, __init__.py, test_db.py, test_schema.py: + Added some unit tests + 2001-07-24 14:26 anthonybaxter *************** *** 277,282 **** roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.2 2001/07/24 04:53:39 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Tue Jul 24 14:53:34 EST 2001 Added CVS keywords $Id$ and to all python files. --- 343,348 ---- roundup.py, roundup_cgi.py, roundupdb.py, server.py, template.py: Added CVS keywords $Id$ and $Log$ ! Added CVS keywords $Id$ and Revision 1.3 2001/07/25 04:20:59 anthonybaxter ! Added CVS keywords $Id$ and regenerated on Wed Jul 25 14:20:54 EST 2001 Added CVS keywords $Id$ and to all python files. |
|
From: Anthony B. <ant...@us...> - 2001-07-25 04:20:41
|
Update of /cvsroot/roundup/roundup In directory usw-pr-cvs1:/tmp/cvs-serv3408 Modified Files: .cvsignore Log Message: Index: .cvsignore =================================================================== RCS file: /cvsroot/roundup/roundup/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** .cvsignore 2001/07/19 06:20:54 1.1 --- .cvsignore 2001/07/25 04:20:38 1.2 *************** *** 1,3 **** *.pyc localconfig.py ! db --- 1,3 ---- *.pyc localconfig.py ! build |
|
From: Anthony B. <ant...@us...> - 2001-07-25 04:19:58
|
Update of /cvsroot/roundup/roundup
In directory usw-pr-cvs1:/tmp/cvs-serv3219
Added Files:
setup.py
Log Message:
first cut at setup.py - installs the package, but not the bin/cgi-bin yet
--- NEW FILE: setup.py ---
from distutils.core import setup, Extension
from distutils.util import get_platform
from glob import glob
import os
templates = 'classic', 'extended'
packagelist = [ 'roundup', 'roundup.backends', 'roundup.templates' ]
installdatafiles = []
for t in templates:
packagelist.append('roundup.templates.%s'%t)
packagelist.append('roundup.templates.%s.detectors'%t)
tfiles = glob(os.path.join('roundup','templates', t, 'html', '*'))
tfiles = filter(os.path.isfile, tfiles)
setup ( name = "roundup",
version = "0.1.4",
description = "roundup tracking system",
author = "Richard Jones",
url = 'http://sourceforge.net/projects/roundup/',
packages = packagelist,
)
# now install the bin programs, and the cgi-bin programs
# not sure how, yet.
|