← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 746085] [NEW] Attaching files in Communications History tab of Add Internal Note produces python script error

 

Public bug reported:

This is an error similar to the one reported in
http://www.openerp.com/forum/topic22828.html

I am in the Helpdesk Ticket System (Sales -> After-sales Service ->
Helpdesk) and I am adding an internal note to a case, I go to
Communications History, and I try to attach a file, and I get a
screenful of python error message.

I'll put the message here.

 
 
<type 'exceptions.TypeError'>	Python 2.5.5: /home/openerp/virtualenv/python2.5/bin/python
Wed Mar 30 14:55:18 2011

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
 /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cprequest.py in respond(self=<cherrypy._cprequest.Request object at 0x11a4f250>, path_info='/openerp/openo2m/save')
  604                     if self.handler:
  605                         self.stage = 'handler'
  606                         cherrypy.response.body = self.handler()
  607                     
  608                     self.stage = 'before_finalize'
global cherrypy = <module 'cherrypy' from '/opt/python-2.5.5/lib/p.../CherryPy-3.1.2-py2.5.egg/cherrypy/__init__.pyc'>, cherrypy.response = <cherrypy._ThreadLocalProxy object at 0x1082da50>, cherrypy.response.body = [], self = <cherrypy._cprequest.Request object at 0x11a4f250>, self.handler = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>
 /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object at 0x123b8f10>)
   23     def __call__(self):
   24         try:
   25             return self.callable(*self.args, **self.kwargs)
   26         except TypeError, x:
   27             test_callable_spec(self.callable, self.args, self.kwargs)
