Files
tryton/trytond/ir/ui/icon.py
T
Nicolas Évrard 356fd6e9e7 Open view and icon files in binary mode
Since the support of python3 has been added file_open will return unicode
object when read in normal mode but icon files has to be considered as bytes
and lxml.etree.fromstring expect also bytes when there is an encoding
declaration (and not unicode).

issue5354
review17081002
2016-02-29 13:03:57 +01:00

55 lines
1.6 KiB
Python

# This file is part of Tryton. The COPYRIGHT file at the top level of this
# repository contains the full copyright notices and license terms.
import os
from trytond.model import ModelView, ModelSQL, fields
from trytond.tools import file_open
from trytond.transaction import Transaction
from trytond.rpc import RPC
__all__ = [
'Icon',
]
class Icon(ModelSQL, ModelView):
'Icon'
__name__ = 'ir.ui.icon'
name = fields.Char('Name', required=True, select=True)
module = fields.Char('Module', readonly=True, required=True)
path = fields.Char('SVG Path', readonly=True, required=True)
icon = fields.Function(fields.Char('Icon', depends=['path']), 'get_icon')
sequence = fields.Integer('Sequence', required=True)
@classmethod
def __setup__(cls):
super(Icon, cls).__setup__()
cls._order.insert(0, ('sequence', 'ASC'))
cls.__rpc__.update({
'list_icons': RPC(),
})
@staticmethod
def default_module():
return Transaction().context.get('module') or ''
@staticmethod
def default_sequence():
return 10
@classmethod
def list_icons(cls):
icons = {}
for icon in cls.browse(cls.search([],
order=[('sequence', 'ASC'), ('id', 'ASC')])):
if icon.name not in icons:
icons[icon.name] = icon.id
return sorted((icon_id, name) for name, icon_id in icons.iteritems())
def get_icon(self, name):
path = os.path.join(self.module, self.path.replace('/', os.sep))
with file_open(path, subdir='modules', mode='rb') as fp:
return fp.read()