[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ Better formatting of large decimals.

Charlie Clark cvs-admin at zope.org
Mon Apr 9 16:30:45 UTC 2012


Log message for revision 125119:
  Better formatting of large decimals.

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_utils.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/utils.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_utils.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_utils.py	2012-04-09 16:16:46 UTC (rev 125118)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_utils.py	2012-04-09 16:30:40 UTC (rev 125119)
@@ -27,7 +27,7 @@
 
     MULTIPARAGRAPH_DESCRIPTION = \
         '''Description: this description spans multiple lines.
-        
+
         It includes a second paragraph'''
 
     TEST_BODY = '''Body goes here, and can span multiple
@@ -349,6 +349,19 @@
                         , 'Foo: foo\r\nBar: bar\r\n  \r\n  with multiline' )
 
 
+    def test_thousand_commas_integer(self):
+        from Products.CMFDefault.utils import thousands_commas as FUT
+        self.assertEqual(FUT(1), '1')
+        self.assertEqual(FUT(10), '10')
+        self.assertEqual(FUT(100), '100')
+        self.assertEqual(FUT(1000), '1,000')
+        self.assertEqual(FUT(1000000), ('1,000,000'))
+
+    def test_thousand_commas_string(self):
+        from Products.CMFDefault.utils import thousands_commas as FUT
+        self.assertRaises(ValueError, FUT, "a")
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(DefaultUtilsTests),

Modified: Products.CMFDefault/trunk/Products/CMFDefault/utils.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/utils.py	2012-04-09 16:16:46 UTC (rev 125118)
+++ Products.CMFDefault/trunk/Products/CMFDefault/utils.py	2012-04-09 16:30:40 UTC (rev 125119)
@@ -16,7 +16,9 @@
 import os
 import re
 import rfc822
+import sys
 import StringIO
+from warnings import warn
 from email.Header import make_header
 from email.MIMEText import MIMEText
 from sgmllib import SGMLParser
@@ -547,3 +549,18 @@
 
 security.declarePublic('Message')
 Message = _ = MessageFactory('cmf_default')
+
+security.declarePublic("thousands_commas")
+def thousands_commas(value):
+    """Format an integer with commas as thousand separator"""
+    i = int(value)
+    if sys.version_info[0] >  2 \
+       or (sys.version_info[0] == 2 and sys.version_info[1] > 6):
+        warn("On Python 2.7 and higher Use {:,}.formatting",
+             DeprecationWarning,
+             stacklevel=2)
+        return "{:,}".format(value)
+    l = list(str(i))
+    for idx in range(len(l) -3, 0, -3):
+        l.insert(idx, ",")
+    return "".join(l)



More information about the checkins mailing list