self = <cherrypy._cpdispatch.LateParamPageHandler object at 0x123b8f10>, self.callable = <bound method Root.default of <openobject.controllers._root.Root object at 0x10dcc0d0>>, self.args = ('openerp', 'openo2m', 'save'), self.kwargs = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/openobject/tools/_expose.py in func_wrapper(*args=(<openobject.controllers._root.Root object at 0x10dcc0d0>, 'openerp', 'openo2m', 'save'), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
  180                 raise cherrypy.HTTPError(405)
  181 
  182             res = func(*args, **kw)
  183             if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
  184                 cherrypy.response.headers['Content-Type'] = 'text/javascript'
global res = '/home/openerp/openerp-web-6.0.1/openobject/widgets/templates/label.mako', func = <function default at 0x10dc4cf8>, args = (<openobject.controllers._root.Root object at 0x10dcc0d0>, 'openerp', 'openo2m', 'save'), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/openobject/controllers/_root.py in default(self=<openobject.controllers._root.Root object at 0x10dcc0d0>, *args=('openerp', 'openo2m', 'save'), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
   85             request.handler = cherrypy.NotFound()
   86 
   87         return request.handler()
   88 
   89     def find_handler(self):
request = <cherrypy._ThreadLocalProxy object at 0x1082da10>, request.handler = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>
 /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>)
   23     def __call__(self):
   24         try:
   25             return self.callable(*self.args, **self.kwargs)
   26         except TypeError, x:
   27             test_callable_spec(self.callable, self.args, self.kwargs)
self = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>, self.callable = <function save at 0x1201a050>, self.args = (), self.kwargs = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/addons/openerp/controllers/utils.py in wrapper(*args=(), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
  110             # User is logged in; allow access
  111             clear_login_fields(kw)
  112             return fn(*args, **kw)
  113         else:
  114             action = kw.get('login_action', '')
fn = <bound method OpenO2M.save of <openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>>, args = (), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/openobject/tools/_expose.py in func_wrapper(*args=(<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
  180                 raise cherrypy.HTTPError(405)
  181 
  182             res = func(*args, **kw)
  183             if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
  184                 cherrypy.response.headers['Content-Type'] = 'text/javascript'
global res = '/home/openerp/openerp-web-6.0.1/openobject/widgets/templates/label.mako', func = <function save at 0x1114e7d0>, args = (<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/openobject/tools/_validate.py in func_wrapper(*args=(<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
   47                 return func(*args, **kw)
   48 
   49             form = init_form(args and args[0] or kw["self"])
   50             args, kw = to_kw(func, args, kw)
   51 
form undefined, init_form = <function <lambda> at 0x1114e668>, args = (<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/openobject/tools/_validate.py in (self=<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>)
   37 
   38         if callable(form) and not hasattr(form, "validate"):
   39             init_form = lambda self: form(self)
   40         else:
   41             init_form = lambda self: form
init_form undefined, self = <openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>, form = <function get_validation_schema at 0x110b7c08>
 /home/openerp/openerp-web-6.0.1/addons/openerp/controllers/form.py in get_validation_schema(self=<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>)
  128 
  129     kw = cherrypy.request.params
  130     params, data = TinyDict.split(kw)
  131 
  132     # bypass validations, if saving from button in non-editable view
params undefined, data undefined, global TinyDict = <class 'openerp.utils.utils.TinyDict'>, TinyDict.split = <function split at 0x10fba140>, kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
 /home/openerp/openerp-web-6.0.1/addons/openerp/utils/utils.py in split(kwargs={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
  164                 data[n] = v
  165 
  166         return _make_dict(params, True), _make_dict(data, False)
  167 
  168     def make_plain(self, prefix=''):
global _make_dict = <function _make_dict at 0x10fb75f0>, params = {'_terp_view_params/_terp_ids': [1, 2, 3], 'atta...rp_view_params/attachment_ids/_terp_context': {}}, builtin True = True, data = {'attachment_ids/__id': '', 'attachment_ids/binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'attachment_ids/name': 'GPL'}, builtin False = False
 /home/openerp/openerp-web-6.0.1/addons/openerp/utils/utils.py in _make_dict(data={'attachment_ids/__id': '', 'attachment_ids/binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'attachment_ids/name': 'GPL'}, is_params=False)
   58 
   59                 values = _make_dict(v, is_params)
   60                 if values and any(values.itervalues()):
   61                     res[k] = [(id and 1, id, values)]
   62                 else:
values = {'binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'name': 'GPL'}, builtin any = <built-in function any>, values.itervalues = <built-in method itervalues of dict object at 0x116f4c90>
 /opt/python-2.5.5/lib/python2.5/cgi.py in __len__(self=FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'))
  631     def __len__(self):
  632         """Dictionary style len(x) support."""
  633         return len(self.keys())
  634 
  635     def read_urlencoded(self):
builtin len = <built-in function len>, self = FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), self.keys = <bound method FieldStorage.keys of FieldStorage(...ral\nPublic License instead of this License.\n')>
 /opt/python-2.5.5/lib/python2.5/cgi.py in keys(self=FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'))
  607         """Dictionary style keys() method."""
  608         if self.list is None:
  609             raise TypeError, "not indexable"
  610         keys = []
  611         for item in self.list:
builtin TypeError = <type 'exceptions.TypeError'>

<type 'exceptions.TypeError'>: not indexable
      args = ('not indexable',)
      message = 'not indexable' 

Best,
Aleksey

** Affects: openobject-addons
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/746085

Title:
  Attaching files in Communications History tab of Add Internal Note
  produces python script error

Status in OpenERP Modules (addons):
  New

Bug description:
  This is an error similar to the one reported in
  http://www.openerp.com/forum/topic22828.html

  I am in the Helpdesk Ticket System (Sales -> After-sales Service ->
  Helpdesk) and I am adding an internal note to a case, I go to
  Communications History, and I try to attach a file, and I get a
  screenful of python error message.

  I'll put the message here.

   
   
  <type 'exceptions.TypeError'>	Python 2.5.5: /home/openerp/virtualenv/python2.5/bin/python
  Wed Mar 30 14:55:18 2011

  A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
   /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cprequest.py in respond(self=<cherrypy._cprequest.Request object at 0x11a4f250>, path_info='/openerp/openo2m/save')
    604                     if self.handler:
    605                         self.stage = 'handler'
    606                         cherrypy.response.body = self.handler()
    607                     
    608                     self.stage = 'before_finalize'
  global cherrypy = <module 'cherrypy' from '/opt/python-2.5.5/lib/p.../CherryPy-3.1.2-py2.5.egg/cherrypy/__init__.pyc'>, cherrypy.response = <cherrypy._ThreadLocalProxy object at 0x1082da50>, cherrypy.response.body = [], self = <cherrypy._cprequest.Request object at 0x11a4f250>, self.handler = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>
   /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object at 0x123b8f10>)
     23     def __call__(self):
     24         try:
     25             return self.callable(*self.args, **self.kwargs)
     26         except TypeError, x:
     27             test_callable_spec(self.callable, self.args, self.kwargs)
  self = <cherrypy._cpdispatch.LateParamPageHandler object at 0x123b8f10>, self.callable = <bound method Root.default of <openobject.controllers._root.Root object at 0x10dcc0d0>>, self.args = ('openerp', 'openo2m', 'save'), self.kwargs = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/openobject/tools/_expose.py in func_wrapper(*args=(<openobject.controllers._root.Root object at 0x10dcc0d0>, 'openerp', 'openo2m', 'save'), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
    180                 raise cherrypy.HTTPError(405)
    181 
    182             res = func(*args, **kw)
    183             if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
    184                 cherrypy.response.headers['Content-Type'] = 'text/javascript'
  global res = '/home/openerp/openerp-web-6.0.1/openobject/widgets/templates/label.mako', func = <function default at 0x10dc4cf8>, args = (<openobject.controllers._root.Root object at 0x10dcc0d0>, 'openerp', 'openo2m', 'save'), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/openobject/controllers/_root.py in default(self=<openobject.controllers._root.Root object at 0x10dcc0d0>, *args=('openerp', 'openo2m', 'save'), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
     85             request.handler = cherrypy.NotFound()
     86 
     87         return request.handler()
     88 
     89     def find_handler(self):
  request = <cherrypy._ThreadLocalProxy object at 0x1082da10>, request.handler = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>
   /opt/python-2.5.5/lib/python2.5/site-packages/CherryPy-3.1.2-py2.5.egg/cherrypy/_cpdispatch.py in __call__(self=<cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>)
     23     def __call__(self):
     24         try:
     25             return self.callable(*self.args, **self.kwargs)
     26         except TypeError, x:
     27             test_callable_spec(self.callable, self.args, self.kwargs)
  self = <cherrypy._cpdispatch.LateParamPageHandler object at 0x11d38390>, self.callable = <function save at 0x1201a050>, self.args = (), self.kwargs = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/addons/openerp/controllers/utils.py in wrapper(*args=(), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
    110             # User is logged in; allow access
    111             clear_login_fields(kw)
    112             return fn(*args, **kw)
    113         else:
    114             action = kw.get('login_action', '')
  fn = <bound method OpenO2M.save of <openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>>, args = (), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/openobject/tools/_expose.py in func_wrapper(*args=(<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
    180                 raise cherrypy.HTTPError(405)
    181 
    182             res = func(*args, **kw)
    183             if format == 'json' or (allow_json and 'allow_json' in cherrypy.request.params):
    184                 cherrypy.response.headers['Content-Type'] = 'text/javascript'
  global res = '/home/openerp/openerp-web-6.0.1/openobject/widgets/templates/label.mako', func = <function save at 0x1114e7d0>, args = (<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/openobject/tools/_validate.py in func_wrapper(*args=(<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), **kw={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
     47                 return func(*args, **kw)
     48 
     49             form = init_form(args and args[0] or kw["self"])
     50             args, kw = to_kw(func, args, kw)
     51 
  form undefined, init_form = <function <lambda> at 0x1114e668>, args = (<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>,), kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/openobject/tools/_validate.py in (self=<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>)
     37 
     38         if callable(form) and not hasattr(form, "validate"):
     39             init_form = lambda self: form(self)
     40         else:
     41             init_form = lambda self: form
  init_form undefined, self = <openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>, form = <function get_validation_schema at 0x110b7c08>
   /home/openerp/openerp-web-6.0.1/addons/openerp/controllers/form.py in get_validation_schema(self=<openerp.controllers.openo2m.OpenO2M object at 0x116a9c90>)
    128 
    129     kw = cherrypy.request.params
    130     params, data = TinyDict.split(kw)
    131 
    132     # bypass validations, if saving from button in non-editable view
  params undefined, data undefined, global TinyDict = <class 'openerp.utils.utils.TinyDict'>, TinyDict.split = <function split at 0x10fba140>, kw = {'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...}
   /home/openerp/openerp-web-6.0.1/addons/openerp/utils/utils.py in split(kwargs={'_terp_filter_domain': '[]', '_terp_notebook_tab': '0', '_terp_o2m': 'attachment_ids', '_terp_o2m_context': '{}', '_terp_o2m_id': '', '_terp_o2m_model': 'crm.send.mail.attachment', '_terp_parent_context': 'None', '_terp_parent_id': '3', '_terp_parent_model': 'crm.add.note', '_terp_search_data': '', ...})
    164                 data[n] = v
    165 
    166         return _make_dict(params, True), _make_dict(data, False)
    167 
    168     def make_plain(self, prefix=''):
  global _make_dict = <function _make_dict at 0x10fb75f0>, params = {'_terp_view_params/_terp_ids': [1, 2, 3], 'atta...rp_view_params/attachment_ids/_terp_context': {}}, builtin True = True, data = {'attachment_ids/__id': '', 'attachment_ids/binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'attachment_ids/name': 'GPL'}, builtin False = False
   /home/openerp/openerp-web-6.0.1/addons/openerp/utils/utils.py in _make_dict(data={'attachment_ids/__id': '', 'attachment_ids/binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'attachment_ids/name': 'GPL'}, is_params=False)
     58 
     59                 values = _make_dict(v, is_params)
     60                 if values and any(values.itervalues()):
     61                     res[k] = [(id and 1, id, values)]
     62                 else:
  values = {'binary': FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), 'name': 'GPL'}, builtin any = <built-in function any>, values.itervalues = <built-in method itervalues of dict object at 0x116f4c90>
   /opt/python-2.5.5/lib/python2.5/cgi.py in __len__(self=FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'))
    631     def __len__(self):
    632         """Dictionary style len(x) support."""
    633         return len(self.keys())
    634 
    635     def read_urlencoded(self):
  builtin len = <built-in function len>, self = FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'), self.keys = <bound method FieldStorage.keys of FieldStorage(...ral\nPublic License instead of this License.\n')>
   /opt/python-2.5.5/lib/python2.5/cgi.py in keys(self=FieldStorage('attachment_ids/binary', 'GPL', '\t...eral\nPublic License instead of this License.\n'))
    607         """Dictionary style keys() method."""
    608         if self.list is None:
    609             raise TypeError, "not indexable"
    610         keys = []
    611         for item in self.list:
  builtin TypeError = <type 'exceptions.TypeError'>

  <type 'exceptions.TypeError'>: not indexable
        args = ('not indexable',)
        message = 'not indexable' 

  Best,
  Aleksey



Follow ups

References