mirror of
https://github.com/NaN-tic/trytond-patches.git
synced 2023-12-14 06:03:03 +01:00
Backed out changeset 9bd59fccddea
This commit is contained in:
parent
3528525041
commit
6a6352805e
1 changed files with 85 additions and 0 deletions
85
issue9801002_40001.diff
Normal file
85
issue9801002_40001.diff
Normal file
|
@ -0,0 +1,85 @@
|
|||
Index: trytond/trytond/tests/test_tools.py
|
||||
===================================================================
|
||||
|
||||
--- a/trytond/trytond/tests/test_tools.py
|
||||
+++ b/trytond/tests/test_tools.py
|
||||
@@ -3,12 +3,13 @@
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
|
||||
import unittest
|
||||
+import doctest
|
||||
import datetime
|
||||
import sql
|
||||
import sql.operators
|
||||
|
||||
from trytond.tools import reduce_ids, safe_eval, datetime_strftime, \
|
||||
- reduce_domain
|
||||
+ reduce_domain, decimal_
|
||||
|
||||
|
||||
class ToolsTestCase(unittest.TestCase):
|
||||
@@ -117,4 +118,5 @@
|
||||
suite = unittest.TestSuite()
|
||||
for testcase in (ToolsTestCase,):
|
||||
suite.addTests(func(testcase))
|
||||
+ suite.addTest(doctest.DocTestSuite(decimal_))
|
||||
return suite
|
||||
|
||||
Index: trytond/trytond/tools/__init__.py
|
||||
===================================================================
|
||||
|
||||
--- a/trytond/trytond/tools/__init__.py
|
||||
+++ b/trytond/trytond/tools/__init__.py
|
||||
@@ -2,6 +2,7 @@
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
from .misc import *
|
||||
from .datetime_strftime import *
|
||||
+from .decimal_ import *
|
||||
|
||||
|
||||
class ClassProperty(property):
|
||||
|
||||
Index: trytond/trytond/tools/decimal_.py
|
||||
===================================================================
|
||||
new file mode 100644
|
||||
|
||||
--- /dev/null
|
||||
+++ b/trytond/trytond/tools/decimal_.py
|
||||
@@ -0,0 +1,36 @@
|
||||
+# 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 tokenize
|
||||
+from io import StringIO
|
||||
+
|
||||
+# code snippet taken from http://docs.python.org/library/tokenize.html
|
||||
+
|
||||
+
|
||||
+def decistmt(s):
|
||||
+ """Substitute Decimals for floats in a string of statements.
|
||||
+
|
||||
+ >>> from decimal import Decimal
|
||||
+ >>> s = 'print +21.3e-5*-.1234/81.7'
|
||||
+ >>> decistmt(s)
|
||||
+ u"print +Decimal (u'21.3e-5')*-Decimal (u'.1234')/Decimal (u'81.7')"
|
||||
+
|
||||
+ >>> exec(s)
|
||||
+ -3.21716034272e-07
|
||||
+ >>> exec(decistmt(s))
|
||||
+ -3.217160342717258261933904529E-7
|
||||
+ """
|
||||
+ result = []
|
||||
+ # tokenize the string
|
||||
+ g = tokenize.generate_tokens(StringIO(s.decode('utf-8')).readline)
|
||||
+ for toknum, tokval, _, _, _ in g:
|
||||
+ # replace NUMBER tokens
|
||||
+ if toknum == tokenize.NUMBER and '.' in tokval:
|
||||
+ result.extend([
|
||||
+ (tokenize.NAME, 'Decimal'),
|
||||
+ (tokenize.OP, '('),
|
||||
+ (tokenize.STRING, repr(tokval)),
|
||||
+ (tokenize.OP, ')')
|
||||
+ ])
|
||||
+ else:
|
||||
+ result.append((toknum, tokval))
|
||||
+ return tokenize.untokenize(result)
|
||||
|
Loading…
Reference in a new issue