/usr/lib/python2.7/dist-packages/trytond/model/fields/numeric.py is in tryton-server 3.4.0-3+deb8u3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from decimal import Decimal
from sql import Query, Expression, Cast, Literal, Select, CombiningQuery
from ... import backend
from .field import SQLType
from .float import Float
class Numeric(Float):
'''
Define a numeric field (``decimal``).
'''
_type = 'numeric'
@staticmethod
def sql_format(value):
if isinstance(value, (Query, Expression)):
return value
if value is None:
return None
if isinstance(value, (int, long)):
value = Decimal(str(value))
assert isinstance(value, Decimal)
return value
def sql_type(self):
db_type = backend.name()
if db_type == 'mysql':
return SQLType('DECIMAL', 'DECIMAL(65, 30)')
return SQLType('NUMERIC', 'NUMERIC')
def sql_column(self, table):
column = super(Numeric, self).sql_column(table)
db_type = backend.name()
if db_type == 'sqlite':
# Must be casted as Decimal is stored as bytes
column = Cast(column, self.sql_type().base)
return column
def _domain_value(self, operator, value):
value = super(Numeric, self)._domain_value(operator, value)
db_type = backend.name()
if db_type == 'sqlite':
if isinstance(value, (Select, CombiningQuery)):
return value
# Must be casted as Decimal is adapted to bytes
type_ = self.sql_type().base
if operator in ('in', 'not in'):
return [Cast(Literal(v), type_) for v in value]
elif value is not None:
return Cast(Literal(value), type_)
return value
|