diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 704488f6938..285551cb3c9 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -44,6 +44,7 @@ class ir_attachment(osv.osv): The default implementation is the file:dirname location that stores files on the local filesystem using name based on their sha1 hash """ + _order = 'id desc' def _name_get_resname(self, cr, uid, ids, object, method, context): data = {} for attachment in self.browse(cr, uid, ids, context=context): diff --git a/openerp/import_xml.rng b/openerp/import_xml.rng index d4cd358ae89..e694e6d64b8 100644 --- a/openerp/import_xml.rng +++ b/openerp/import_xml.rng @@ -167,6 +167,10 @@ + + + + diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index 3334649eec0..a316dc28a9b 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -175,6 +175,13 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None): if t == 'html': return _process("".join([etree.tostring(n, encoding='utf-8') for n in node]), idref) + if node.get('file'): + import openerp.tools + import base64 + fp = openerp.tools.file_open(node.get('file')) + result = base64.b64encode(fp.read()) + return result + if t == 'file': from ..modules import module path = node.text.strip() @@ -241,7 +248,9 @@ class xml_import(object): return val.lower() not in ('0', 'false', 'off') def isnoupdate(self, data_node=None): - return self.noupdate or (len(data_node) and self.nodeattr2bool(data_node, 'noupdate', False)) + if data_node and data_node.get('noupdate'): + return len(data_node) and self.nodeattr2bool(data_node, 'noupdate', False) + return self.noupdate def get_context(self, data_node, node, eval_dict): data_node_context = (len(data_node) and data_node.get('context','').encode('utf8'))