-1

I am trying to create a global dictionary for my module, but it keep telling me that my syntax is wrong. I did I wrong?

_dummy_date = dict{
    '0'=datetime(year=1990, month=1, day=1, hour=0,minutes=0,second=0),
    '1'=datetime(year=1990, month=1, day=2, hour=0,minutes=0,second=0),
    '2'=datetime(year=1990, month=1, day=3, hour=0,minutes=0,second=0),
    '3'=datetime(year=1990, month=1, day=4, hour=0,minutes=0,second=0),
    '4'=datetime(year=1990, month=1, day=5, hour=0,minutes=0,second=0),
    '5'=datetime(year=1990, month=1, day=6, hour=0,minutes=0,second=0),
    '6'=datetime(year=1990, month=1, day=7, hour=0,minutes=0,second=0)
}

Here is the error

File "/usr/lib/python2.7/dist-packages/odoo/modules/module.py", line 367, in load_openerp_module
    __import__('odoo.addons.' + module_name)
  File "/usr/lib/python2.7/dist-packages/odoo/modules/module.py", line 81, in load_module
    execfile(modfile, new_mod.__dict__)
  File "/mnt/extra-addons/jy_attendance_base/__init__.py", line 3, in <module>
    from . import models
  File "/mnt/extra-addons/jy_attendance_base/models/__init__.py", line 3, in <module>
    from . import models
File "/mnt/extra-addons/jy_attendance_base/models/models.py", line 8
    _dummy_date = dict{
                      ^
SyntaxError: invalid syntax
ShadowRanger
  • 143,180
  • 12
  • 188
  • 271
Silver
  • 29
  • 1
  • 9

1 Answers1

1

dict() is a method, so you must call it explicitly:

dict()

Also, a dict constructed this way is not separated with an equal(=) sign, but a colon, like so:

_dummy_date = dict({
    '0':datetime(year=1990, month=1, day=1, hour=0,minutes=0,second=0),
    '1':datetime(year=1990, month=1, day=2, hour=0,minutes=0,second=0),
    '2':datetime(year=1990, month=1, day=3, hour=0,minutes=0,second=0),
    '3':datetime(year=1990, month=1, day=4, hour=0,minutes=0,second=0),
    '4':datetime(year=1990, month=1, day=5, hour=0,minutes=0,second=0),
    '5':datetime(year=1990, month=1, day=6, hour=0,minutes=0,second=0),
    '6':datetime(year=1990, month=1, day=7, hour=0,minutes=0,second=0)
})

But, since you're creating your dictionary explicitly, you can remove the dict() call at all, and simply write:

_dummy_date = {
    '0':datetime(year=1990, month=1, day=1, hour=0,minutes=0,second=0),
    '1':datetime(year=1990, month=1, day=2, hour=0,minutes=0,second=0),
    '2':datetime(year=1990, month=1, day=3, hour=0,minutes=0,second=0),
    '3':datetime(year=1990, month=1, day=4, hour=0,minutes=0,second=0),
    '4':datetime(year=1990, month=1, day=5, hour=0,minutes=0,second=0),
    '5':datetime(year=1990, month=1, day=6, hour=0,minutes=0,second=0),
    '6':datetime(year=1990, month=1, day=7, hour=0,minutes=0,second=0)
}

And this will simply create the dict as you like

Zionsof
  • 1,196
  • 11
  • 23
  • Thank you, I fixed. But I'm not really sure, but I have seen someone asking what is a difference by between `blah=dict{a='b'}` and `blah={a:'b'}` – Silver Dec 05 '17 at 11:47
  • ```blah=dict{a='b'}``` is not a proper syntax, you cannot write that way. You may mean ```blah=dict(a='b')``` with regular parentheses. And the difference between ```blah=dict(a='b')``` and ```blah={a:'b'}``` is that the first calls the constructor ```dict()``` explicitly and the second does not, which means it will take less time to compute. As stated [here](https://stackoverflow.com/questions/664118/whats-the-difference-between-dict-and) – Zionsof Dec 06 '17 at 08:06