Please review this at http://codereview.appspot.com/4254057/
Affected files:
M CHANGELOG
M trytond/ir/attachment.py
M trytond/ir/attachment.xml
M trytond/webdav/webdav.py
Index: CHANGELOG
===================================================================
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Add type on ir.attachment
+* Rename datas into data on ir.attachment
* Add server-side icons
* Add support for file link to BinaryField
* Add model field access
Index: trytond/ir/attachment.py
===================================================================
--- a/trytond/ir/attachment.py
+++ b/trytond/ir/attachment.py
@@ -12,21 +12,29 @@
from trytond.config import CONFIG
from trytond.backend import TableHandler
from trytond.transaction import Transaction
+from trytond.pyson import Not, Equal, Eval
class Attachment(ModelSQL, ModelView):
"Attachment"
_name = 'ir.attachment'
_description = __doc__
- name = fields.Char('Attachment Name', required=True)
- datas = fields.Function(fields.Binary('Data', filename='name'),
- 'get_datas', setter='set_datas')
+ name = fields.Char('Name', required=True)
+ type = fields.Selection([
+ ('data', 'Data'),
+ ('link', 'Link'),
+ ], 'Type', required=True)
+ data = fields.Function(fields.Binary('Data', filename='name', states={
+ 'invisible': Not(Equal(Eval('type'), 'data')),
+ }, depends=['type']), 'get_data', setter='set_data')
description = fields.Text('Description')
resource = fields.Reference('Resource', selection='models_get',
select=1)
- link = fields.Char('Link')
+ link = fields.Char('Link', states={
+ 'invisible': Not(Equal(Eval('type'), 'link')),
+ }, depends=['type'])
digest = fields.Char('Digest', size=32)
collision = fields.Integer('Collision')
- datas_size = fields.Function(fields.Integer('Datas size'), 'get_datas')
+ data_size = fields.Function(fields.Integer('Datas size'), 'get_data')
def __init__(self):
super(Attachment, self).__init__()
@@ -36,9 +44,14 @@
]
def init(self, module_name):
+ cursor = Transaction().cursor
+ # Migration from 1.8 rename datas into data
+ table = TableHandler(cursor, self, module_name)
+ table.column_rename('datas', 'data')
+ table.column_rename('datas_size', 'data_size')
+
super(Attachment, self).init(module_name)
- cursor = Transaction().cursor
table = TableHandler(cursor, self, module_name)
# Migration from 1.4 res_model and res_id merged into resource
@@ -51,6 +64,9 @@
table.drop_column('res_model')
table.drop_column('res_id')
+ def default_type(self):
+ return 'data'
+
def default_resource(self):
return Transaction().context.get('resource')
@@ -65,12 +81,12 @@
res.append([model.model, model.name])
return res
- def get_datas(self, ids, name):
+ def get_data(self, ids, name):
res = {}
db_name = Transaction().cursor.dbname
for attachment in self.browse(ids):
value = False
- if name == 'datas_size':
+ if name == 'data_size':
value = 0
if attachment.digest:
filename = attachment.digest
@@ -78,7 +94,7 @@
filename = filename + '-' + str(attachment.collision)
filename = os.path.join(CONFIG['data_path'], db_name,
filename[0:2], filename[2:4], filename)
- if name == 'datas_size':
+ if name == 'data_size':
try:
statinfo = os.stat(filename)
value = statinfo.st_size
@@ -93,7 +109,7 @@
res[attachment.id] = value
return res
- def set_datas(self, ids, name, value):
+ def set_data(self, ids, name, value):
if value is False or value is None:
return
cursor = Transaction().cursor
@@ -179,4 +195,18 @@
self.check_access(res, mode='create')
return res
+ def view_header_get(self, value, view_type='form'):
+ ir_model_obj = self.pool.get('ir.model')
+ value = super(Attachment, self).view_header_get(value,
+ view_type=view_type)
+ resource = Transaction().context.get('resource')
+ if resource:
+ model_name, record_id = resource.split(',', 1)
+ ir_model_id, = ir_model_obj.search([('model', '=',
model_name)])
+ ir_model = ir_model_obj.browse(ir_model_id)
+ model_obj = self.pool.get(model_name)
+ record = model_obj.browse(int(record_id))
+ value = '%s - %s - %s' % (ir_model.name, record.rec_name,
value)
+ return value
+
Attachment()
Index: trytond/ir/attachment.xml
===================================================================
--- a/trytond/ir/attachment.xml
+++ b/trytond/ir/attachment.xml
@@ -12,14 +12,17 @@
<label name="resource"/>
<field name="resource"/>
<label name="name"/>
- <field name="name"/>
- <label name="datas"/>
- <field name="datas"/>
+ <group id="name_data" col="2" colspan="1">
+ <field name="name"/>
+ <field name="data" xexpand="0"/>
+ </group>
+ <label name="type"/>
+ <field name="type"/>
<label name="link"/>
<field name="link" widget="url"/>
<notebook colspan="2">
<page string="Preview" name="preview" col="1">
- <field name="datas" widget="image"/>
+ <field name="data" widget="image"/>
</page>
<page name="description" col="1">
<field name="description"/>
@@ -37,7 +40,7 @@
<tree string="Attachments" fill="1">
<field name="resource" select="1"/>
<field name="name" select="1"/>
- <field name="datas_size"/>
+ <field name="data_size"/>
</tree>
]]>
</field>
Index: trytond/webdav/webdav.py
===================================================================
--- a/trytond/webdav/webdav.py
+++ b/trytond/webdav/webdav.py
@@ -337,8 +337,8 @@
for attachment in attachments:
size = '0'
try:
- if attachment.datas_size:
- size = str(attachment.datas_size)
+ if attachment.data_size:
+ size = str(attachment.data_size)
except Exception:
pass
if attachment.id == object_id:
@@ -455,8 +455,8 @@
for attachment in attachments:
data = DAV_NotFound
try:
- if attachment.datas is not False:
- data = base64.decodestring(attachment.datas)
+ if attachment.data is not False:
+ data = base64.decodestring(attachment.data)
except Exception:
pass
if attachment.id == object_id:
@@ -496,7 +496,7 @@
try:
attachment_obj.create({
'name': name,
- 'datas': base64.encodestring(data or ''),
+ 'data': base64.encodestring(data or ''),
'name': name,
'resource': '%s,%s' % (object_name, object_id),
})
@@ -505,7 +505,7 @@
else:
try:
attachment_obj.write(object_id2, {
- 'datas': base64.encodestring(data or ''),
+ 'data': base64.encodestring(data or ''),
})
except Exception:
raise DAV_Forbidden
--
Cédric Krier
B2CK SPRL
Rue de Rotterdam, 4
4000 Liège
Belgium
Tel: +32 472 54 46 59
Email/Jabber: [email protected]
Website: http://www.b2ck.com/
pgp8prPz5l7JP.pgp
Description: PGP signature
