This patch adds autocompletion on char fields by adding the
autocomplete keyword to fields.char. It works a bit like
on_change_with

Please review this at http://codereview.appspot.com/4271044/

Affected files:
   M trytond/model/fields/char.py
   M trytond/model/model.py


Index: trytond/model/fields/char.py
===================================================================

--- a/trytond/model/fields/char.py
+++ b/trytond/model/fields/char.py
@@ -3,6 +3,9 @@

  from trytond.model.fields.field import Field

+def autocomplete_validate(value):
+    assert isinstance(value, list), 'autocomplete must be a list'
+

  class Char(Field):
      '''
@@ -13,7 +16,8 @@
      def __init__(self, string='', size=None, help='', required=False,
              readonly=False, domain=None, states=None, change_default=False,
              translate=False, select=0, on_change=None, on_change_with=None,
-            depends=None, order_field=None, context=None, loading='eager'):
+            depends=None, order_field=None, context=None, loading='eager',
+            autocomplete=None):
          '''
          :param translate: A boolean. If ``True`` the field is translatable.
:param size: A integer. If set defines the maximum size of the values.
@@ -24,6 +28,17 @@
                  on_change=on_change, on_change_with=on_change_with,
                  depends=depends, order_field=order_field, context=context,
                  loading=loading)
+        self.__autocomplete = None
+        self.autocomplete = autocomplete if autocomplete else []
          self.translate = translate
          self.size = size
      __init__.__doc__ += Field.__init__.__doc__
+
+    def _get_autocomplete(self):
+        return self.__autocomplete
+
+    def _set_autocomplete(self, value):
+        autocomplete_validate(value)
+        self.__autocomplete = value
+
+    autocomplete = property(_get_autocomplete, _set_autocomplete)

Index: trytond/model/model.py
===================================================================

--- a/trytond/model/model.py
+++ b/trytond/model/model.py
@@ -93,14 +93,12 @@
                      and not isinstance(field.selection, (list, tuple)) \
                      and field.selection not in self._rpc:
                  self._rpc[field.selection] = False
-            if field.on_change:
-                on_change = 'on_change_' + field_name
-                if on_change not in self._rpc:
-                    self._rpc[on_change] = False
-            if field.on_change_with:
-                on_change_with = 'on_change_with_' + field_name
-                if on_change_with not in self._rpc:
-                    self._rpc[on_change_with] = False
+
+ for attribute in ('on_change', 'on_change_with', 'autocomplete'):
+                if getattr(field, attribute, False):
+                    function_name = '%s_%s' % (attribute, field_name)
+                    if function_name not in self._rpc:
+                        self._rpc[function_name] = False

      def __getattr__(self, name):
          # Search if a function exists in inherits parents
@@ -567,6 +565,7 @@
                      'on_change',
                      'add_remove',
                      'on_change_with',
+                    'autocomplete',
                      'sort',
                      'datetime_field',
                      'loading',



--
[email protected] mailing list

Reply via email to