Add DecimalNull as tools
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
# 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 functools import total_ordering
|
||||
|
||||
from simpleeval import simple_eval
|
||||
|
||||
@@ -11,35 +10,13 @@ from trytond.model import (
|
||||
sequence_ordered)
|
||||
from trytond.modules.product import round_price
|
||||
from trytond.pool import Pool
|
||||
from trytond.tools import decistmt
|
||||
from trytond.tools.decimal_ import DecimalNull as Null
|
||||
from trytond.tools.decimal_ import decistmt
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
from .exceptions import FormulaError
|
||||
|
||||
|
||||
@total_ordering
|
||||
class Null(Decimal):
|
||||
def __eq__(self, other):
|
||||
if isinstance(other, Null) or other is None:
|
||||
return True
|
||||
return False
|
||||
|
||||
def __lt__(self, other):
|
||||
return 0 < other
|
||||
|
||||
|
||||
def _return_self(self, *args, **kwargs):
|
||||
return self
|
||||
|
||||
|
||||
_OPERATORS = (
|
||||
'add sub mul matmul truediv floordiv mod divmod pow lshift rshift and xor '
|
||||
'or'.split())
|
||||
for op in _OPERATORS:
|
||||
setattr(Null, '__%s__' % op, _return_self)
|
||||
setattr(Null, '__r%s__' % op, _return_self)
|
||||
|
||||
|
||||
class PriceList(DeactivableMixin, ModelSQL, ModelView):
|
||||
__name__ = 'product.price_list'
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
* Add DecimalNull as tools
|
||||
* Add chat backend
|
||||
* Transaction.check_warnings is now a directory mapping the key to the warnings
|
||||
* Store target of field as relation
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
.. _ref-tools-decimal:
|
||||
.. module:: trytond.tools.decimal_
|
||||
|
||||
decimal_
|
||||
========
|
||||
|
||||
.. function:: decistmt(string)
|
||||
|
||||
Substitute Decimals for floats and integers in the string statements.
|
||||
|
||||
.. class:: DecimalNull
|
||||
|
||||
A Decimal that behaves like the SQL ``NULL``.
|
||||
@@ -11,6 +11,7 @@ Tools API reference.
|
||||
|
||||
barcode
|
||||
chart
|
||||
decimal
|
||||
email
|
||||
immutabledict
|
||||
logging
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# 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 functools import total_ordering
|
||||
from io import BytesIO
|
||||
from tokenize import NAME, NUMBER, OP, STRING, tokenize, untokenize
|
||||
|
||||
@@ -45,3 +48,26 @@ def decistmt(s):
|
||||
else:
|
||||
result.append((toknum, tokval))
|
||||
return untokenize(result).decode('utf-8')
|
||||
|
||||
|
||||
@total_ordering
|
||||
class DecimalNull(Decimal):
|
||||
def __eq__(self, other):
|
||||
if isinstance(other, DecimalNull) or other is None:
|
||||
return True
|
||||
return False
|
||||
|
||||
def __lt__(self, other):
|
||||
return 0 < other
|
||||
|
||||
|
||||
def _return_self(self, *args, **kwargs):
|
||||
return self
|
||||
|
||||
|
||||
_OPERATORS = (
|
||||
'add sub mul matmul truediv floordiv mod divmod pow lshift rshift and xor '
|
||||
'or'.split())
|
||||
for op in _OPERATORS:
|
||||
setattr(DecimalNull, '__%s__' % op, _return_self)
|
||||
setattr(DecimalNull, '__r%s__' % op, _return_self)
|
||||
|
||||
Reference in New Issue
Block a user