简化OpenERP开发的小型实用程序
openerp-sane的Python项目详细描述
openerp sane是一个小型实用程序的集合,使openerp development看起来不像是古老的 到处是血和内脏的战争,更像是Python。
现在,有两个实用程序:@oemeth和s2d/d2s(日期转换)。那@oemeth 方法decorator,它理顺了模型中著名的ids参数 方法。示例:
defmyaction(self,cr,uid,ids,context=None):pass
通常,ids应该是int的列表,但是有时,只是,有时,我们得到 一个裸体的int,然后我们的方法崩溃。我们必须添加如下代码:
ifisinstance(ids,(int,long)):ids=[ids]
除此之外,还有另一个烦恼:为什么,哦why我所有的方法都必须处理案例 有多个ids?当我对表单中的某个按钮执行操作时,我know它只是 一次处理一个身份证。我可以很容易地做到ids[0],但是如果我真的想 安全起见,我将首先确保ids是一个列表。你不厌倦那可笑的事吗 跳舞?所以我们才有@oemeth
安装
你已经迫不及待地要开始在你的模块中使用它了,对吧?openerp sane可以从pypi安装:
$ pip install openerp-sane
当您在模块中使用它时,可以在__openerp__.py:
{# [...]'external_dependencies':{'python':['openerp_sane'],},# [...]}
@冰毒
@oemeth是一个方法修饰符,它接受2个(可选,默认为False)参数: single和browse。默认情况下,它只是确保ids是一个列表:
fromopenerp_saneimportoemeth# [...]@oemethdefmyaction(self,cr,uid,ids,context=None):# Write code that assumes ids is a list
使用single到True,我们强制使用单个intid:
@oemeth(single=True)defmyaction(self,cr,uid,objid,context=None):# objid is an ``int``.# WARNING: Use this only when you're sure that you'll only ever have single arguments.# If the input is a list with a len() != 1, an exception is raised.
使用browse到True,我们将id包装在self.browse()调用中:
@oemeth(browse=True)defmyaction(self,cr,uid,objs,context=None):# objs is a list of browse records
S2D/D2S
s2d()和d2s()(意思是“字符串到日期”和“日期到字符串”)可以减轻 当我们不得不处理和比较日期时,我们面临着可怕的问题。没有这些帮手, 我们必须手动转换那些正确的日期格式,这可以得到沉重的快速。
s2d(string_date)从日期字段获取字符串值并返回datetime.date。如果 它不能解析它,它返回False。
d2s(date)接受一个datetime.date并返回一个可以写入日期字段的字符串。 如果date不是日期,则返回False(也可以写入日期字段)。
在这两个函数中,我们都使用oe的DEFAULT_SERVER_DATE_FORMAT常量。
一点点智慧
不要在^{tt35}上使用single(这要求始终只有一个id)$ 方法。当然,大多数情况下你只有一个身份证,但是如果你的电话记录是 尚未提交,您将获得零ID,这将引发异常。在未来,也许 single模式将支持零id情况。