Author: garcia_marc
Date: 2009-07-01 18:10:57 -0500 (Wed, 01 Jul 2009)
New Revision: 11147

Added:
   django/branches/soc2009/i18n-improvements/django/utils/numberformat.py
Modified:
   
django/branches/soc2009/i18n-improvements/django/contrib/admin/templatetags/admin_list.py
   
django/branches/soc2009/i18n-improvements/django/contrib/databrowse/datastructures.py
   django/branches/soc2009/i18n-improvements/django/utils/formats.py
Log:
[soc2009/i18n] implemented more efficient way to get formats

Modified: 
django/branches/soc2009/i18n-improvements/django/contrib/admin/templatetags/admin_list.py
===================================================================
--- 
django/branches/soc2009/i18n-improvements/django/contrib/admin/templatetags/admin_list.py
   2009-07-01 22:27:37 UTC (rev 11146)
+++ 
django/branches/soc2009/i18n-improvements/django/contrib/admin/templatetags/admin_list.py
   2009-07-01 23:10:57 UTC (rev 11147)
@@ -3,7 +3,7 @@
 from django.contrib.admin.views.main import ORDER_VAR, ORDER_TYPE_VAR, 
PAGE_VAR, SEARCH_VAR
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
-from django.utils import dateformat
+from django.utils import formats
 from django.utils.html import escape, conditional_escape
 from django.utils.text import capfirst
 from django.utils.safestring import mark_safe
@@ -185,15 +185,12 @@
             # Dates and times are special: They're formatted in a certain way.
             elif isinstance(f, models.DateField) or isinstance(f, 
models.TimeField):
                 if field_val:
-                    date_format = getformat('DATE_FORMAT')
-                    datetime_format = getformat('DATETIME_FORMAT')
-                    time_format = getformat('TIME_FORMAT')
                     if isinstance(f, models.DateTimeField):
-                        result_repr = capfirst(dateformat.format(field_val, 
datetime_format))
+                        result_repr = 
capfirst(formats.date_and_time_format(field_val, 'DATETIME_FORMAT'))
                     elif isinstance(f, models.TimeField):
-                        result_repr = 
capfirst(dateformat.time_format(field_val, time_format))
+                        result_repr = 
capfirst(formats.date_and_time_format(field_val, 'TIME_FORMAT'))
                     else:
-                        result_repr = capfirst(dateformat.format(field_val, 
date_format))
+                        result_repr = capfirst(formats.format(field_val, 
'DATE_FORMAT'))
                 else:
                     result_repr = EMPTY_CHANGELIST_VALUE
                 row_class = ' class="nowrap"'
@@ -266,8 +263,6 @@
         year_lookup = cl.params.get(year_field)
         month_lookup = cl.params.get(month_field)
         day_lookup = cl.params.get(day_field)
-        year_month_format = getformat('YEAR_MONTH_FORMAT')
-        month_day_format = getformat('MONTH_DAY_FORMAT')
 
         link = lambda d: mark_safe(cl.get_query_string(d, [field_generic]))
 
@@ -277,9 +272,9 @@
                 'show': True,
                 'back': {
                     'link': link({year_field: year_lookup, month_field: 
month_lookup}),
-                    'title': dateformat.format(day, year_month_format)
+                    'title': formats.date_and_time_format(day, 
'YEAR_MONTH_FORMAT')
                 },
-                'choices': [{'title': dateformat.format(day, 
month_day_format)}]
+                'choices': [{'title': formats.date_and_time_format(day, 
'MONTH_DAY_FORMAT')}]
             }
         elif year_lookup and month_lookup:
             days = cl.query_set.filter(**{year_field: year_lookup, 
month_field: month_lookup}).dates(field_name, 'day')
@@ -291,7 +286,7 @@
                 },
                 'choices': [{
                     'link': link({year_field: year_lookup, month_field: 
month_lookup, day_field: day.day}),
-                    'title': dateformat.format(day, month_day_format)
+                    'title': formats.date_and_time_format(day, 
'MONTH_DAY_FORMAT')
                 } for day in days]
             }
         elif year_lookup:
@@ -304,7 +299,7 @@
                 },
                 'choices': [{
                     'link': link({year_field: year_lookup, month_field: 
month.month}),
-                    'title': dateformat.format(month, year_month_format)
+                    'title': formats.date_and_time_format(month, 
'YEAR_MONTH_FORMAT')
                 } for month in months]
             }
         else:

Modified: 
django/branches/soc2009/i18n-improvements/django/contrib/databrowse/datastructures.py
===================================================================
--- 
django/branches/soc2009/i18n-improvements/django/contrib/databrowse/datastructures.py
       2009-07-01 22:27:37 UTC (rev 11146)
+++ 
django/branches/soc2009/i18n-improvements/django/contrib/databrowse/datastructures.py
       2009-07-01 23:10:57 UTC (rev 11147)
@@ -4,7 +4,7 @@
 """
 
 from django.db import models
-from django.utils import dateformat
+from django.utils import formats
 from django.utils.text import capfirst
 from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
 from django.utils.safestring import mark_safe
@@ -155,15 +155,12 @@
             objs = dict(self.field.choices).get(self.raw_value, EMPTY_VALUE)
         elif isinstance(self.field, models.DateField) or 
isinstance(self.field, models.TimeField):
             if self.raw_value:
-                date_format = getformat('DATE_FORMAT')
-                datetime_format = getformat('DATETIME_FORMAT')
-                time_format = getformat('TIME_FORMAT')
                 if isinstance(self.field, models.DateTimeField):
-                    objs = capfirst(dateformat.format(self.raw_value, 
datetime_format))
+                    objs = 
capfirst(formats.date_and_time_format(self.raw_value, 'DATETIME_FORMAT'))
                 elif isinstance(self.field, models.TimeField):
-                    objs = capfirst(dateformat.time_format(self.raw_value, 
time_format))
+                    objs = 
capfirst(formats.date_and_time_format(self.raw_value, 'TIME_FORMAT'))
                 else:
-                    objs = capfirst(dateformat.format(self.raw_value, 
date_format))
+                    objs = 
capfirst(formats.date_and_time_format(self.raw_value, 'DATE_FORMAT'))
             else:
                 objs = EMPTY_VALUE
         elif isinstance(self.field, models.BooleanField) or 
isinstance(self.field, models.NullBooleanField):

Modified: django/branches/soc2009/i18n-improvements/django/utils/formats.py
===================================================================
--- django/branches/soc2009/i18n-improvements/django/utils/formats.py   
2009-07-01 22:27:37 UTC (rev 11146)
+++ django/branches/soc2009/i18n-improvements/django/utils/formats.py   
2009-07-01 23:10:57 UTC (rev 11147)
@@ -38,3 +38,29 @@
 else:
     getformat = getformat_null
 
+def date_and_time_format(value, format):
+    import dateformat
+    return dateformat.format(value, getformat('DATE_FORMAT'))
+
+def date_format(value):
+    import dateformat
+    return dateformat.format(value, getformat('DATE_FORMAT'))
+
+def datetime_format(value):
+    import dateformat
+    return dateformat.format(value, getformat('DATE_FORMAT'))
+
+def time_format(value):
+    import dateformat
+    return dateformat.time_format(value, getformat('TIME_FORMAT'))
+
+def number_format(value):
+    import numberformat
+    return numberformat.format(
+        value,
+        getformat('DECIMAL_SEPARATOR'),
+        2, # TODO: decide how to set decimal positions later
+        3, # TODO: get it from formats
+        getformat('THOUSAND_SEPARATOR'),
+    )
+

Added: django/branches/soc2009/i18n-improvements/django/utils/numberformat.py
===================================================================
--- django/branches/soc2009/i18n-improvements/django/utils/numberformat.py      
                        (rev 0)
+++ django/branches/soc2009/i18n-improvements/django/utils/numberformat.py      
2009-07-01 23:10:57 UTC (rev 11147)
@@ -0,0 +1,34 @@
+def format(number, decimal_sep, decimal_pos, groupping=0, thousand_sep=''):
+    """
+    """
+    # sign
+    if number < 0:
+        sign = '-'
+    else:
+        sign = ''
+    # decimal part
+    str_number = str(abs(number))
+    if '.' in str_number:
+        int_part, dec_part = str_number.split('.')
+        dec_part = dec_part[:decimal_pos]
+    else:
+        int_part, dec_part = str_number, ''
+    dec_part = dec_part + ('0' * (decimal_pos - len(dec_part)))
+    if dec_part: dec_part = decimal_sep + dec_part
+    # groupping
+    if groupping:
+        int_part_gd = ''
+        for cnt, digit in enumerate(int_part[::-1]):
+            if cnt and not cnt % groupping:
+                int_part_gd += thousand_sep
+            int_part_gd += digit
+        int_part = int_part_gd[::-1]
+
+
+    return sign + int_part + dec_part
+
+if __name__ == '__main__':
+    import decimal
+    print format_number(-1000000, ',', 4, 3, '.')
+    print format_number(-100.100, ',', 4, 3, '.')
+    print format_number(decimal.Decimal('1000.100'), ',', 4)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to