odoo model import data ignore error

ODOO模块导入数据忽略错误
经常遇到大量的数据导入,不仅耗时很长,如果其中有一条数据有异常产生错误,就会导致整个过程回滚,这是非常悲剧的,其中相关源码如下:

明白核心代码处理逻辑后,就可以在外层拦截并过滤错误数据继续提交干净数据以实现自动纠错导入,实现源码如下:

odoo notify and warning client action

odoo后台接口如果出现错误可以简单抛出一个UserError异常给前端进行处理
但是有些时候可能只是一个通知或者警告给用户,不需要错误这么重的模态强交互,也不用影响主流程

从odoo8的addons/web/static/src/js/chrome.js源码中可以发现这个功能曾经拥有

本次以notify通知为例,其对应到odoo9之后的移植代码为:

相对应后台调用统一封装方法:

 

odoo res model document multi download

odoo表单相关的附件文档如果过多,逐个下载到本地也是一种负担,比较好的方式是提供一种打包下载的可选功能,既可以提高操作效率也可以减少网络下载流量

打包下载路径举例:
http://renjie.me/web/binary/download_attachment?model=project.task&id=1983

python decompress http response gzip and deflate Content-Encoding

deflate与gzip解压的方法几乎相同,源码如下:

 

odoo pivot graph view group by date format and order by date desc

分组日期格式自定义

排序日期默认倒序

odoo disabled website homepage

odoo有些模块包含website功能,这就依赖了website这个重量级模块
很多时候仅仅想用其核心功能,并不想因此造成首页变成企业网站

odoo muilt domain dbfilter many to one config and code

odoo支持dbfilter配置用于实现多域名对应多账套,dbfilter是一个python标准正则字符串,并支持特殊的%h、%d这两个动态参数

根据源代码剖析(odoo8、odoo9)
openerp/http.py

由此可见,绝大部分有规律的映射需求都可以得到满足。惟有那些情况特殊,完全没有规则可言的:比如SEO需要、历史数据库命名混乱、甚至多个一级域名只对一个数据库的需求就悲剧了

这里举一个理想的openerp-server.conf扩展配置特例

首先新增支持%m特别参数,用来开启域名数据库映射复杂模式
其次新增支持dbfilter_前缀的域名映射独立配置指定数据库名称(www-zhunlian-net、www-higk-com)
最后迫不得已新增插入两行精炼的源代码

注:一个域名必备的.号在正则表达式领域可用于匹配任意字符,所以域名全称作为正则也可以根据需要匹配出一组数据库列表,如域名renjie.me可同时匹配出数据库名为renjie.me、renjie-me、renjie@me等等相似名称的数据库

python ldap userPassword salt sha md5 encrypt

odoo自带的auth_ldap模块虽然实现了ldap统一账户的验证,但如果用户一旦修改密码就变成同名的本地用户。这是因为odoo默认先验证本地res.users信息,如果没有记录,或者有记录但密码字段为空才会去ldap服务器验证

根据其原理,可以在修改密码的时候对接上ldap的密码信息就完美了,但用modify指令写入的userPassword值是原文存储,即明文直接写入在服务器也是明文,这就需要在请求端预先加密成ldap标准的密文格式

网上看到有很多php的实现都是要写点代码什么的,照葫芦折腾几下才发现python的passlib库居然有现成拿来即用的函数

以此类推

其中ldap_bcrypt,ldap_bsdi_crypt,ldap_des_crypt,ldap_hex_md5,ldap_hex_sha1,ldap_md5,ldap_md5_crypt,ldap_pbkdf2_sha1,ldap_pbkdf2_sha256,ldap_pbkdf2_sha512,ldap_plaintext,ldap_salted_md5,ldap_salted_sha1,ldap_sha1,ldap_sha1_crypt,ldap_sha256_crypt,ldap_sha512_crypt等都是ldap加密相关的兄弟函数,可谓是应有尽有非常丰富,看来在odoo端直接集成phpLDAPadmin里各种类型的加密密码更新都是易事了

odoo addons xml develop debug auto update

odoo以开发者模式运行的话,能自动检测所有的addons目录的代码变动情况自动进行reload
这个机制对于python代码来说是够用的,但是对csv安全规则、xml数据及视图模版来说还需要更新模块才能使其生效

今天由于逐个测试安全规则条目,不断的手工更新模块不胜其烦,只好深入研究一下

odoo9开始已经将开发者模式依赖的pyinotify替换为watchdog,可能是后者的应用范围更广把,不仅提供python库,还附带shell工具

那就学习下这个叫watchmedo的命令行工具吧

看到auto-restart参数后真是让人眼前一亮,根据提示继续学习二级参数

真是太强大了,本以为还要写点小代码什么的,没想到几个选项就可以灵活组合出一个小型的监控工具

-R是目录递归监控
-p是文件模式匹配,主要是排除前端资源和pyc
-d是指定监控目录
–是watchmedo与odoo各自的命令行参数分割线

至此odoo的模块开发效率又提高了一个层次:)

centos odoo decoder jpeg not available

云服务器上传jpg图片提示IOError错误

初步判断是python pil库依赖的底层jpeg lib问题
但是本机正常无法重现,于是检查环境

对比了下发现服务器环境没有libjpeg-turbo-devel.x86_64立马补装一个,重启odoo服务错误依旧,于是继续更新Pillow库

重启odoo服务问题解决
最后回顾了下odoo requirements.txt:
odoo8 Pillow==2.5.1
odoo9 Pillow==2.7.0
其实所谓更新无非是重新安装编译一下Pillow库,没想到直接升级到3.1.0版本,希望没有什么副作用:)