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'))