Changeset 7946
- Timestamp:
- 07/17/08 22:47:27 (2 months ago)
- Files:
-
- django/trunk/django/contrib/databrowse/plugins/calendars.py (modified) (2 diffs)
- django/trunk/django/core/serializers/base.py (modified) (2 diffs)
- django/trunk/django/core/serializers/json.py (modified) (3 diffs)
- django/trunk/django/core/validators.py (modified) (2 diffs)
- django/trunk/django/db/models/fields/__init__.py (modified) (5 diffs)
- django/trunk/django/db/models/manipulators.py (modified) (2 diffs)
- django/trunk/django/newforms/widgets.py (modified) (2 diffs)
- django/trunk/django/utils/datetime_safe.py (added)
- django/trunk/tests/regressiontests/datetime_safe (added)
- django/trunk/tests/regressiontests/datetime_safe/tests.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/contrib/databrowse/plugins/calendars.py
r7131 r7946 9 9 from django.utils.safestring import mark_safe 10 10 from django.views.generic import date_based 11 from django.utils import datetime_safe 11 12 12 13 class CalendarPlugin(DatabrowsePlugin): … … 34 35 def urls(self, plugin_name, easy_instance_field): 35 36 if isinstance(easy_instance_field.field, models.DateField): 37 d = easy_instance_field.raw_value 36 38 return [mark_safe(u'%s%s/%s/%s/%s/%s/' % ( 37 39 easy_instance_field.model.url(), 38 40 plugin_name, easy_instance_field.field.name, 39 easy_instance_field.raw_value.year,40 easy_instance_field.raw_value.strftime('%b').lower(),41 easy_instance_field.raw_value.day))]41 d.year, 42 datetime_safe.new_date(d).strftime('%b').lower(), 43 d.day))] 42 44 43 45 def model_view(self, request, model_databrowse, url): django/trunk/django/core/serializers/base.py
r7600 r7946 9 9 from django.db import models 10 10 from django.utils.encoding import smart_str, smart_unicode 11 from django.utils import datetime_safe 11 12 12 13 class SerializationError(Exception): … … 60 61 """ 61 62 if isinstance(field, models.DateTimeField): 62 value = getattr(obj, field.name).strftime("%Y-%m-%d %H:%M:%S") 63 d = datetime_safe.new_datetime(getattr(obj, field.name)) 64 value = d.strftime("%Y-%m-%d %H:%M:%S") 63 65 else: 64 66 value = field.flatten_data(follow=None, obj=obj).get(field.name, "") django/trunk/django/core/serializers/json.py
r7131 r7946 7 7 from django.core.serializers.python import Serializer as PythonSerializer 8 8 from django.core.serializers.python import Deserializer as PythonDeserializer 9 from django.utils import datetime_safe 9 10 try: 10 11 from cStringIO import StringIO … … 21 22 """ 22 23 internal_use_only = False 23 24 24 25 def end_serialization(self): 25 26 self.options.pop('stream', None) … … 52 53 def default(self, o): 53 54 if isinstance(o, datetime.datetime): 54 return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT)) 55 d = datetime_safe.new_datetime(o) 56 return d.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT)) 55 57 elif isinstance(o, datetime.date): 56 return o.strftime(self.DATE_FORMAT) 58 d = datetime_safe.new_date(o) 59 return d.strftime(self.DATE_FORMAT) 57 60 elif isinstance(o, datetime.time): 58 61 return o.strftime(self.TIME_FORMAT) django/trunk/django/core/validators.py
r7837 r7946 142 142 # produces much friendlier error messages. 143 143 year, month, day = map(int, date_string.split('-')) 144 # This check is needed because strftime is used when saving the date145 # value to the database, and strftime requires that the year be >=1900.146 if year < 1900:147 raise ValidationError, _('Year must be 1900 or later.')148 144 try: 149 145 date(year, month, day) … … 408 404 Usage: If you create an instance of the IsPowerOf validator: 409 405 v = IsAPowerOf(2) 410 406 411 407 The following calls will succeed: 412 v(4, None) 408 v(4, None) 413 409 v(8, None) 414 410 v(16, None) 415 411 416 412 But this call: 417 413 v(17, None) django/trunk/django/db/models/fields/__init__.py
r7906 r7946 24 24 from django.utils.encoding import smart_unicode, force_unicode, smart_str 25 25 from django.utils.maxlength import LegacyMaxlength 26 from django.utils import datetime_safe 26 27 27 28 class NOT_PROVIDED: … … 558 559 value = [smart_unicode(v) for v in value] 559 560 elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte') and hasattr(value, 'strftime'): 560 value = value.strftime('%Y-%m-%d')561 value = datetime_safe.new_date(value).strftime('%Y-%m-%d') 561 562 else: 562 563 value = smart_unicode(value) … … 590 591 if value is not None: 591 592 try: 592 value = value.strftime('%Y-%m-%d')593 value = datetime_safe.new_date(value).strftime('%Y-%m-%d') 593 594 except AttributeError: 594 595 # If value is already a string it won't have a strftime method, … … 602 603 def flatten_data(self, follow, obj=None): 603 604 val = self._get_val_from_obj(obj) 604 return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')} 605 if val is None: 606 data = '' 607 else: 608 data = datetime_safe.new_date(val).strftime("%Y-%m-%d") 609 return {self.attname: data} 605 610 606 611 def formfield(self, **kwargs): … … 669 674 val = self._get_val_from_obj(obj) 670 675 date_field, time_field = self.get_manipulator_field_names('') 671 return {date_field: (val is not None and val.strftime("%Y-%m-%d") or ''), 672 time_field: (val is not None and val.strftime("%H:%M:%S") or '')} 676 if val is None: 677 date_data = time_data = '' 678 else: 679 d = datetime_safe.new_datetime(val) 680 date_data = d.strftime('%Y-%m-%d') 681 time_data = d.strftime('%H:%M:%S') 682 return {date_field: date_data, time_field: time_data} 673 683 674 684 def formfield(self, **kwargs): django/trunk/django/db/models/manipulators.py
r6277 r7946 10 10 from django.utils.encoding import smart_str 11 11 from django.utils.translation import ugettext as _ 12 from django.utils import datetime_safe 12 13 13 14 def add_manipulators(sender): … … 333 334 else: 334 335 format_string = (lookup_type == 'date') and '%B %d, %Y' or '%B %Y' 336 date_val = datetime_safe.new_datetime(date_val) 335 337 raise validators.ValidationError, "Please enter a different %s. The one you entered is already being used for %s." % \ 336 338 (from_field.verbose_name, date_val.strftime(format_string)) django/trunk/django/newforms/widgets.py
r7693 r7946 16 16 from django.utils.encoding import StrAndUnicode, force_unicode 17 17 from django.utils.safestring import mark_safe 18 from django.utils import datetime_safe 18 19 from util import flatatt 19 20 … … 171 172 value = '' 172 173 elif hasattr(value, 'strftime'): 174 value = datetime_safe.new_datetime(value) 173 175 value = value.strftime(self.format) 174 176 return super(DateTimeInput, self).render(name, value, attrs)
