r405 - in zope-tinytableplus: . tarballs trunk trunk/debian
Jonas Meurer
mejo at alioth.debian.org
Wed Nov 1 22:44:21 CET 2006
Author: mejo
Date: 2006-11-01 22:44:20 +0100 (Wed, 01 Nov 2006)
New Revision: 405
Added:
zope-tinytableplus/tarballs/
zope-tinytableplus/tarballs/zope-tinytableplus_0.9.orig.tar.gz
Removed:
zope-tinytableplus/trunk/About.dtml
zope-tinytableplus/trunk/Add.dtml
zope-tinytableplus/trunk/Advanced.dtml
zope-tinytableplus/trunk/Edit.dtml
zope-tinytableplus/trunk/Endicor.gif
zope-tinytableplus/trunk/ImportExport.py
zope-tinytableplus/trunk/README.txt
zope-tinytableplus/trunk/TinyTablePlus.py
zope-tinytableplus/trunk/View.dtml
zope-tinytableplus/trunk/__init__.py
zope-tinytableplus/trunk/icon.gif
zope-tinytableplus/trunk/version.txt
Modified:
zope-tinytableplus/trunk/debian/changelog
zope-tinytableplus/trunk/debian/dzproduct
Log:
tarball, debian update
Added: zope-tinytableplus/tarballs/zope-tinytableplus_0.9.orig.tar.gz
===================================================================
(Binary files differ)
Property changes on: zope-tinytableplus/tarballs/zope-tinytableplus_0.9.orig.tar.gz
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: zope-tinytableplus/trunk/About.dtml
===================================================================
--- zope-tinytableplus/trunk/About.dtml 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/About.dtml 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,59 +0,0 @@
-<html>
- <head><title>About TinyTablePlus...</title></head>
- <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
-
- <!-- $Endicor: About.dtml,v 1.6 1999/04/26 19:38:43 tsarna Exp $ -->
-
- <!--#var manage_tabs-->
-
- <center>
-
-
-
- <p>
-
- <h3>TinyTablePlus</h3>
-
- <h4>
- Copyright © 1998-1999 Endicor Technologies, Inc.<br>
- All Rights Reserved. Written by Ty Sarna
- <<a href="mailto:tsarna at endicor.com">tsarna at endicor.com</a>>
- </h4>
-
- <h4>
- Modified to support updates of the table in DTML / PythonMethods
- by Shane Hathaway. (13 April 2000)
- </h4>
-
- <p>
-
- <table>
- <tr>
- <td colspan="2">
- <a href="http://www.endicor.com/">
- <img src="<!--#var SCRIPT_NAME-->/misc_/TinyTablePlus/logo" border=0></a>
- </td>
- </tr>
- <tr>
- <td> </td>
- </tr>
- <tr>
- <td align="left">
- +1 210 650 4988 <br>
- +1 210 650 0054 FAX
- </td>
- <td align="right">
- <a href="http://www.endicor.com/">http://www.endicor.com/</a> <br>
- <a href="mailto:info at endicor.com">info at endicor.com</a>
- </td>
- </tr>
- </table>
-
- <p>
-
- P.O. Box 681477 <br>
- San Antonio, TX 78268-1477 <br>
- USA
- </center>
-
-</body></html>
Deleted: zope-tinytableplus/trunk/Add.dtml
===================================================================
--- zope-tinytableplus/trunk/Add.dtml 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/Add.dtml 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,35 +0,0 @@
-<html>
- <head><title>Add TinyTablePlus</title></head>
- <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
-
- <!-- $Endicor: Add.dtml,v 1.11 1999/04/27 17:06:40 tsarna Exp $ -->
-
- <h2>Add TinyTablePlus</h2>
-
- <form action="manage_addTinyTablePlus" method="POST">
- <table cellspacing="2">
- <tr>
- <th align="LEFT" valign="TOP">Id</th>
- <td align="LEFT" valign="TOP"> <input type="TEXT" name="id" size="50"> </td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Title</em></th>
- <td align="LEFT" valign="TOP"> <input type="TEXT" name="title"
- size="50"></td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Column Names</em></th>
- <td align="LEFT" valign="TOP"> <input type="TEXT" name="columns" size="50"
- value="name value"> </td>
- </tr>
-
- <tr>
- <td></td>
- <td><br><input type="SUBMIT" value="Add"></td>
- </tr>
-
- </table>
- </form>
-</body></html>
Deleted: zope-tinytableplus/trunk/Advanced.dtml
===================================================================
--- zope-tinytableplus/trunk/Advanced.dtml 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/Advanced.dtml 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,60 +0,0 @@
-<html>
- <head><title><!--#var title_or_id--> Advanced Options</title></head>
- <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
-
- <!-- $Endicor: Advanced.dtml,v 1.2 1998/12/24 22:03:41 tsarna Exp $ -->
-
- <!--#var manage_tabs-->
-
- <h2><!--#var title_or_id--> Advanced Options</h2>
-
- <form action="manage_advanced" method="POST">
- <table cellspacing="2">
- <tr>
- <th align="LEFT" valign="TOP">Id</th>
- <td align="LEFT" valign="TOP"><!--#var id--></td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Title</em></th>
- <td align="LEFT" valign="TOP">
- <input type="TEXT" name="title" size="50"
- value="<!--#var title-->">
- </td>
- </tr>
-
- <tr><td> </td></tr>
-
- <tr>
- <td colspan=2>
- <br><br>
- You may specify a <strong>class</strong> for the data records.
- This class must be defined in a file that resides in the
- <code>Extensions</code> directory of this Zope installation.
- </td>
- <tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Class Name</em></th>
- <td align="LEFT" valign="TOP">
- <input type="TEXT" name="class_name" size="30"
- value="<!--#var class_name_-->">
- </td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Class File</em></th>
- <td align="LEFT" valign="TOP">
- <input type="TEXT" name="class_file" size="30"
- value="<!--#var class_file_-->">
- </td>
- </tr>
-
- <tr>
- <td></td>
- <td><br><input type="SUBMIT" value="Change"></td>
- </tr>
- </table>
- </form>
- </body>
-</html>
Deleted: zope-tinytableplus/trunk/Edit.dtml
===================================================================
--- zope-tinytableplus/trunk/Edit.dtml 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/Edit.dtml 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,62 +0,0 @@
-<html>
- <head><title>Edit <!--#var title_or_id--></title></head>
- <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
-
- <!-- $Endicor: Edit.dtml,v 1.10 1999/04/26 19:38:43 tsarna Exp $ -->
-
- <!--#var manage_tabs-->
-
- <h2>Edit Properties of <!--#var title_or_id--></h2>
-
- <table cellspacing="2">
- <form action="manage_edit" method="POST">
-
- <tr>
- <th align="LEFT" valign="TOP">Id</th>
- <td align="LEFT" valign="TOP"><!--#var id--></td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP"><em>Title</em></th>
- <td align="LEFT" valign="TOP">
- <input type="TEXT" name="title" size="50"
- value="<!--#var title-->">
- </td>
- </tr>
-
- <tr>
- <th align="LEFT" valign="TOP">Columns</th>
- <td align="LEFT" valign="TOP">
- <input type="TEXT" name="columns" size="50"
- value="<!--#var cols_text-->">
- </td>
- </tr>
-
- <tr>
- <td></td>
- <td><br><input type="SUBMIT" value="Change"></td>
- </tr>
-
- </form>
-
- <tr><td colspan=2><hr></td></tr>
-
- <form action="manage_editData" method="POST">
-
- <tr>
- <th align="LEFT" valign="TOP">Data</th>
- <td>
- <textarea name="data:text" rows=15
- cols=50><!--#var data_text--></textarea>
- </td>
- </tr>
-
- <tr>
- <td></td>
- <td><br><input type="SUBMIT" value="Change"></td>
- </tr>
-
- </form>
- </table>
- </body>
-</html>
Deleted: zope-tinytableplus/trunk/Endicor.gif
===================================================================
(Binary files differ)
Deleted: zope-tinytableplus/trunk/ImportExport.py
===================================================================
--- zope-tinytableplus/trunk/ImportExport.py 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/ImportExport.py 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,174 +0,0 @@
-#
-# $Endicor: ImportExport.py,v 1.3 1999/04/27 17:25:44 tsarna Exp $
-#
-# Copyright (c) 1998-1999 Endicor Technologies, Inc.
-# All rights reserved. Written by Ty Sarna <tsarna at endicor.com>
-# Modified by Shane Hathaway. (April 2000)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-"""Import and Export data from TinyTablePlus to human readable CSV-type text"""
-
-import string, token, tokenize, cStringIO, Missing
-from types import *
-
-FormatError = "Invalid Data Format"
-
-class ImportDataState:
- def __init__(self):
- self.rows = []
- self.row = []
- self.value = Missing.Value
- self.seenvalue = self.sign = 0
- self.lasttok = tokenize.ENDMARKER
-
- def token(self, t, s, src, erc, l):
- estr = "at line %d column %d" % src
- signerr = "<strong>Already have sign %s</strong>" % estr
- invtok = "<strong>invalid token %s %s</strong>" % (`s`, estr)
-
- if t == token.OP:
- if s == ',':
- self.row.append(self.value)
- self.value = Missing.Value
- self.seenvalue = self.sign = 0
- elif s == '+':
- if self.seenvalue or self.sign:
- raise FormatError, signerr
- self.sign = 1
- elif s == '-':
- if self.seenvalue or self.sign:
- raise FormatError, signerr
- self.sign = -1
- else:
- raise FormatError, invtok
-
- elif t == token.NAME:
- if string.upper(s) in ('NONE', 'NULL'):
- if self.seenvalue or self.sign:
- raise FormatError, invtok
-
- self.value = Missing.Value
- self.seenvalue = 1
- else:
- if self.seenvalue:
- if type(self.value) == StringType:
- self.value = self.value + ' ' + s
- else:
- raise FormatError, invtok
- else:
- self.value = s
- self.seenvalue = 1
-
- elif t == token.STRING:
- if self.seenvalue or self.sign:
- raise FormatError, invtok
-
- self.value = eval(s)
- self.seenvalue = 1
-
- elif t == token.NUMBER:
- if self.seenvalue:
- raise FormatError, invtok
-
- self.value = eval(s)
- if self.sign < 0:
- self.value = -self.value
- self.seenvalue = 1
-
- elif t in (token.NEWLINE, tokenize.ENDMARKER):
- if t == tokenize.NEWLINE or self.lasttok != token.NEWLINE:
- self.row.append(self.value)
- self.seenvalue = self.sign = 0
- self.value = Missing.Value
- self.rows.append(self.row)
- self.row = []
-
- elif t in (tokenize.COMMENT, tokenize.NL):
- pass
-
- else:
- raise FormatError, invtok
-
- self.lasttok = t
-
-
-def ImportData(s):
- if len(s) < 1:
- # Patch by Shane, April 2000 - Check for empty data set.
- return []
- f = cStringIO.StringIO(s)
- i = ImportDataState()
- tokenize.tokenize(f.readline, i.token)
- return i.rows
-
-
-# translate specialcharacter to escaped form
-cval = {
- '\\' : '\\\\',
- '\"' : '\\\"',
- '\a' : '\\a',
- '\b' : '\\b',
- '\f' : '\\f',
- '\n' : '\\n',
- '\r' : '\\r',
- '\t' : '\\t',
- '\v' : '\\v'
-}
-
-
-def ExportVal(data):
- t = type(data)
-
- if data is Missing.Value:
- return "NULL"
- elif data is Missing.Value:
- return "NULL"
- elif t in (IntType, FloatType, LongType):
- return str(data)
- elif t is StringType:
- s = '"'
- for c in data:
- if cval.has_key(c):
- s = s + cval[c]
- elif ord(c) <= 31 or ord(c) >= 127:
- s = s + '\\%03o' % ord(c)
- else:
- s = s + c
- return s + '"'
- else:
- return '"' + str(data) + '"'
-
-
-def ExportData(data):
- return string.join(
- map(
- lambda row: string.join(
- map(ExportVal, row),
- ', '
- ),
- data
- ),
- '\n'
- )
Deleted: zope-tinytableplus/trunk/README.txt
===================================================================
--- zope-tinytableplus/trunk/README.txt 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/README.txt 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,248 +0,0 @@
-
-TinyTablePlus is a product designed to manage a small amount of
-tabular data. It's intended to fill the gap between a Z Table or an Z
-SQL Methods accessed SQL table, which are overkill for many tasks, and
-folder token properties, which allow only a single "column". TinyTablePlus
-also makes it possible to look up an item within the list, or to return
-a subset of the list rows where columns equal particular values.
-
-TinyTablePlus Properties
-
- Columns
-
- *Columns* is a list of one or more column names separated by
- spaces. Columns are string-typed by default, but may optionally
- be integers, long integers, floating-point, or DateTime if the
- column name is suffixed with ':int', ':long', ':float', or ':date'
- or ':datetime' respectively. ':date' and ':datetime' both store
- Zope DateTime values, but ':date' values are forced to be date-only,
- with no time-of-day information.
-
- The first column is special. An index will be built on this
- column for "lookup" use (see below). The index built is unique.
- That is, if there are multiple rows with the same first-column
- value, only one row will appear in the index, and only one row
- will be returned from an index query. If this is a problem, use
- a filter on the first row instead (see below).
-
- Data
-
- The data consists of newline-separated rows containing columns
- separated by commas. Any input data will be adjusted to conform to
- the column specification. If the row contains too many columns the
- excess will be trimmed. If the row contains to few columns, columns
- containing NULL will be added. String values in a column specified
- to take a number will be replaced by 0.
-
- The form of values is similar to Python syntax. Strings are enclosed
- in single or double quotes, and backslash escapes are possible.
- Numbers may be entered just as in Python. Full Python syntax for
- floating point numbers is supported, including exponent notation.
- Dates and Date-Times are represented by strings in any of the
- formats thet the Zope DateTime class understands. Missing (NULL)
- may also be given as a value for a cell, by using 'NULL' or 'None',
- or by simply omitting the value (for example, 1,,3' is treated as
- '1,NULL,3')
-
- Python comments ('#') and line continuations may also be used.
- Note, however, that once TinyTablePlus extracts the data from the input
- text, the text is thrown away. When visiting the management edit
- interface again, the text will be regenerated from the stored data.
- Comments, blank lines, line continuations, and such will all be lost
- since they don't alter the data itself.
-
- Querying a TinyTablePlus
-
- Assume you have a table named MyTable. It has these properties:
-
- Columns::
-
- last first middle n:int x:long
-
- and the following data::
-
- "smith", "john", "x", 0, 0L
- "smith", "bob", "x", 0, 0L
- "smith", "bob", "z", 0, 0L
- "jones", "bob", "y", 0, 0L
- "jones", "john", "y", 0, 0L
- "jones", "john", "z", 0, 0L
-
- The data can be queried from DTML in several ways:
-
- Full Query::
-
- <!--#in MyTable-->
-
- Iterates through all rows of the TinyTablePlus. Within the
- region contained by 'in' tag, the column names will be
- available as variables and so can be insterted. For
- example on the first iteration, '<!--#var first-->' will
- be replaced with 'john'.
-
- Index Query::
-
- <!--#in "MyTable('jones')"-->
-
- The passed argument will be looked up in the table's
- index of the first column. Because the index is unique,
- either zero (if no matching rows) or one (if any
- matching rows) rows will be iterated through. In this
- case, any *one* of the three rows with a last name of
- 'jones' could be returned. The choice of which row is
- returned when multiple rows have the same index value is
- unspecified.
-
- Filter Query::
-
- <!--#in "MyTable(last='jones')"-->
- <!--#in "MyTable(first='john')"-->
- <!--#in "MyTable(last='jones', middle='y')"-->
-
- When one or more named arguments is given, a filter
- query is performed. Each argument name must be the name
- of a column, and the corresponding value is compared
- against that column in each row. Only matching rows are
- returned. The first example above, in contrast with the
- index query example, returns *all three* rows where the
- last name is 'jones'.
-
- While an Index Query operates only on the first column,
- a filter query can operate on any column. In the second
- exmple above, all three rows with the first name 'john'
- are returned.
-
- Finally, multiple filters may be specified. In this
- case only rows matching all contraints are iterated
- through. In the third example above, only the two rows
- where the last name is 'jones' and the middle initial is
- 'y' will be returned.
-
-Shane's mods
-
- There are four new methods, a change in the specification
- of column names, and minor mods throughout.
- These changes make it possible to use
- TinyTablePlus as a small database table, which can be very
- useful in a variety of situations. It is recommended, however,
- that TinyTablePlus only be used this way when accessed through
- a DatabaseConnector, so that a better implementation can
- be swapped in easily.
-
- 1. setRow(columnName=value, ...):
-
- setRows allows you to set the data in the table. If there
- are any "key" columns, it will try to match the key columns
- and update a row. If there are no key columns or the
- values in the key are not matched by any row, a new row
- will be added. See the explanation for key columns below.
-
- 2. delRows(columnName=value, ...):
-
- Deletes all rows that match the filter.
-
- 3. delAllRows():
-
- Deletes all rows.
-
- 4. getRows(columnName=value, ...):
-
- A synonym for the query interface. Using the getRows()
- method is sometimes easier to read in DTML or Python
- code.
-
- Key columns
-
- In a real database, key columns let you specify columns that
- can uniquely identify a record. If you try to add a row with
- values in the key column that are the same as the corresponding
- values in a row that already exists, the database will reject
- the new row.
-
- TinyTablePlus takes a less formal approach and only pays
- attention to key columns in the 'setRow()' method. 'setRow()'
- is a combination of both "insert" and "update" operations.
- It tries to find a row with the specified values in the
- key columns, and if found will update that row. It will
- ignore any other rows that happen to match.
-
- To specify which columns in the table are key columns,
- add an asterisk after the column name. For example::
-
- login* name email birthdate
-
- A table that uses those column names might have the following
- data::
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "1/1/70"
-
- Because the 'login' column is a key column, the following call::
-
- setRow(login='eliza', birthdate='unknown')
-
- ...would change the table data to::
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "unknown"
-
- 'setRow()' found a row that matched all specified key
- columns and changed that row rather than add a new row.
- Note that more than one key column is possible.
- The following call::
-
- setRow(login='harry', name='Harry Chaste', birthdate='1/1/00',
- email='unknown')
-
- ...would add to the table a new row since there is no
- row with the value of "harry" in the 'login' column. The
- table would look like this::
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "unknown"
- "harry", "Harry Chaste", "unknown", "1/1/00"
-
- Please keep in mind that TinyTablePlus does *not* scale well.
- It is very useful for reference implementations of a database,
- but don't use it in the final version your new e-commerce product.
- I (Shane) have no intention of improving its scaleability
- because that is the need that DatabaseAPI / DatabaseConnector
- (a product which I wrote myself) is intended to address.
-
-
-
-$Endicor: README.txt,v 1.2 1999/04/25 23:05:09 tsarna Exp $
-
-TinyTable License
-
- Copyright (c) 1998-1999 Endicor Technologies, Inc.
- All rights reserved. Written by Ty Sarna <tsarna at endicor.com>
- Renamed from TinyTable to TinyTablePlus and modified by
- Shane Hathaway. (April 2000)
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- 3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
Deleted: zope-tinytableplus/trunk/TinyTablePlus.py
===================================================================
--- zope-tinytableplus/trunk/TinyTablePlus.py 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/TinyTablePlus.py 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,675 +0,0 @@
-#
-# $Endicor: TinyTablePlus.py,v 1.28 1999/04/26 22:06:55 tsarna Exp $
-#
-# Copyright (c) 1998-1999 Endicor Technologies, Inc.
-# All rights reserved. Written by Ty Sarna <tsarna at endicor.com>
-#
-# Mods and change of name from "TinyTable" to "TinyTablePlus"
-# by Shane Hathaway. (13 April 2000)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-__doc__='''Tiny Table data manager product
-
-$Endicor: TinyTablePlus.py,v 1.28 1999/04/26 22:06:55 tsarna Exp $'''
-
-__version__='$Revision: 1.28 $'[11:-2]
-
-######################### Imported Modules #########################
-
-from Globals import HTMLFile, MessageDialog, Persistent
-from Shared.DC.ZRDB.Results import Results
-from persistent.mapping import PersistentMapping
-from DateTime import DateTime
-from App.Extensions import getBrain
-import OFS.ObjectManager, OFS.SimpleItem, Acquisition, AccessControl.Role
-import Record, Missing, string, types
-import ImportExport
-
-######################### Folder Methods #########################
-
-addItemForm=HTMLFile('Add', globals())
-def addItem(self, id, title='', columns='', REQUEST=None):
- """Add a TinyTablePlus to a folder
-
- The argument 'self' will be bound to a folder.
-
- The arguments, 'id' and 'title' are minimal, and most applications
- will have additional needed arguments.
- """
- self._setObject(id, TinyTablePlus(id, title, columns))
- if REQUEST is not None: return self.manage_main(self,REQUEST)
-
-######################### Helper Functions #########################
-
-IntValued = 'i'
-LongValued = 'l'
-FloatValued = 'n'
-StringValued = 's'
-DateTimeValued = 'd'
-DateValued = 'D'
-
-TypeNames = {
- IntValued : ':int',
- LongValued : ':long',
- FloatValued : ':float',
- StringValued : '',
- DateTimeValued : ':datetime',
- DateValued : ':date'
-}
-
-def TypeCode(t):
- if t == LongValued:
- return 'i'
- elif t == DateValued:
- return 'd'
- else:
- return t
-
-def CoerceType(x, t):
- if x is Missing.Value:
- return x
- elif t == IntValued:
- if type(x) == type(0.0):
- return int(x)
- if type(x) != type(0):
- if (type(x) != type('')):
- x = str(x)
-
- try:
- x = string.atoi(x)
- except:
- x = 0
- return x
- elif t == LongValued:
- if type(x) != type(0L):
- if (type(x) != type('')):
- x = str(x)
-
- try:
- x = string.atol(x)
- except:
- x = 0L
- return x
- elif t == FloatValued:
- if type(x) != type(0.0):
- if (type(x) != type('')):
- x = str(x)
-
- try:
- x = string.atof(x)
- except:
- x = 0.0
- return x
- elif t == DateTimeValued:
- if not (type(x) == types.InstanceType and x.__class__ == DateTime):
- try:
- x = DateTime(x)
- except:
- x = Missing.Value
- return x
- elif t == DateValued:
- if not (type(x) == types.InstanceType and x.__class__ == DateTime):
- try:
- # force date-only
- x = DateTime(x)
- except:
- x = Missing.Value
- return DateTime(x.Date())
- else:
- return str(x)
-
-######################### TinyTablePlus Class #########################
-
-class TinyTablePlus(
- OFS.SimpleItem.Item,
- Persistent,
- Acquisition.Implicit,
- AccessControl.Role.RoleManager,
- ):
- """TinyTablePlus is a product designed to manage a small amount of
-tabular data. It's intended to fill the gap between a Z Table or an Z
-SQL Methods accessed SQL table, which are overkill for many tasks, and
-folder token properties, which allow only a single "column". TinyTablePlus
-also makes it possible to look up an item within the list, or to return
-a subset of the list rows where columns equal particular values.
-
-TinyTablePlus Properties
-
- Columns
-
- *Columns* is a list of one or more column names separated by
- spaces. Columns are string-typed by default, but may optionally
- be integers, long integers, floating-point, or DateTime if the
- column name is suffixed with ':int', ':long', ':float', or ':date'
- or ':datetime' respectively. ':date' and ':datetime' both store
- Zope DateTime values, but ':date' values are forced to be date-only,
- with no time-of-day information.
-
- The first column is special. An index will be built on this
- column for "lookup" use (see below). The index built is unique.
- That is, if there are multiple rows with the same first-column
- value, only one row will appear in the index, and only one row
- will be returned from an index query. If this is a problem, use
- a filter on the first row instead (see below).
-
- Data
-
- The data consists of newline-separated rows containing columns
- separated by commas. Any input data will be adjusted to conform to
- the column specification. If the row contains too many columns the
- excess will be trimmed. If the row contains to few columns, columns
- containing NULL will be added. String values in a column specified
- to take a number will be replaced by 0.
-
- The form of values is similar to Python syntax. Strings are enclosed
- in single or double quotes, and backslash escapes are possible.
- Numbers may be entered just as in Python. Full Python syntax for
- floating point numbers is supported, including exponent notation.
- Dates and Date-Times are represented by strings in any of the
- formats thet the Zope DateTime class understands. Missing (NULL)
- may also be given as a value for a cell, by using 'NULL' or 'None',
- or by simply omitting the value (for example, 1,,3' is treated as
- '1,NULL,3')
-
- Python comments ('#') and line continuations may also be used.
- Note, however, that once TinyTablePlus extracts the data from the input
- text, the text is thrown away. When visiting the management edit
- interface again, the text will be regenerated from the stored data.
- Comments, blank lines, line continuations, and such will all be lost
- since they don't alter the data itself.
-
- Querying a TinyTablePlus
-
- Assume you have a table named MyTable. It has these properties:
-
- Columns::
-
- last first middle n:int x:long
-
- and the following data::
-
- "smith", "john", "x", 0, 0L
- "smith", "bob", "x", 0, 0L
- "smith", "bob", "z", 0, 0L
- "jones", "bob", "y", 0, 0L
- "jones", "john", "y", 0, 0L
- "jones", "john", "z", 0, 0L
-
- The data can be queried from DTML in several ways:
-
- Full Query::
-
- <!--#in MyTable-->
-
- Iterates through all rows of the TinyTablePlus. Within the
- region contained by 'in' tag, the column names will be
- available as variables and so can be insterted. For
- example on the first iteration, '<!--#var first-->' will
- be replaced with 'john'.
-
- Index Query::
-
- <!--#in "MyTable('jones')"-->
-
- The passed argument will be looked up in the table's
- index of the first column. Because the index is unique,
- either zero (if no matching rows) or one (if any
- matching rows) rows will be iterated through. In this
- case, any *one* of the three rows with a last name of
- 'jones' could be returned. The choice of which row is
- returned when multiple rows have the same index value is
- unspecified.
-
- Filter Query::
-
- <!--#in "MyTable(last='jones')"-->
- <!--#in "MyTable(first='john')"-->
- <!--#in "MyTable(last='jones', middle='y')"-->
-
- When one or more named arguments is given, a filter
- query is performed. Each argument name must be the name
- of a column, and the corresponding value is compared
- against that column in each row. Only matching rows are
- returned. The first example above, in contrast with the
- index query example, returns *all three* rows where the
- last name is 'jones'.
-
- While an Index Query operates only on the first column,
- a filter query can operate on any column. In the second
- exmple above, all three rows with the first name 'john'
- are returned.
-
- Finally, multiple filters may be specified. In this
- case only rows matching all contraints are iterated
- through. In the third example above, only the two rows
- where the last name is 'jones' and the middle initial is
- 'y' will be returned.
-
- Shane's mods:
-
- There are four new methods, a change in the specification
- of column names, and minor mods throughout.
- These changes make it possible to use
- TinyTablePlus as a small database table, which can be very
- useful in a variety of situations. It is recommended, however,
- that TinyTablePlus only be used this way when accessed through
- a DatabaseConnector, so that a better implementation can
- be swapped in easily.
-
- 1. setRow(columnName=value, ...)
-
- setRows allows you to set the data in the table. If there
- are any 'key' columns, it will try to match the key columns
- and update a row. If there are no key columns or the
- values in the key are not matched by any row, a new row
- will be added. See the explanation for key columns below.
-
- 2. delRows(columnName=value, ...)
-
- Deletes all rows that match the filter.
-
- 3. delAllRows()
-
- Deletes all rows.
-
- 4. getRows(columnName=value, ...)
-
- A synonym for the query interface. Using the getRows()
- method is sometimes easier to read in DTML or Python
- code.
-
- Key columns:
-
- In a real database, key columns let you specify columns that
- can uniquely identify a record. If you try to add a row with
- values in the key column that are the same as the corresponding
- values in a row that already exists, the database will reject
- the new row.
-
- TinyTablePlus takes a less formal approach and only pays
- attention to key columns in the setRow() method. setRow()
- is a combination of both 'insert' and 'update' operations.
- It tries to find a row with the specified values in the
- key columns, and if found will update that row. It will
- ignore any other rows that happen to match.
-
- To specify which columns in the table are key columns,
- add an asterisk after the column name. For example:
-
- login* name email birthdate
-
- A table that uses those column names might have the following
- data:
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "1/1/70"
-
- Because the login column is a key column, the following call:
-
- setRow(login='eliza', birthdate='unknown')
-
- ...would change the table data to:
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "unknown"
-
- setRow() found a row that matched all specified key
- columns and changed that row rather than add a new row.
- More than one key column is possible.
- The following call:
-
- setRow(login='harry', name='Harry Chaste', birthdate='1/1/00',
- email='unknown')
-
- ...would add to the table a new row since there is no
- row with the value of 'harry' in the login column. The
- table would look like this:
-
- "joe", "Joe Brown", "jbrown at xyz.com", "10/12/66"
- "eliza", "Eliza Weizenbaum", "eliza at univ.edu", "unknown"
- "harry", "Harry Chaste", "unknown", "1/1/00"
-
- Please keep in mind that TinyTablePlus does *not* scale well.
- It is very useful for reference implementations of a database,
- but don't use it in the final version your new e-commerce product.
- I (Shane) have no intention of improving its scaleability
- because that is the need that DatabaseAPI / DatabaseConnector
- (a product which I wrote myself) is intended to address.
-
- """
-
- # Specify a name for the item type:
- meta_type = 'TinyTablePlus'
-
- # Specify a relative URL for the icon used to display icons:
- icon = 'misc_/TinyTablePlus/icon'
-
- # Specify definitions for tabs:
- manage_options=(
- {"label":"Properties", "action":"manage_main"},
- {"label":"Advanced", "action":"manage_advancedForm"},
- {"label":"View", "action":"manage_view"},
- {"label":"Security", "action":"manage_access"},
- {"label":"About", "action":"manage_about"},
- )
-
- # Specify how individual operations add up to "permissions":
- __ac_permissions__=(
- ('View management screens', ('manage_tabs','manage_main',
- 'manage_about','manage_advancedForm')),
- ('Change permissions', ('manage_access',) ),
- ('Change TinyTable', ('manage_edit','manage_editData',
- 'manage_advanced',
- # Added by Shane:
- 'delRows','delAllRows','setRow',)),
- ('Query TinyTable Data', ('','index_html','manage_view','getRows')),
- )
-
- def __init__(self, id, title='', columns=''):
- self.id = id
- self._dataver = 1
- self._SetState(title, columns)
-
- self._rows = []
- self._index = PersistentMapping()
- # self._n_rows removed by Shane. Not needed.
-
- self.class_name_ = self.class_file_ = ""
- self._v_brain = None
-
- # Provide a "View" interface:
- manage_view = HTMLFile("View", globals())
-
- # Provide a "About..." interface:
- manage_about = HTMLFile("About", globals())
-
- # Provide interface for changing properties:
- manage_main=HTMLFile('Edit', globals())
- def manage_edit(self, title, columns, REQUEST=None):
- """Change item properties
-
- Note that we return people to our own interface, not to
- the folder we were in before.
- """
- self._SetState(title, columns)
-
- # make existing data conform to new column specification
- self._rows = map(self._FixRow, self._rows)
-
- # and regenerte the index, incase the above changed any data
- self._GenerateIndex()
-
- return self.manage_editedDialog(REQUEST)
-
- def _SetState(self, title, columns):
- self.title = title
-
- if self._dataver < 1:
- del self.__dict__['delim_char_']
-
- self._DigestColumns(columns)
- self._dataver = 1
-
- manage_advancedForm = HTMLFile("Advanced", globals())
- def manage_advanced(self, class_name, class_file, REQUEST=None):
- """Change Advanced Settings"""
- self.class_name_, self.class_file_ = class_name, class_file
- self._v_brain = getBrain(self.class_file_, self.class_name_, 1)
- return self.manage_editedDialog(REQUEST)
-
- def manage_editData(self, data, REQUEST=None):
- """Change item data"""
- newRows = ImportExport.ImportData(data)
- self._rows = map(self._FixRow, newRows)
-
- self._GenerateIndex()
-
- return self.manage_editedDialog(REQUEST)
-
- def _DigestColumns(self, column_list):
- self._col_index = PersistentMapping()
- self._col_names = []
- self._types = []
- self._items = []
- cols = string.split(column_list)
- # self._key_cols added to facilitate the setRows() method.
- self._key_cols = []
-
- for col in cols:
- item = PersistentMapping()
- x = string.split(col, ':')
- # Addition by SDH for specification of key_cols.
- x0 = x[0]
- if x0[-1] == '*':
- x0 = x0[0:-1]
- self._key_cols.append(x0)
-
- self._col_names.append(x0)
- item['name'] = x0
- t = StringValued
- if len(x) > 1:
- if x[1] == 'int':
- t = IntValued
- elif x[1] == 'long':
- t = LongValued
- elif x[1] == 'float':
- t = FloatValued
- elif x[1] == 'datetime':
- t = DateTimeValued
- elif x[1] == 'date':
- t = DateValued
- self._types.append(t)
- item['type'] = TypeCode(t)
- self._items.append(item)
-
- self.n_cols = len(self._col_names)
- self.index_column = self._col_names[0]
-
- col_num = 0
- for col in self._col_names:
- self._col_index[col] = col_num
- col_num = col_num + 1
-
- def _FixRow(self, row):
- # force row to match specified number of columns
- if len(row) > self.n_cols:
- row = row[:self.n_cols]
- elif len(row) < self.n_cols:
- row = row + (self.n_cols - len(row)) * [Missing.Value]
-
- # Ensure correct types
- newrow = []
- for i in range(0, self.n_cols):
- newrow.append(CoerceType(row[i], self._types[i]))
-
- return newrow
-
- def _GenerateIndex(self):
- index = PersistentMapping()
- for i in range(0, len(self._rows)):
- index[self._rows[i][0]] = i
- self._index = index
-
- def cols_text(self):
- l = []
-
- for i in range(0, self.n_cols):
- # Modified by SDH for key_cols.
- name = self._col_names[i] + TypeNames[self._types[i]]
- if hasattr(self, '_key_cols') and name in self._key_cols:
- name = name + '*'
- l.append(name)
-
- return string.join(l, ' ')
-
- def data_text(self):
- return ImportExport.ExportData(self._rows)
-
- def index_html(self):
- """Returns an HTML representation of the TinyTablePlus's data"""
-
- s = "<table border=1><tr><th>"
- s = s + string.join(self._col_names, "</th>\n<th>") + "</th></tr>\n"
- for row in self._rows:
- s = s + "<tr><td>" + \
- string.join(map(str, row), "</td>\n<td>") + "</td></tr>\n"
- return s + "</table>"
-
- def _results(self, rows):
- if hasattr(self, '_v_brain'):
- brain = self._v_brain
- else:
- brain = self._v_brain = getBrain(self.class_file_, self.class_name_)
- return Results((self._items, rows), brains=brain, parent=None)
-
- def __call__(self, *args, **kargs):
- # print self.id, args, kargs.keys()
- if len(args) == 1:
- if self._index.has_key(args[0]):
- return self._results([self._rows[self._index[args[0]]]])
- else:
- return None
- elif len(kargs):
- rf = RowFilter(self, kargs)
- l = []
-
- for i in range(0, len(self._rows)):
- if rf(self._rows[i]):
- l.append(self._rows[i])
- return self._results(l)
- else:
- return self._results(self._rows)
-
- # Convenience method added by Shane.
- getRows = __call__
-
- # The added methods by Shane Hathaway permit programatic
- # changes of the table contents.
- def delRows(self, *args, **kargs):
- '''Returns the number of rows deleted.
- '''
- if len(args) == 1:
- if self._index.has_key(args[0]):
- i = self._index[args[0]]
- if i >= 0:
- del self._rows[i]
- self._GenerateIndex()
- return 1
- else:
- return 0
- elif len(kargs):
- rf = RowFilter(self, kargs)
- count = 0
-
- i = 0
- while i < len(self._rows):
- if rf(self._rows[i]):
- del self._rows[i]
- count = count + 1
- else:
- i = i + 1
- self._GenerateIndex()
- return count
- else:
- return 0 # Don't default to deleting all rows.
-
- def delAllRows(self):
- '''Deletes all rows.
- '''
- count = len(self._rows)
- del self._rows[:]
- return count
-
- def setRow(self, *args, **kw):
- '''Adds or modifies one row.
- '''
- row = None
- willAdd = 0
- if hasattr(self, '_key_cols'):
- key_cols = self._key_cols
- if len(key_cols) > 0:
- # If key_cols is specified, we will try to
- # modify a record that matches the values of
- # the key columns.
- # First create a filter to find the specified
- # row.
- filter = {}
- for key_col in key_cols:
- index = self._col_index[key_col]
- if kw.has_key(key_col):
- # Value specified in keyword args.
- filter[index] = kw[key_col]
- elif index < len(args):
- # Value specified in ordered args.
- filter[index] = args[index]
- else:
- filter[index] = ''
- # Now find a row that matches the filter.
- for r in self._rows:
- found = 1
- for index, val in filter.items():
- if r[index] != val:
- found = 0
- break
- if found:
- # Modify this row.
- row = r
- break
- if row is None:
- # Create a new row.
- row = self.n_cols * [Missing.Value]
- willAdd = 1
- # Fill in the ordered arguments.
- for index in range(0, len(args)):
- row[index] = args[index]
- # Fill in the keyword arguments.
- for col_name, val in kw.items():
- if self._col_index.has_key(col_name):
- index = self._col_index[col_name]
- row[index] = val
- if willAdd:
- # Add a new row to the table.
- self._rows.append(row)
- self._GenerateIndex()
-
-
-######################### Helper Classes #########################
-
-class RowFilter:
- def __init__(self, table, rules):
- self.cols = []
- self.vals = []
- self.n_rules = 0
-
- for col in rules.keys():
- if table._col_index.has_key(col):
- self.cols.append(table._col_index[col])
- self.vals.append(rules[col])
- self.n_rules = self.n_rules + 1
-
- def __call__(self, row):
- for i in range(0, self.n_rules):
- if row[self.cols[i]] != self.vals[i]:
- return 0
- return 1
Deleted: zope-tinytableplus/trunk/View.dtml
===================================================================
--- zope-tinytableplus/trunk/View.dtml 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/View.dtml 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,12 +0,0 @@
-<html>
- <head><title>View <!--#var title_or_id--></title></head>
- <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
-
- <!-- $Endicor: View.dtml,v 1.2 1999/01/10 19:49:52 tsarna Exp $ -->
-
- <!--#var manage_tabs-->
-
- <!--#var index_html-->
-
- </body>
-</html>
Deleted: zope-tinytableplus/trunk/__init__.py
===================================================================
--- zope-tinytableplus/trunk/__init__.py 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/__init__.py 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,80 +0,0 @@
-#
-# $Endicor: __init__.py,v 1.5 1999/01/10 23:09:51 tsarna Exp $
-#
-# Copyright (c) 1998-1999 Endicor Technologies, Inc.
-# All rights reserved. Written by Ty Sarna <tsarna at endicor.com>
-# Small mods by Shane Hathaway. (13 April 2000)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-__doc__="""TinyTablePlus initialization
-
-$Endicor: __init__.py,v 1.5 1999/01/10 23:09:51 tsarna Exp $"""
-
-__version__="$Revision: 1.5 $"[11:-2]
-
-######################### Imported Modules #########################
-
-from ImageFile import ImageFile
-import TinyTablePlus
-
-######################### Metadata #########################
-
-# Names of objects added by this product:
-meta_types = (
- {
- "name": "TinyTablePlus", # The name of the object type
- "action": "manage_addTinyTablePlusForm", # The method to add one.
- },
-)
-
-# Attributes (usually "methods") to be added to folders to support
-# creating objects:
-methods = {
- "manage_addTinyTablePlusForm": TinyTablePlus.addItemForm,
- "manage_addTinyTablePlus": TinyTablePlus.addItem,
-}
-
-# Permission to be added to folders:
-__ac_permissions__ = (
- # To add items:
- ("Add TinyTablePlus",
- ("manage_addTinyTablePlusForm", "manage_addTinyTablePlus")),
-
- # To manipulate item permissions at a high level. Note that the
- # list of objects is empty, since we are just providing a place
- # to put acquired settings:
- ("Change TinyTable", ()),
- ("Query TinyTable Data", ()),
-)
-
-# Define shared web objects that are used by products.
-# This is usually (always ?) limited to images used
-# when displaying an object ub contents lists.
-# These objects are accessed as:
-# <!--#var SCRIPT_NAME-->/misc_/Product/name
-misc_ = {
- "icon": ImageFile("icon.gif", globals()),
- "logo": ImageFile("Endicor.gif", globals()),
-}
Modified: zope-tinytableplus/trunk/debian/changelog
===================================================================
--- zope-tinytableplus/trunk/debian/changelog 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/debian/changelog 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,3 +1,9 @@
+zope-tinytableplus (0.9-17) unstable; urgency=low
+
+ * Add support for Zope 2.10.
+
+ -- Jonas Meurer <mejo at debian.org> Wed, 1 Nov 2006 20:32:03 +0100
+
zope-tinytableplus (0.9-16) unstable; urgency=low
* TinyTablePlus.py: fix typo by Igor Stroh, the module is called
Modified: zope-tinytableplus/trunk/debian/dzproduct
===================================================================
--- zope-tinytableplus/trunk/debian/dzproduct 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/debian/dzproduct 2006-11-01 21:44:20 UTC (rev 405)
@@ -1,3 +1,3 @@
Package: zope-tinytableplus
Name: TinyTablePlus
-ZopeVersions: 2.8 2.9
+ZopeVersions: 2.8 2.9 2.10
Deleted: zope-tinytableplus/trunk/icon.gif
===================================================================
(Binary files differ)
Deleted: zope-tinytableplus/trunk/version.txt
===================================================================
--- zope-tinytableplus/trunk/version.txt 2006-11-01 21:41:23 UTC (rev 404)
+++ zope-tinytableplus/trunk/version.txt 2006-11-01 21:44:20 UTC (rev 405)
@@ -1 +0,0 @@
-TinyTablePlus-0-9
More information about the pkg-zope-commits
mailing list