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
55 lines
1.6 KiB
Python
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()
|