|
|
|
##############################################################################
|
|
|
|
#
|
|
|
|
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# This software is subject to the provisions of the Zope Public License,
|
|
|
|
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
|
|
|
|
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
|
|
|
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
|
|
|
# FOR A PARTICULAR PURPOSE
|
|
|
|
#
|
|
|
|
##############################################################################
|
|
|
|
|
|
|
|
__version__='$Revision: 1.7 $'[11:-2]
|
|
|
|
|
|
|
|
import string, math, random
|
|
|
|
import DocumentTemplate.sequence
|
|
|
|
|
|
|
|
utility_builtins = {}
|
|
|
|
|
|
|
|
utility_builtins['string'] = string
|
|
|
|
utility_builtins['math'] = math
|
|
|
|
utility_builtins['random'] = random
|
|
|
|
utility_builtins['whrandom'] = random
|
|
|
|
utility_builtins['sequence'] = DocumentTemplate.sequence
|
|
|
|
|
|
|
|
try:
|
|
|
|
import DateTime
|
|
|
|
utility_builtins['DateTime']= DateTime.DateTime
|
|
|
|
except: pass
|
|
|
|
|
|
|
|
def same_type(arg1, *args):
|
|
|
|
'''Compares the class or type of two or more objects.'''
|
|
|
|
t = getattr(arg1, '__class__', type(arg1))
|
|
|
|
for arg in args:
|
|
|
|
if getattr(arg, '__class__', type(arg)) is not t:
|
|
|
|
return 0
|
|
|
|
return 1
|
|
|
|
utility_builtins['same_type'] = same_type
|
|
|
|
|
|
|
|
def test(*args):
|
|
|
|
l=len(args)
|
|
|
|
for i in range(1, l, 2):
|
|
|
|
if args[i-1]: return args[i]
|
|
|
|
|
|
|
|
if l%2: return args[-1]
|
|
|
|
utility_builtins['test'] = test
|
|
|
|
|
|
|
|
def reorder(s, swith=None, swithout=()):
|
|
|
|
# s, swith, and swithout are sequences treated as sets.
|
|
|
|
# The result is subtract(intersect(s, swith), swithout),
|
|
|
|
# unless swith is None, in which case it is subtract(s, swithout).
|
|
|
|
if swith is None: swith=s
|
|
|
|
d={}
|
|
|
|
tt=type(())
|
|
|
|
for i in s:
|
|
|
|
if type(i) is tt and len(i)==2: k, v = i
|
|
|
|
else: k= v = i
|
|
|
|
d[k]=v
|
|
|
|
r=[]
|
|
|
|
a=r.append
|
|
|
|
h=d.has_key
|
|
|
|
|
|
|
|
for i in swithout:
|
|
|
|
if type(i) is tt and len(i)==2: k, v = i
|
|
|
|
else: k= v = i
|
|
|
|
if h(k): del d[k]
|
|
|
|
|
|
|
|
for i in swith:
|
|
|
|
if type(i) is tt and len(i)==2: k, v = i
|
|
|
|
else: k= v = i
|
|
|
|
if h(k):
|
|
|
|
a((k,d[k]))
|
|
|
|
del d[k]
|
|
|
|
|
|
|
|
return r
|
|
|
|
utility_builtins['reorder'] = reorder
|