Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dictionary update sequence element #0 has length 3; 2 is required

Tags:

python

odoo

I want to add lines to the object account.bank.statement.line through other object But I get following error:

"dictionary update sequence element #0 has length 3; 2 is required"

Here is my code:

def action_account_line_create(self, cr, uid, ids):     res = False     cash_id = self.pool.get('account.bank.statement.line')     for exp in self.browse(cr, uid, ids):         company_id = exp.company_id.id         #statement_id = exp.statement_id.id         lines = []         for l in exp.line_ids:             lines.append((0, 0, {                 'name': l.name,                 'date': l.date,                 'amount': l.amount,                 'type': l.type,                 'statement_id': exp.statement_id.id,                 'account_id': l.account_id.id,                 'account_analytic_id': l.analytic_account_id.id,                 'ref': l.ref,                 'note': l.note,                 'company_id': l.company_id.id             }))          inv_id = cash_id.create(cr, uid, lines,context=None)         res = inv_id     return res  

I changed it on that but then I ran into this error:

  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 68, in execute   File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 58, in _eval_expr   File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 241, in safe_eval   File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 108, in test_expr   File "<string>", line 0       ^ SyntaxError: unexpected EOF while parsing 

Code:

def action_account_line_create(self, cr, uid, ids, context=None):     res = False     cash_id = self.pool.get('account.bank.statement.line')     for exp in self.browse(cr, uid, ids):         company_id = exp.company_id.id         lines = []         for l in exp.line_ids:             res = cash_id.create ( cr, uid, {                 'name': l.name,                 'date': l.date,                 'amount': l.amount,                 'type': l.type,                 'statement_id': exp.statement_id.id,                 'account_id': l.account_id.id,                 'account_analytic_id': l.analytic_account_id.id,                 'ref': l.ref,                 'note': l.note,                 'company_id': l.company_id.id             }, context=None)     return res 
like image 771
rindra Avatar asked Jan 13 '13 09:01

rindra


People also ask

How do you fix ValueError dictionary update sequence element #0 has length 1/2 is required?

ValueError: dictionary update sequence element #0 has length N; 2 is required # The Python "ValueError: dictionary update sequence element #0 has length N; 2 is required" occurs when we use the dict. update() method incorrectly. To solve the error, pass another dictionary or an iterable of key/value pairs to the dict.

Is Update () a method of dictionary?

The update() method inserts the specified items to the dictionary. The specified items can be a dictionary, or an iterable object with key value pairs.


2 Answers

This error raised up because you trying to update dict object by using a wrong sequence (list or tuple) structure.

cash_id.create(cr, uid, lines,context=None) trying to convert lines into dict object:

(0, 0, {     'name': l.name,     'date': l.date,     'amount': l.amount,     'type': l.type,     'statement_id': exp.statement_id.id,     'account_id': l.account_id.id,     'account_analytic_id': l.analytic_account_id.id,     'ref': l.ref,     'note': l.note,     'company_id': l.company_id.id }) 

Remove the second zero from this tuple to properly convert it into a dict object.

To test it your self, try this into python shell:

>>> l=[(0,0,{'h':88})] >>> a={} >>> a.update(l)  Traceback (most recent call last):   File "<pyshell#11>", line 1, in <module>     a.update(l) ValueError: dictionary update sequence element #0 has length 3; 2 is required  >>> l=[(0,{'h':88})] >>> a.update(l) 
like image 71
MBarsi Avatar answered Sep 28 '22 07:09

MBarsi


I was getting this error when I was updating the dictionary with the wrong syntax:

Try with these:

lineItem.values.update({attribute,value}) 

instead of

lineItem.values.update({attribute:value}) 
like image 23
Ian Michel Avatar answered Sep 28 '22 06:09

Ian Michel