跳转到主要内容

简化OpenERP开发的实用工具

项目描述

openerp-sane 是一组小工具集合,使 OpenERP 开发看起来不再像充满血腥和肉搏的古代战争,更像 Python。

目前,有两个工具: @oemeths2d/d2s(日期转换)。@oemeth 方法装饰器可以简化我们对模型方法中著名的 ids 参数的管理。示例

def myaction(self, cr, uid, ids, context=None): pass

通常,ids 应该是一个整数列表,但 有时,仅仅是,有时,我们得到一个裸露的 int,然后我们的方法崩溃。我们必须添加代码像

if isinstance(ids, (int, long)):
    ids = [ids]

此外,还有一个令人烦恼的问题:为什么,哦 为什么 我所有的方法都必须处理多个 ids 的情况?当我有一个用于表单中某个按钮的操作时,我知道它每次只会处理一个 id。我可以很容易地做到 ids[0],但如果我真的想确保安全,我会确保 ids 是一个列表。你不厌倦这种荒谬的舞蹈吗?这就是为什么我们有 @oemeth

安装

你迫不及待想在模块中使用它,对吧?openerp-sane 可以从 PyPI 安装

$ pip install openerp-sane

当你在模块中使用它时,你可以在你的 __openerp__.py 中记录对其的依赖

{
    # [...]
    'external_dependencies': {
        'python': ['openerp_sane'],
    },
    # [...]
}

@oemeth

@oemeth 是一个方法装饰器,它接受2个(可选,默认为 False)参数: singlebrowse。默认情况下,它仅仅确保 ids 是一个列表

from openerp_sane import oemeth

# [...]

@oemeth
def myaction(self, cr, uid, ids, context=None):
    # Write code that assumes ids is a list

single 设置为 True 时,我们将强制使用单个 int id

@oemeth(single=True)
def myaction(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 时,我们将使用 self.browse() 调用来包装我们的 id(s)

@oemeth(browse=True)
def myaction(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 常量。

一些经验之谈

不要在 on_change 方法中使用 single(这要求始终恰好有一个 id)。当然,大多数情况下你只会得到一个 id,但如果你在一个尚未提交的记录上调用它,你将得到零个 id,这将引发异常。未来,single 模式可能会支持零个 id 的情况。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

openerp-sane-0.2.1.tar.gz (15.2 kB 查看散列)

上传时间

由以下支持: