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/

Attachment: pgp8prPz5l7JP.pgp
Description: PGP signature

Reply via email to