web/formfields.py
changeset 3890 d7a270f50f54
parent 3720 5376aaadd16b
parent 3874 7d0d4a6be046
child 4014 24f7d7eb4c23
--- a/web/formfields.py	Sun Nov 08 21:53:18 2009 +0100
+++ b/web/formfields.py	Fri Nov 20 19:35:54 2009 +0100
@@ -81,6 +81,8 @@
        role of the entity in the relation (eg 'subject' or 'object')
     :fieldset:
        optional fieldset to which this field belongs to
+    :order:
+       key used by automatic forms to sort fields
 
     """
     # default widget associated to this class of fields. May be overriden per
@@ -94,7 +96,7 @@
     def __init__(self, name=None, id=None, label=None, help=None,
                  widget=None, required=False, initial=None,
                  choices=None, sort=True, internationalizable=False,
-                 eidparam=False, role='subject', fieldset=None):
+                 eidparam=False, role='subject', fieldset=None, order=None):
         self.name = name
         self.id = id or name
         self.label = label or name
@@ -108,6 +110,7 @@
         self.role = role
         self.fieldset = fieldset
         self.init_widget(widget)
+        self.order = order
         # ordering number for this field instance
         self.creation_rank = Field.__creation_rank
         Field.__creation_rank += 1
@@ -178,12 +181,7 @@
         renderer
         """
         widget = self.get_widget(form)
-        try:
-            return widget.render(form, self, renderer)
-        except TypeError:
-            warn('[3.3] %s: widget.render now take the renderer as third argument, '
-                 'please update implementation' % widget, DeprecationWarning)
-            return widget.render(form, self)
+        return widget.render(form, self, renderer)
 
     def vocabulary(self, form):
         """return vocabulary for this field. This method will be called by
@@ -203,7 +201,10 @@
         else:
             vocab = form.form_field_vocabulary(self)
         if self.internationalizable:
-            vocab = [(form._cw._(label), value) for label, value in vocab]
+            # the short-cirtcuit 'and' boolean operator is used here to permit
+            # a valid empty string in vocabulary without attempting to translate
+            # it by gettext (which can lead to weird strings display)
+            vocab = [(label and form._cw._(label), value) for label, value in vocab]
         if self.sort:
             vocab = vocab_sort(vocab)
         return vocab