summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/utils/timezone.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/utils/timezone.py')
-rw-r--r--lib/python2.7/site-packages/django/utils/timezone.py317
1 files changed, 0 insertions, 317 deletions
diff --git a/lib/python2.7/site-packages/django/utils/timezone.py b/lib/python2.7/site-packages/django/utils/timezone.py
deleted file mode 100644
index 73749cf..0000000
--- a/lib/python2.7/site-packages/django/utils/timezone.py
+++ /dev/null
@@ -1,317 +0,0 @@
-"""
-Timezone-related classes and functions.
-
-This module uses pytz when it's available and fallbacks when it isn't.
-"""
-
-from datetime import datetime, timedelta, tzinfo
-from threading import local
-import sys
-import time as _time
-
-try:
- import pytz
-except ImportError:
- pytz = None
-
-from django.conf import settings
-from django.utils import six
-
-__all__ = [
- 'utc',
- 'get_default_timezone', 'get_default_timezone_name',
- 'get_current_timezone', 'get_current_timezone_name',
- 'activate', 'deactivate', 'override',
- 'localtime', 'now',
- 'is_aware', 'is_naive', 'make_aware', 'make_naive',
-]
-
-
-# UTC and local time zones
-
-ZERO = timedelta(0)
-
-class UTC(tzinfo):
- """
- UTC implementation taken from Python's docs.
-
- Used only when pytz isn't available.
- """
-
- def __repr__(self):
- return "<UTC>"
-
- def utcoffset(self, dt):
- return ZERO
-
- def tzname(self, dt):
- return "UTC"
-
- def dst(self, dt):
- return ZERO
-
-class ReferenceLocalTimezone(tzinfo):
- """
- Local time implementation taken from Python's docs.
-
- Used only when pytz isn't available, and most likely inaccurate. If you're
- having trouble with this class, don't waste your time, just install pytz.
-
- Kept identical to the reference version. Subclasses contain improvements.
- """
-
- def __init__(self):
- # This code is moved in __init__ to execute it as late as possible
- # See get_default_timezone().
- self.STDOFFSET = timedelta(seconds=-_time.timezone)
- if _time.daylight:
- self.DSTOFFSET = timedelta(seconds=-_time.altzone)
- else:
- self.DSTOFFSET = self.STDOFFSET
- self.DSTDIFF = self.DSTOFFSET - self.STDOFFSET
- tzinfo.__init__(self)
-
- def __repr__(self):
- return "<LocalTimezone>"
-
- def utcoffset(self, dt):
- if self._isdst(dt):
- return self.DSTOFFSET
- else:
- return self.STDOFFSET
-
- def dst(self, dt):
- if self._isdst(dt):
- return self.DSTDIFF
- else:
- return ZERO
-
- def tzname(self, dt):
- is_dst = False if dt is None else self._isdst(dt)
- return _time.tzname[is_dst]
-
- def _isdst(self, dt):
- tt = (dt.year, dt.month, dt.day,
- dt.hour, dt.minute, dt.second,
- dt.weekday(), 0, 0)
- stamp = _time.mktime(tt)
- tt = _time.localtime(stamp)
- return tt.tm_isdst > 0
-
-class LocalTimezone(ReferenceLocalTimezone):
- """
- Slightly improved local time implementation focusing on correctness.
-
- It still crashes on dates before 1970 or after 2038, but at least the
- error message is helpful.
- """
-
- def _isdst(self, dt):
- try:
- return super(LocalTimezone, self)._isdst(dt)
- except (OverflowError, ValueError) as exc:
- exc_type = type(exc)
- exc_value = exc_type(
- "Unsupported value: %r. You should install pytz." % dt)
- exc_value.__cause__ = exc
- six.reraise(exc_type, exc_value, sys.exc_info()[2])
-
-utc = pytz.utc if pytz else UTC()
-"""UTC time zone as a tzinfo instance."""
-
-# In order to avoid accessing the settings at compile time,
-# wrap the expression in a function and cache the result.
-_localtime = None
-
-def get_default_timezone():
- """
- Returns the default time zone as a tzinfo instance.
-
- This is the time zone defined by settings.TIME_ZONE.
-
- See also :func:`get_current_timezone`.
- """
- global _localtime
- if _localtime is None:
- if isinstance(settings.TIME_ZONE, six.string_types) and pytz is not None:
- _localtime = pytz.timezone(settings.TIME_ZONE)
- else:
- # This relies on os.environ['TZ'] being set to settings.TIME_ZONE.
- _localtime = LocalTimezone()
- return _localtime
-
-# This function exists for consistency with get_current_timezone_name
-def get_default_timezone_name():
- """
- Returns the name of the default time zone.
- """
- return _get_timezone_name(get_default_timezone())
-
-_active = local()
-
-def get_current_timezone():
- """
- Returns the currently active time zone as a tzinfo instance.
- """
- return getattr(_active, "value", get_default_timezone())
-
-def get_current_timezone_name():
- """
- Returns the name of the currently active time zone.
- """
- return _get_timezone_name(get_current_timezone())
-
-def _get_timezone_name(timezone):
- """
- Returns the name of ``timezone``.
- """
- try:
- # for pytz timezones
- return timezone.zone
- except AttributeError:
- # for regular tzinfo objects
- return timezone.tzname(None)
-
-# Timezone selection functions.
-
-# These functions don't change os.environ['TZ'] and call time.tzset()
-# because it isn't thread safe.
-
-def activate(timezone):
- """
- Sets the time zone for the current thread.
-
- The ``timezone`` argument must be an instance of a tzinfo subclass or a
- time zone name. If it is a time zone name, pytz is required.
- """
- if isinstance(timezone, tzinfo):
- _active.value = timezone
- elif isinstance(timezone, six.string_types) and pytz is not None:
- _active.value = pytz.timezone(timezone)
- else:
- raise ValueError("Invalid timezone: %r" % timezone)
-
-def deactivate():
- """
- Unsets the time zone for the current thread.
-
- Django will then use the time zone defined by settings.TIME_ZONE.
- """
- if hasattr(_active, "value"):
- del _active.value
-
-class override(object):
- """
- Temporarily set the time zone for the current thread.
-
- This is a context manager that uses ``~django.utils.timezone.activate()``
- to set the timezone on entry, and restores the previously active timezone
- on exit.
-
- The ``timezone`` argument must be an instance of a ``tzinfo`` subclass, a
- time zone name, or ``None``. If is it a time zone name, pytz is required.
- If it is ``None``, Django enables the default time zone.
- """
- def __init__(self, timezone):
- self.timezone = timezone
- self.old_timezone = getattr(_active, 'value', None)
-
- def __enter__(self):
- if self.timezone is None:
- deactivate()
- else:
- activate(self.timezone)
-
- def __exit__(self, exc_type, exc_value, traceback):
- if self.old_timezone is None:
- deactivate()
- else:
- _active.value = self.old_timezone
-
-
-# Templates
-
-def template_localtime(value, use_tz=None):
- """
- Checks if value is a datetime and converts it to local time if necessary.
-
- If use_tz is provided and is not None, that will force the value to
- be converted (or not), overriding the value of settings.USE_TZ.
-
- This function is designed for use by the template engine.
- """
- should_convert = (isinstance(value, datetime)
- and (settings.USE_TZ if use_tz is None else use_tz)
- and not is_naive(value)
- and getattr(value, 'convert_to_local_time', True))
- return localtime(value) if should_convert else value
-
-
-# Utilities
-
-def localtime(value, timezone=None):
- """
- Converts an aware datetime.datetime to local time.
-
- Local time is defined by the current time zone, unless another time zone
- is specified.
- """
- if timezone is None:
- timezone = get_current_timezone()
- value = value.astimezone(timezone)
- if hasattr(timezone, 'normalize'):
- # available for pytz time zones
- value = timezone.normalize(value)
- return value
-
-def now():
- """
- Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
- """
- if settings.USE_TZ:
- # timeit shows that datetime.now(tz=utc) is 24% slower
- return datetime.utcnow().replace(tzinfo=utc)
- else:
- return datetime.now()
-
-# By design, these four functions don't perform any checks on their arguments.
-# The caller should ensure that they don't receive an invalid value like None.
-
-def is_aware(value):
- """
- Determines if a given datetime.datetime is aware.
-
- The logic is described in Python's docs:
- http://docs.python.org/library/datetime.html#datetime.tzinfo
- """
- return value.tzinfo is not None and value.tzinfo.utcoffset(value) is not None
-
-def is_naive(value):
- """
- Determines if a given datetime.datetime is naive.
-
- The logic is described in Python's docs:
- http://docs.python.org/library/datetime.html#datetime.tzinfo
- """
- return value.tzinfo is None or value.tzinfo.utcoffset(value) is None
-
-def make_aware(value, timezone):
- """
- Makes a naive datetime.datetime in a given time zone aware.
- """
- if hasattr(timezone, 'localize'):
- # available for pytz time zones
- return timezone.localize(value, is_dst=None)
- else:
- # may be wrong around DST changes
- return value.replace(tzinfo=timezone)
-
-def make_naive(value, timezone):
- """
- Makes an aware datetime.datetime naive in a given time zone.
- """
- value = value.astimezone(timezone)
- if hasattr(timezone, 'normalize'):
- # available for pytz time zones
- value = timezone.normalize(value)
- return value.replace(tzinfo=None)