Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/trunk-ir-sequence-vmt into lp:openobject-server.
Requested reviews: OpenERP Core Team (openerp) For more details, see: https://code.launchpad.net/~openerp-dev/openobject-server/trunk-ir-sequence-vmt/+merge/77343 -- https://code.launchpad.net/~openerp-dev/openobject-server/trunk-ir-sequence-vmt/+merge/77343 Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/trunk-ir-sequence-vmt.
=== modified file 'openerp/addons/base/i18n/af.po' --- openerp/addons/base/i18n/af.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/af.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/am.po' --- openerp/addons/base/i18n/am.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/am.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/ar.po' --- openerp/addons/base/i18n/ar.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ar.po 2011-09-28 15:24:26 +0000 @@ -5430,7 +5430,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/base.pot' --- openerp/addons/base/i18n/base.pot 2011-01-11 11:23:16 +0000 +++ openerp/addons/base/i18n/base.pot 2011-09-28 15:24:26 +0000 @@ -5217,7 +5217,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/bg.po' --- openerp/addons/base/i18n/bg.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/bg.po 2011-09-28 15:24:26 +0000 @@ -5572,7 +5572,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "ÐÑой на оÑÑÑпкаÑа" #. module: base === modified file 'openerp/addons/base/i18n/bs.po' --- openerp/addons/base/i18n/bs.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/bs.po 2011-09-28 15:24:26 +0000 @@ -5439,7 +5439,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/ca.po' --- openerp/addons/base/i18n/ca.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ca.po 2011-09-28 15:24:26 +0000 @@ -5709,7 +5709,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Omplenat del número" #. module: base === modified file 'openerp/addons/base/i18n/cs.po' --- openerp/addons/base/i18n/cs.po 2011-09-17 04:54:38 +0000 +++ openerp/addons/base/i18n/cs.po 2011-09-28 15:24:26 +0000 @@ -5529,7 +5529,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Zarovnánà ÄÃsla" #. module: base === modified file 'openerp/addons/base/i18n/da.po' --- openerp/addons/base/i18n/da.po 2011-09-25 04:40:50 +0000 +++ openerp/addons/base/i18n/da.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/de.po' --- openerp/addons/base/i18n/de.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/de.po 2011-09-28 15:24:26 +0000 @@ -5702,7 +5702,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Stellenanzahl" #. module: base === modified file 'openerp/addons/base/i18n/el.po' --- openerp/addons/base/i18n/el.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/el.po 2011-09-28 15:24:26 +0000 @@ -5614,7 +5614,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Î£Ï Î¼ÏλήÏÏÏη αÏιθμÏν" #. module: base === modified file 'openerp/addons/base/i18n/en_GB.po' --- openerp/addons/base/i18n/en_GB.po 2011-09-23 04:38:33 +0000 +++ openerp/addons/base/i18n/en_GB.po 2011-09-28 15:24:26 +0000 @@ -5669,8 +5669,8 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" -msgstr "Number padding" +msgid "Number Padding" +msgstr "Number Padding" #. module: base #: view:ir.actions.report.xml:0 === modified file 'openerp/addons/base/i18n/es.po' --- openerp/addons/base/i18n/es.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/es.po 2011-09-28 15:24:26 +0000 @@ -5723,7 +5723,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Relleno del número" #. module: base === modified file 'openerp/addons/base/i18n/es_AR.po' --- openerp/addons/base/i18n/es_AR.po 2010-10-12 05:27:02 +0000 +++ openerp/addons/base/i18n/es_AR.po 2011-09-28 15:24:26 +0000 @@ -4778,7 +4778,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Relleno del número" #. module: base === modified file 'openerp/addons/base/i18n/es_CL.po' --- openerp/addons/base/i18n/es_CL.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/es_CL.po 2011-09-28 15:24:26 +0000 @@ -5725,7 +5725,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Relleno del número" #. module: base === modified file 'openerp/addons/base/i18n/es_EC.po' --- openerp/addons/base/i18n/es_EC.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/es_EC.po 2011-09-28 15:24:26 +0000 @@ -5712,7 +5712,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Relleno del número" #. module: base === modified file 'openerp/addons/base/i18n/et.po' --- openerp/addons/base/i18n/et.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/et.po 2011-09-28 15:24:26 +0000 @@ -5488,7 +5488,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Arvu täidistus" #. module: base === modified file 'openerp/addons/base/i18n/eu.po' --- openerp/addons/base/i18n/eu.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/eu.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/fa.po' --- openerp/addons/base/i18n/fa.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/fa.po 2011-09-28 15:24:26 +0000 @@ -5496,7 +5496,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Ù¾ÛÙ Ø§ÛØ´ ش٠ارگاÙÛ" #. module: base === modified file 'openerp/addons/base/i18n/fa_AF.po' --- openerp/addons/base/i18n/fa_AF.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/fa_AF.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/fi.po' --- openerp/addons/base/i18n/fi.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/fi.po 2011-09-28 15:24:26 +0000 @@ -5664,7 +5664,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Täytenumerot" #. module: base === modified file 'openerp/addons/base/i18n/fr.po' --- openerp/addons/base/i18n/fr.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/fr.po 2011-09-28 15:24:26 +0000 @@ -5717,7 +5717,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Remplissage" #. module: base === modified file 'openerp/addons/base/i18n/gl.po' --- openerp/addons/base/i18n/gl.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/gl.po 2011-09-28 15:24:26 +0000 @@ -5695,7 +5695,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Número de enchido" #. module: base === modified file 'openerp/addons/base/i18n/he.po' --- openerp/addons/base/i18n/he.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/he.po 2011-09-28 15:24:26 +0000 @@ -5472,7 +5472,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/hr.po' --- openerp/addons/base/i18n/hr.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/hr.po 2011-09-28 15:24:26 +0000 @@ -5553,7 +5553,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Dopunjavanje na duljinu" #. module: base === modified file 'openerp/addons/base/i18n/hu.po' --- openerp/addons/base/i18n/hu.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/hu.po 2011-09-28 15:24:26 +0000 @@ -5666,8 +5666,8 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" -msgstr "Number padding" +msgid "Number Padding" +msgstr "Number Padding" #. module: base #: view:ir.actions.report.xml:0 === modified file 'openerp/addons/base/i18n/hy.po' --- openerp/addons/base/i18n/hy.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/hy.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/id.po' --- openerp/addons/base/i18n/id.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/id.po 2011-09-28 15:24:26 +0000 @@ -5435,7 +5435,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/is.po' --- openerp/addons/base/i18n/is.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/is.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/it.po' --- openerp/addons/base/i18n/it.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/it.po 2011-09-28 15:24:26 +0000 @@ -5713,7 +5713,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Riempimento Numero" #. module: base === modified file 'openerp/addons/base/i18n/ja.po' --- openerp/addons/base/i18n/ja.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ja.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/kk.po' --- openerp/addons/base/i18n/kk.po 2011-09-17 04:54:38 +0000 +++ openerp/addons/base/i18n/kk.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/ko.po' --- openerp/addons/base/i18n/ko.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ko.po 2011-09-28 15:24:26 +0000 @@ -5457,7 +5457,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/lt.po' --- openerp/addons/base/i18n/lt.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/lt.po 2011-09-28 15:24:26 +0000 @@ -5464,7 +5464,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/lt_LT.po' --- openerp/addons/base/i18n/lt_LT.po 2010-10-12 05:27:02 +0000 +++ openerp/addons/base/i18n/lt_LT.po 2011-09-28 15:24:26 +0000 @@ -4618,7 +4618,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/lv.po' --- openerp/addons/base/i18n/lv.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/lv.po 2011-09-28 15:24:26 +0000 @@ -5514,7 +5514,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Ciparu vietas" #. module: base === modified file 'openerp/addons/base/i18n/mk.po' --- openerp/addons/base/i18n/mk.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/mk.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/mn.po' --- openerp/addons/base/i18n/mn.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/mn.po 2011-09-28 15:24:26 +0000 @@ -5533,7 +5533,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Тоон дÑгааÑÑн ÑÑÑ" #. module: base === modified file 'openerp/addons/base/i18n/nb.po' --- openerp/addons/base/i18n/nb.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/nb.po 2011-09-28 15:24:26 +0000 @@ -5530,7 +5530,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Bunnfyll" #. module: base === modified file 'openerp/addons/base/i18n/nl.po' --- openerp/addons/base/i18n/nl.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/nl.po 2011-09-28 15:24:26 +0000 @@ -5702,7 +5702,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Nummer verspringing" #. module: base === modified file 'openerp/addons/base/i18n/nl_BE.po' --- openerp/addons/base/i18n/nl_BE.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/nl_BE.po 2011-09-28 15:24:26 +0000 @@ -5447,7 +5447,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/nl_NL.po' --- openerp/addons/base/i18n/nl_NL.po 2010-10-12 05:27:02 +0000 +++ openerp/addons/base/i18n/nl_NL.po 2011-09-28 15:24:26 +0000 @@ -4796,7 +4796,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Nummer verspringing" #. module: base === modified file 'openerp/addons/base/i18n/pl.po' --- openerp/addons/base/i18n/pl.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/pl.po 2011-09-28 15:24:26 +0000 @@ -5612,7 +5612,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Liczba cyfr" #. module: base === modified file 'openerp/addons/base/i18n/pt.po' --- openerp/addons/base/i18n/pt.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/pt.po 2011-09-28 15:24:26 +0000 @@ -5591,7 +5591,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "DÃgitos do número" #. module: base === modified file 'openerp/addons/base/i18n/pt_BR.po' --- openerp/addons/base/i18n/pt_BR.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/pt_BR.po 2011-09-28 15:24:26 +0000 @@ -5687,7 +5687,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Preencher número" #. module: base === modified file 'openerp/addons/base/i18n/ro.po' --- openerp/addons/base/i18n/ro.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ro.po 2011-09-28 15:24:26 +0000 @@ -5555,7 +5555,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/ru.po' --- openerp/addons/base/i18n/ru.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ru.po 2011-09-28 15:24:26 +0000 @@ -5689,7 +5689,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "ÐÑÑавнивание ÑиÑел" #. module: base === modified file 'openerp/addons/base/i18n/sk.po' --- openerp/addons/base/i18n/sk.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/sk.po 2011-09-28 15:24:26 +0000 @@ -5598,7 +5598,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Zarovanie ÄÃsla" #. module: base === modified file 'openerp/addons/base/i18n/sl.po' --- openerp/addons/base/i18n/sl.po 2011-09-27 04:47:23 +0000 +++ openerp/addons/base/i18n/sl.po 2011-09-28 15:24:26 +0000 @@ -5650,7 +5650,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Zapolnitev Å¡tevilke" #. module: base === modified file 'openerp/addons/base/i18n/sq.po' --- openerp/addons/base/i18n/sq.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/sq.po 2011-09-28 15:24:26 +0000 @@ -5430,7 +5430,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/sr.po' --- openerp/addons/base/i18n/sr.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/sr.po 2011-09-28 15:24:26 +0000 @@ -5575,7 +5575,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Dopunjavanje brojeva" #. module: base === modified file 'openerp/addons/base/i18n/[email protected]' --- openerp/addons/base/i18n/[email protected] 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/[email protected] 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/sv.po' --- openerp/addons/base/i18n/sv.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/sv.po 2011-09-28 15:24:26 +0000 @@ -5624,7 +5624,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Numerisk utfyllnad" #. module: base === modified file 'openerp/addons/base/i18n/th.po' --- openerp/addons/base/i18n/th.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/th.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/tlh.po' --- openerp/addons/base/i18n/tlh.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/tlh.po 2011-09-28 15:24:26 +0000 @@ -5430,7 +5430,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/tr.po' --- openerp/addons/base/i18n/tr.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/tr.po 2011-09-28 15:24:26 +0000 @@ -5637,7 +5637,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "Numara dolgusu" #. module: base === modified file 'openerp/addons/base/i18n/uk.po' --- openerp/addons/base/i18n/uk.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/uk.po 2011-09-28 15:24:26 +0000 @@ -5495,7 +5495,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "ÐиÑÑвнÑÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ð¼ÐµÑÑв" #. module: base === modified file 'openerp/addons/base/i18n/uk_UA.po' --- openerp/addons/base/i18n/uk_UA.po 2010-10-12 05:27:02 +0000 +++ openerp/addons/base/i18n/uk_UA.po 2011-09-28 15:24:26 +0000 @@ -4636,7 +4636,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "ÐиÑÑвнÑÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ð¼ÐµÑÑв" #. module: base === modified file 'openerp/addons/base/i18n/ur.po' --- openerp/addons/base/i18n/ur.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/ur.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/vi.po' --- openerp/addons/base/i18n/vi.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/vi.po 2011-09-28 15:24:26 +0000 @@ -5468,7 +5468,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/zh_CN.po' --- openerp/addons/base/i18n/zh_CN.po 2011-09-01 04:46:07 +0000 +++ openerp/addons/base/i18n/zh_CN.po 2011-09-28 15:24:26 +0000 @@ -5471,7 +5471,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "æ°å使°" #. module: base === modified file 'openerp/addons/base/i18n/zh_HK.po' --- openerp/addons/base/i18n/zh_HK.po 2011-09-28 05:19:41 +0000 +++ openerp/addons/base/i18n/zh_HK.po 2011-09-28 15:24:26 +0000 @@ -5431,7 +5431,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/i18n/zh_TW.po' --- openerp/addons/base/i18n/zh_TW.po 2011-09-28 05:19:41 +0000 +++ openerp/addons/base/i18n/zh_TW.po 2011-09-28 15:24:26 +0000 @@ -5447,7 +5447,7 @@ #. module: base #: field:ir.sequence,padding:0 -msgid "Number padding" +msgid "Number Padding" msgstr "" #. module: base === modified file 'openerp/addons/base/ir/ir.xml' --- openerp/addons/base/ir/ir.xml 2011-09-21 08:30:41 +0000 +++ openerp/addons/base/ir/ir.xml 2011-09-28 15:24:26 +0000 @@ -176,6 +176,7 @@ <field name="padding"/> <field name="number_increment"/> <field name="number_next"/> + <field name="implementation"/> <separator colspan="4" string="Legend (for prefix, suffix)"/> <group col="8" colspan="4"> <group> @@ -215,6 +216,7 @@ <field name="company_id" groups="base.group_multi_company"/> <field name="number_next"/> <field name="number_increment"/> + <field name="implementation"/> </tree> </field> </record> === modified file 'openerp/addons/base/ir/ir_sequence.py' --- openerp/addons/base/ir/ir_sequence.py 2011-07-04 07:00:20 +0000 +++ openerp/addons/base/ir/ir_sequence.py 2011-09-28 15:24:26 +0000 @@ -20,82 +20,236 @@ ############################################################################## import time -from osv import fields,osv -import pooler - -class ir_sequence_type(osv.osv): + +import openerp + +class ir_sequence_type(openerp.osv.osv.osv): _name = 'ir.sequence.type' _order = 'name' _columns = { - 'name': fields.char('Name',size=64, required=True), - 'code': fields.char('Code',size=32, required=True), + 'name': openerp.osv.fields.char('Name', size=64, required=True), + 'code': openerp.osv.fields.char('Code', size=32, required=True), } -ir_sequence_type() + + _sql_constraints = [ + ('code_unique', 'unique(code)', '`code` must be unique.'), + ] def _code_get(self, cr, uid, context={}): cr.execute('select code, name from ir_sequence_type') return cr.fetchall() -class ir_sequence(osv.osv): +IMPLEMENTATION_SELECTION = \ + [('standard', 'Standard'), ('no_gap', 'No gap')] + +class ir_sequence(openerp.osv.osv.osv): + """ Sequence model. + + The sequence model allows to define and use so-called sequence objects. + Such objects are used to generate unique identifiers in a transaction-safe + way. + + """ _name = 'ir.sequence' _order = 'name' _columns = { - 'name': fields.char('Name',size=64, required=True), - 'code': fields.selection(_code_get, 'Code',size=64, required=True), - 'active': fields.boolean('Active'), - 'prefix': fields.char('Prefix',size=64, help="Prefix value of the record for the sequence"), - 'suffix': fields.char('Suffix',size=64, help="Suffix value of the record for the sequence"), - 'number_next': fields.integer('Next Number', required=True, help="Next number of this sequence"), - 'number_increment': fields.integer('Increment Number', required=True, help="The next number of the sequence will be incremented by this number"), - 'padding' : fields.integer('Number padding', required=True, help="OpenERP will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."), - 'company_id': fields.many2one('res.company', 'Company'), + 'name': openerp.osv.fields.char('Name', size=64, required=True), + 'code': openerp.osv.fields.selection(_code_get, 'Code', size=64, required=True), + 'implementation': openerp.osv.fields.selection( # TODO update the view + IMPLEMENTATION_SELECTION, 'Implementation', required=True, + help="Two sequence object implementations are offered: Standard " + "and 'No gap'. The later is slower than the former but forbids any" + " gap in the sequence (while they are possible in the former)."), + 'active': openerp.osv.fields.boolean('Active'), + 'prefix': openerp.osv.fields.char('Prefix', size=64, help="Prefix value of the record for the sequence"), + 'suffix': openerp.osv.fields.char('Suffix', size=64, help="Suffix value of the record for the sequence"), + 'number_next': openerp.osv.fields.integer('Next Number', required=True, help="Next number of this sequence"), + 'number_increment': openerp.osv.fields.integer('Increment Number', required=True, help="The next number of the sequence will be incremented by this number"), + 'padding' : openerp.osv.fields.integer('Number Padding', required=True, help="OpenERP will automatically adds some '0' on the left of the 'Next Number' to get the required padding size."), + 'company_id': openerp.osv.fields.many2one('res.company', 'Company'), } _defaults = { - 'active': lambda *a: True, + 'implementation': 'standard', + 'active': True, 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'ir.sequence', context=c), - 'number_increment': lambda *a: 1, - 'number_next': lambda *a: 1, - 'padding' : lambda *a : 0, + 'number_increment': 1, + 'number_next': 1, + 'padding' : 0, } - def _process(self, s): - return (s or '') % { - 'year':time.strftime('%Y'), - 'month': time.strftime('%m'), - 'day':time.strftime('%d'), - 'y': time.strftime('%y'), - 'doy': time.strftime('%j'), - 'woy': time.strftime('%W'), - 'weekday': time.strftime('%w'), - 'h24': time.strftime('%H'), - 'h12': time.strftime('%I'), - 'min': time.strftime('%M'), - 'sec': time.strftime('%S'), + def create(self, cr, uid, values, context=None): + values = self._add_missing_default_values(cr, uid, values, context) + go = super(ir_sequence, self).create \ + if values['implementation'] == 'no_gap' else self.create_postgres + return go(cr, uid, values, context) + + def create_postgres(self, cr, uid, values, context=None): + """ Create a fast, gaps-allowed PostgreSQL sequence. + + :param values: same argument than for ``create()`` but the keys + ``number_increment`` and ``number_next`` must be present. + ``_add_missing_default_values()`` can be used to this effect. + :return: id of the newly created record + """ + id = super(ir_sequence, self).create(cr, uid, values, context) + self._create_sequence(cr, id, + values['number_increment'], values['number_next']) + return id + + def unlink(self, cr, uid, ids, context=None): + super(ir_sequence, self).unlink(cr, uid, ids, context) + self._drop_sequence(cr, ids) + return True + + def write(self, cr, uid, ids, values, context=None): + ids = ids if isinstance(ids, (list, tuple)) else [ids] + new_implementation = values.get('implementation') + rows = self.read(cr, uid, ids, ['implementation', + 'number_increment', 'number_next'], context) + super(ir_sequence, self).write(cr, uid, ids, values, context) + + for row in rows: + # 4 cases: we test the previous impl. against the new one. + if row['implementation'] == 'standard': + i = values.get('number_increment', row['number_increment']) + n = values.get('number_next', row['number_next']) + if new_implementation in ('standard', None): + self._alter_sequence(cr, row['id'], i, n) + else: + self._drop_sequence(cr, row['id']) + else: + if new_implementation in ('no_gap', None): + pass + else: + self._create_sequence(cr, row['id'], i, n) + + return True + + def _interpolate(self, s, d): + return s % d if s else '' + + def _interpolation_dict(self): + t = time.localtime() # Actually, the server is always in UTC. + return { + 'year': time.strftime('%Y', t), + 'month': time.strftime('%m', t), + 'day': time.strftime('%d', t), + 'y': time.strftime('%y', t), + 'doy': time.strftime('%j', t), + 'woy': time.strftime('%W', t), + 'weekday': time.strftime('%w', t), + 'h24': time.strftime('%H', t), + 'h12': time.strftime('%I', t), + 'min': time.strftime('%M', t), + 'sec': time.strftime('%S', t), } - def get_id(self, cr, uid, sequence_id, test='id', context=None): - assert test in ('code','id') - company_ids = self.pool.get('res.company').search(cr, uid, [], context=context) - cr.execute('''SELECT id, number_next, prefix, suffix, padding - FROM ir_sequence - WHERE %s=%%s - AND active=true - AND (company_id in %%s or company_id is NULL) - ORDER BY company_id, id - FOR UPDATE NOWAIT''' % test, - (sequence_id, tuple(company_ids))) - res = cr.dictfetchone() - if res: - cr.execute('UPDATE ir_sequence SET number_next=number_next+number_increment WHERE id=%s AND active=true', (res['id'],)) - if res['number_next']: - return self._process(res['prefix']) + '%%0%sd' % res['padding'] % res['number_next'] + self._process(res['suffix']) - else: - return self._process(res['prefix']) + self._process(res['suffix']) - return False - - def get(self, cr, uid, code): - return self.get_id(cr, uid, code, test='code') -ir_sequence() + # TODO rename 'test' to 'code_or_id' in account/sequence. + def get_id(self, cr, uid, sequence_code_or_id, code_or_id='id', context=None): + """ Draw an interpolated string using the specified sequence. + + The sequence to use is specified by the ``sequence_code_or_id`` + argument, which can be a code or an id (as controlled by the + ``code_or_id`` argument. + """ + self.check_read(cr, uid) + res = self._select_by_code_or_id(cr, uid, sequence_code_or_id, + code_or_id, False, context) + + if not res: + return False + + if res['implementation'] == 'standard': + cr.execute(""" + SELECT nextval('ir_sequence_%03d') + """ % res['id']) + res['number_next'] = cr.fetchone() + else: + # Read again with FOR UPDATE NO WAIT. + res = self._select_by_code_or_id(cr, uid, sequence_code_or_id, + code_or_id, True, context) + cr.execute(""" + UPDATE ir_sequence + SET number_next=number_next+number_increment + WHERE id=%s + """, (res['id'],)) + + d = self._interpolation_dict() + interpolated_prefix = self._interpolate(res['prefix'], d) + interpolated_suffix = self._interpolate(res['suffix'], d) + if res['number_next']: + return interpolated_prefix + '%%0%sd' % res['padding'] % \ + res['number_next'] + interpolated_suffix + else: + # TODO what is this case used for ? + return interpolated_prefix + interpolated_suffix + + def get(self, cr, uid, code, context=None): + """ Draw an interpolated string using the specified sequence. + + The sequence to use is specified by its code. + """ + return self.get_id(cr, uid, code, 'code', context) + + def _select_by_code_or_id(self, cr, uid, sequence_code_or_id, code_or_id, + for_update_no_wait, context=None): + """ Read a sequence object. + + There is no access rights check on the sequence itself. + """ + assert code_or_id in ('code', 'id') + res_company = self.pool.get('res.company') + company_ids = res_company.search(cr, uid, [], context=context) + funw = 'FOR UPDATE NOWAIT' if for_update_no_wait else '' + cr.execute(""" + SELECT id, number_next, prefix, suffix, padding, implementation + FROM ir_sequence + WHERE %s=%%s + AND active=true + AND (company_id in %%s or company_id is NULL) + ORDER BY company_id, id + LIMIT 1 + %s + """ % (code_or_id, funw), + (sequence_code_or_id, tuple(company_ids))) + return cr.dictfetchone() + + def _create_sequence(self, cr, id, number_increment, number_next): + """ Create a PostreSQL sequence. + + There is no access rights check. + """ + assert isinstance(id, (int, long)) + cr.execute(""" + CREATE SEQUENCE ir_sequence_%03d INCREMENT BY %%s START WITH %%s + """ % id, (number_increment, number_next)) + + def _drop_sequence(self, cr, ids): + """ Drop the PostreSQL sequence if it exists. + + There is no access rights check. + """ + + ids = ids if isinstance(ids, (list, tuple)) else [ids] + assert all(isinstance(i, (int, long)) for i in ids), \ + "Only ids in (int, long) allowed." + names = ','.join('ir_sequence_%03d' % i for i in ids) + + # RESTRICT is the default; it prevents dropping the sequence if an + # object depends on it. + cr.execute(""" + DROP SEQUENCE IF EXISTS %s RESTRICT + """ % names) + + def _alter_sequence(self, cr, id, number_increment, number_next): + """ Alter a PostreSQL sequence. + + There is no access rights check. + """ + assert isinstance(id, (int, long)) + cr.execute(""" + ALTER SEQUENCE ir_sequence_%03d INCREMENT BY %%s RESTART WITH %%s + """ % id, (number_increment, number_next)) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: === added file 'tests/common.py' --- tests/common.py 1970-01-01 00:00:00 +0000 +++ tests/common.py 2011-09-28 15:24:26 +0000 @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +import os +import time +import unittest2 +import xmlrpclib + +import openerp + +ADDONS_PATH = os.environ['OPENERP_ADDONS_PATH'] +PORT = int(os.environ['OPENERP_PORT']) +DB = os.environ['OPENERP_DATABASE'] + +HOST = '127.0.0.1' + +ADMIN_USER = 'admin' +ADMIN_USER_ID = 1 +ADMIN_PASSWORD = 'admin' + +common_proxy_60 = None +db_proxy_60 = None +object_proxy_60 = None + +def setUpModule(): + """ + Start the OpenERP server similary to the openerp-server script and + setup some xmlrpclib proxies. + """ + openerp.tools.config['addons_path'] = ADDONS_PATH + openerp.tools.config['xmlrpc_port'] = PORT + openerp.service.start_services() + + global common_proxy_60 + global db_proxy_60 + global object_proxy_60 + + # Use the old (pre 6.1) API. + url = 'http://%s:%d/xmlrpc/' % (HOST, PORT) + common_proxy_60 = xmlrpclib.ServerProxy(url + 'common') + db_proxy_60 = xmlrpclib.ServerProxy(url + 'db') + object_proxy_60 = xmlrpclib.ServerProxy(url + 'object') + + # Ugly way to ensure the server is listening. + time.sleep(2) + +def tearDownModule(): + """ Shutdown the OpenERP server similarly to a single ctrl-c. """ + openerp.service.stop_services() === added file 'tests/test_ir_sequence.py' --- tests/test_ir_sequence.py 1970-01-01 00:00:00 +0000 +++ tests/test_ir_sequence.py 2011-09-28 15:24:26 +0000 @@ -0,0 +1,198 @@ +# -*- coding: utf-8 -*- +# Run with one of these commands: +# > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \ +# OPENERP_DATABASE=yy PYTHONPATH=. python tests/test_ir_sequence.py +# > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \ +# OPENERP_DATABASE=yy nosetests tests/test_ir_sequence.py +# > OPENERP_ADDONS_PATH='../../../addons/trunk' OPENERP_PORT=8069 \ +# OPENERP_DATABASE=yy PYTHONPATH=../:. unit2 test_ir_sequence +# This assume an existing database. +import os +import psycopg2 +import time +import unittest2 +import xmlrpclib + +import openerp +import common + +DB = common.DB +ADMIN_USER_ID = common.ADMIN_USER_ID + +setUpModule = common.setUpModule +tearDownModule = common.tearDownModule + +def registry(model): + return openerp.modules.registry.RegistryManager.get(DB)[model] + +def cursor(): + return openerp.modules.registry.RegistryManager.get(DB).db.cursor() + +class test_ir_sequence_standard(unittest2.TestCase): + """ A few tests for a 'Standard' (i.e. PostgreSQL) sequence. """ + + def test_ir_sequence_create(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + def test_ir_sequence_search(self): + """ Try a search. """ + cr = cursor() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, [], {}) + assert ids + cr.commit() + cr.close() + + def test_ir_sequence_draw(self): + """ Try to draw a number. """ + cr = cursor() + n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n + cr.commit() + cr.close() + + def test_ir_sequence_draw_twice(self): + """ Try to draw a number from two transactions. """ + cr0 = cursor() + cr1 = cursor() + n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n0 + n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n1 + cr0.commit() + cr1.commit() + cr0.close() + cr1.close() + +class test_ir_sequence_no_gap(unittest2.TestCase): + """ Copy of the previous tests for a 'No gap' sequence. """ + + def test_ir_sequence_create_no_gap(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type_2', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_2', name='Test sequence', + implementation='no_gap') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + def test_ir_sequence_draw_no_gap(self): + """ Try to draw a number. """ + cr = cursor() + n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_2', {}) + assert n + cr.commit() + cr.close() + + def test_ir_sequence_draw_twice_no_gap(self): + """ Try to draw a number from two transactions. + This is expected to not work. + """ + cr0 = cursor() + cr1 = cursor() + msg_re = '^could not obtain lock on row in relation "ir_sequence"$' + with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re): + n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {}) + assert n0 + n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type_2', {}) + cr0.close() + cr1.close() + +class test_ir_sequence_change_implementation(unittest2.TestCase): + """ Create sequence objects and change their ``implementation`` field. """ + + def test_ir_sequence_1_create(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type_3', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_3', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_4', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_4', name='Test sequence', + implementation='no_gap') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + def test_ir_sequence_2_write(self): + cr = cursor() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, + [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {}) + registry('ir.sequence').write(cr, ADMIN_USER_ID, ids, + {'implementation': 'standard'}, {}) + registry('ir.sequence').write(cr, ADMIN_USER_ID, ids, + {'implementation': 'no_gap'}, {}) + cr.commit() + cr.close() + + def test_ir_sequence_3_unlink(self): + cr = cursor() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, + [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {}) + registry('ir.sequence').unlink(cr, ADMIN_USER_ID, ids, {}) + cr.commit() + cr.close() + +class test_ir_sequence_generate(unittest2.TestCase): + """ Create sequence objects and generate some values. """ + + def test_ir_sequence_create(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type_5', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_5', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + cr = cursor() + f = lambda *a: registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_5', {}) + assert all(str(x) == f() for x in xrange(1,1000)) + cr.commit() + cr.close() + + def test_ir_sequence_create_no_gap(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type_6', name='Test sequence type', + implementation='no_gap') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_6', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + cr = cursor() + f = lambda *a: registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_6', {}) + assert all(str(x) == f() for x in xrange(1,1000)) + cr.commit() + cr.close() + + + +if __name__ == '__main__': + unittest2.main() + === modified file 'tests/test_xmlrpc.py' --- tests/test_xmlrpc.py 2011-09-23 13:34:08 +0000 +++ tests/test_xmlrpc.py 2011-09-28 15:24:26 +0000 @@ -12,43 +12,15 @@ import xmlrpclib import openerp - -ADDONS_PATH = os.environ['OPENERP_ADDONS_PATH'] -PORT = int(os.environ['OPENERP_PORT']) -DB = os.environ['OPENERP_DATABASE'] - -HOST = '127.0.0.1' - -ADMIN_USER = 'admin' -ADMIN_USER_ID = 1 -ADMIN_PASSWORD = 'admin' - -common_proxy_60 = None -db_proxy_60 = None -object_proxy_60 = None - -def setUpModule(): - """ - Start the OpenERP server similary to the openerp-server script and - setup some xmlrpclib proxies. - """ - openerp.tools.config['addons_path'] = ADDONS_PATH - openerp.tools.config['xmlrpc_port'] = PORT - openerp.service.start_services() - - global common_proxy_60 - global db_proxy_60 - global object_proxy_60 - - # Use the old (pre 6.1) API. - url = 'http://%s:%d/xmlrpc/' % (HOST, PORT) - common_proxy_60 = xmlrpclib.ServerProxy(url + 'common') - db_proxy_60 = xmlrpclib.ServerProxy(url + 'db') - object_proxy_60 = xmlrpclib.ServerProxy(url + 'object') - -def tearDownModule(): - """ Shutdown the OpenERP server similarly to a single ctrl-c. """ - openerp.service.stop_services() +import common + +DB = common.DB +ADMIN_USER = common.ADMIN_USER +ADMIN_USER_ID = common.ADMIN_USER_ID +ADMIN_PASSWORD = common.ADMIN_PASSWORD + +setUpModule = common.setUpModule +tearDownModule = common.tearDownModule class test_xmlrpc(unittest2.TestCase): @@ -57,26 +29,26 @@ Simulate a OpenERP client requesting the creation of a database and polling the server until the creation is complete. """ - progress_id = db_proxy_60.create(ADMIN_PASSWORD, DB, True, False, - ADMIN_PASSWORD) + progress_id = common.db_proxy_60.create(ADMIN_PASSWORD, DB, True, + False, ADMIN_PASSWORD) while True: time.sleep(1) - progress, users = db_proxy_60.get_progress(ADMIN_PASSWORD, + progress, users = common.db_proxy_60.get_progress(ADMIN_PASSWORD, progress_id) if progress == 1.0: break def test_xmlrpc_login(self): """ Try to login on the common service. """ - uid = common_proxy_60.login(DB, ADMIN_USER, ADMIN_PASSWORD) + uid = common.common_proxy_60.login(DB, ADMIN_USER, ADMIN_PASSWORD) assert uid == ADMIN_USER_ID def test_xmlrpc_ir_model_search(self): """ Try a search on the object service. """ - ids = object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, + ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', []) assert ids - ids = object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, + ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {}) assert ids
_______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : [email protected] Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp

