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
-~----------~----~----~----~------~----~------~--~---