Skip to content

Commit 269b53f

Browse files
committed
Allow default value declaration in DB schema.
1 parent c20f920 commit 269b53f

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

roundup/cgi/templating.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -567,10 +567,7 @@ def __getitem__(self, item):
567567
for klass, htmlklass in propclasses:
568568
if not isinstance(prop, klass):
569569
continue
570-
if isinstance(prop, hyperdb.Multilink):
571-
value = []
572-
else:
573-
value = None
570+
value = prop.get_default_value()
574571
return htmlklass(self._client, self._classname, None, prop, item,
575572
value, self._anonymous)
576573

@@ -603,13 +600,10 @@ def properties(self, sort=1):
603600
l = []
604601
for name, prop in self._props.items():
605602
for klass, htmlklass in propclasses:
606-
if isinstance(prop, hyperdb.Multilink):
607-
value = []
608-
else:
609-
value = None
610603
if isinstance(prop, klass):
604+
value = prop.get_default_value()
611605
l.append(htmlklass(self._client, self._classname, '',
612-
prop, name, value, self._anonymous))
606+
prop, name, value, self._anonymous))
613607
if sort:
614608
l.sort(lambda a,b:cmp(a._name, b._name))
615609
return l

roundup/hyperdb.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,15 @@
3535
#
3636
class _Type(object):
3737
"""A roundup property type."""
38-
def __init__(self, required=False):
38+
def __init__(self, required=False, default_value = None):
3939
self.required = required
40+
self.__default_value = default_value
4041
def __repr__(self):
4142
' more useful for dumps '
4243
return '<%s.%s>'%(self.__class__.__module__, self.__class__.__name__)
44+
def get_default_value(self):
45+
"""The default value when creating a new instance of this property."""
46+
return self.__default_value
4347
def sort_repr (self, cls, val, name):
4448
"""Representation used for sorting. This should be a python
4549
built-in type, otherwise sorting will take ages. Note that
@@ -50,8 +54,8 @@ def sort_repr (self, cls, val, name):
5054

5155
class String(_Type):
5256
"""An object designating a String property."""
53-
def __init__(self, indexme='no', required=False):
54-
super(String, self).__init__(required)
57+
def __init__(self, indexme='no', required=False, default_value = ""):
58+
super(String, self).__init__(required, default_value)
5559
self.indexme = indexme == 'yes'
5660
def from_raw(self, value, propname='', **kw):
5761
"""fix the CRLF/CR -> LF stuff"""
@@ -85,8 +89,9 @@ def sort_repr (self, cls, val, name):
8589

8690
class Date(_Type):
8791
"""An object designating a Date property."""
88-
def __init__(self, offset=None, required=False):
89-
super(Date, self).__init__(required)
92+
def __init__(self, offset=None, required=False, default_value = None):
93+
super(Date, self).__init__(required = required,
94+
default_value = default_value)
9095
self._offset = offset
9196
def offset(self, db):
9297
if self._offset is not None:
@@ -124,10 +129,11 @@ def sort_repr (self, cls, val, name):
124129
class _Pointer(_Type):
125130
"""An object designating a Pointer property that links or multilinks
126131
to a node in a specified class."""
127-
def __init__(self, classname, do_journal='yes', required=False):
132+
def __init__(self, classname, do_journal='yes', required=False,
133+
default_value = None):
128134
""" Default is to journal link and unlink events
129135
"""
130-
super(_Pointer, self).__init__(required)
136+
super(_Pointer, self).__init__(required, default_value)
131137
self.classname = classname
132138
self.do_journal = do_journal == 'yes'
133139
def __repr__(self):
@@ -163,6 +169,14 @@ class Multilink(_Pointer):
163169
"do_journal" indicates whether the linked-to nodes should have
164170
'link' and 'unlink' events placed in their journal
165171
"""
172+
173+
def __init__(self, classname, do_journal = 'yes', required = False):
174+
175+
super(Multilink, self).__init__(classname,
176+
do_journal,
177+
required = required,
178+
default_value = [])
179+
166180
def from_raw(self, value, db, klass, propname, itemid, **kw):
167181
if not value:
168182
return []

0 commit comments

Comments
 (0)