qdp (OpenERP) has proposed merging
lp:~openerp-dev/openobject-server/trunk-python-syntax-for-widget-options-qdp
into lp:openobject-server.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-python-syntax-for-widget-options-qdp/+merge/128734
[IMP] osv/orm.py: evaluate in python the 'options' attribute of a field in an
xml view, before enclosing it in json.
This allow to use python instead of json syntax in the definition of the
options of a widget, which is a much more consistent behavior among the whole
ERP (`True´ instead of `true´, possibility to use simple quotes...)
--
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-python-syntax-for-widget-options-qdp/+merge/128734
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-server/trunk-python-syntax-for-widget-options-qdp.
=== modified file 'openerp/addons/base/res/res_bank_view.xml'
--- openerp/addons/base/res/res_bank_view.xml 2012-09-25 09:39:15 +0000
+++ openerp/addons/base/res/res_bank_view.xml 2012-10-09 14:48:21 +0000
@@ -106,8 +106,8 @@
<field name="zip" class="oe_inline" placeholder="ZIP"/>
<field name="city" class="oe_inline" placeholder="City"/>
</div>
- <field name="state_id" placeholder="State" options='{"no_open": true}'/>
- <field name="country_id" placeholder="Country" options='{"no_open": true}'/>
+ <field name="state_id" placeholder="State" options='{"no_open": True}'/>
+ <field name="country_id" placeholder="Country" options='{"no_open": True}'/>
</div>
</group>
<group name="bank" string="Information About the Bank">
=== modified file 'openerp/addons/base/res/res_company_view.xml'
--- openerp/addons/base/res/res_company_view.xml 2012-09-13 12:20:11 +0000
+++ openerp/addons/base/res/res_company_view.xml 2012-10-09 14:48:21 +0000
@@ -46,10 +46,10 @@
<field name="street2"/>
<div>
<field name="city" placeholder="City" style="width: 40%%"/>
- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 24%%" options='{"no_open": true}'/>
+ <field name="state_id" class="oe_no_button" placeholder="State" style="width: 24%%" options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" style="width: 34%%"/>
</div>
- <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": true}' on_change="on_change_country(country_id)"/>
+ <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}' on_change="on_change_country(country_id)"/>
</div>
<label for="rml_header1"/>
<div>
=== modified file 'openerp/addons/base/res/res_country_view.xml'
--- openerp/addons/base/res/res_country_view.xml 2012-08-20 06:30:58 +0000
+++ openerp/addons/base/res/res_country_view.xml 2012-10-09 14:48:21 +0000
@@ -73,7 +73,7 @@
<group>
<field name="name"/>
<field name="code"/>
- <field name="country_id" options='{"no_open": true}'/>
+ <field name="country_id" options='{"no_open": True}'/>
</group>
</form>
</field>
=== modified file 'openerp/addons/base/res/res_partner_view.xml'
--- openerp/addons/base/res/res_partner_view.xml 2012-09-28 05:05:41 +0000
+++ openerp/addons/base/res/res_partner_view.xml 2012-10-09 14:48:21 +0000
@@ -161,10 +161,10 @@
<field name="street2"/>
<div class="address_format">
<field name="city" placeholder="City" style="width: 40%%"/>
- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": true}'/>
+ <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" style="width: 20%%"/>
</div>
- <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": true}'/>
+ <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}'/>
</div>
<field name="website" widget="url" placeholder="e.g. www.openerp.com"/>
</group>
@@ -177,7 +177,7 @@
<field name="email" widget="email"/>
<field name="title" domain="[('domain', '=', 'contact')]"
groups="base.group_no_one"
- options='{"no_open": true}' attrs="{'invisible': [('is_company','=', True)]}" />
+ options='{"no_open": True}' attrs="{'invisible': [('is_company','=', True)]}" />
</group>
</group>
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py 2012-10-05 12:48:45 +0000
+++ openerp/osv/orm.py 2012-10-09 14:48:21 +0000
@@ -60,7 +60,7 @@
import openerp.netsvc as netsvc
import openerp.tools as tools
from openerp.tools.config import config
-from openerp.tools.safe_eval import safe_eval as eval
+from openerp.tools.safe_eval import const_eval, safe_eval as eval
from openerp.tools.translate import _
from openerp import SUPERUSER_ID
from query import Query
@@ -1732,7 +1732,11 @@
field = model_fields.get(node.get('name'))
if field:
transfer_field_to_modifiers(field, modifiers)
-
+ if node.get('options'):
+ try:
+ node.set('options', simplejson.dumps(const_eval(node.get('options'))))
+ except Exception, msg:
+ raise except_orm('Invalide Python code in %s'%(node.get('options')), msg[0])
elif node.tag in ('form', 'tree'):
result = self.view_header_get(cr, user, False, node.tag, context)
=== modified file 'openerp/tools/safe_eval.py'
--- openerp/tools/safe_eval.py 2012-06-05 15:26:30 +0000
+++ openerp/tools/safe_eval.py 2012-10-09 14:48:21 +0000
@@ -46,7 +46,7 @@
_CONST_OPCODES = set(opmap[x] for x in [
'POP_TOP', 'ROT_TWO', 'ROT_THREE', 'ROT_FOUR', 'DUP_TOP', 'DUP_TOPX',
'POP_BLOCK','SETUP_LOOP', 'BUILD_LIST', 'BUILD_MAP', 'BUILD_TUPLE',
- 'LOAD_CONST', 'RETURN_VALUE', 'STORE_SUBSCR'] if x in opmap)
+ 'LOAD_CONST', 'RETURN_VALUE', 'STORE_SUBSCR', 'STORE_MAP', 'LOAD_NAME'] if x in opmap)
_EXPR_OPCODES = _CONST_OPCODES.union(set(opmap[x] for x in [
'UNARY_POSITIVE', 'UNARY_NEGATIVE', 'UNARY_NOT',
_______________________________________________
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