Replaced some smart_xxx by force_xxx equivalent
smart_str/smart_text should only be used when a potential lazy string should be preserved in the result of the function call.
This commit is contained in:
parent
36df198e4b
commit
ae88e73fa6
|
@ -7,7 +7,7 @@ from __future__ import unicode_literals
|
|||
from django.db import models
|
||||
from django.utils import formats
|
||||
from django.utils.text import capfirst
|
||||
from django.utils.encoding import smart_text, smart_str, iri_to_uri
|
||||
from django.utils.encoding import smart_text, force_str, iri_to_uri
|
||||
from django.db.models.query import QuerySet
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
|
@ -23,7 +23,7 @@ class EasyModel(object):
|
|||
self.verbose_name_plural = model._meta.verbose_name_plural
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<EasyModel for %s>' % self.model._meta.object_name)
|
||||
return force_str('<EasyModel for %s>' % self.model._meta.object_name)
|
||||
|
||||
def model_databrowse(self):
|
||||
"Returns the ModelDatabrowse class for this model."
|
||||
|
@ -62,7 +62,7 @@ class EasyField(object):
|
|||
self.model, self.field = easy_model, field
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
return force_str('<EasyField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
|
||||
def choices(self):
|
||||
for value, label in self.field.choices:
|
||||
|
@ -80,7 +80,7 @@ class EasyChoice(object):
|
|||
self.value, self.label = value, label
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
return force_str('<EasyChoice for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
|
||||
def url(self):
|
||||
return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, iri_to_uri(self.value))
|
||||
|
@ -91,7 +91,7 @@ class EasyInstance(object):
|
|||
self.model, self.instance = easy_model, instance
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
|
||||
return force_str('<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
|
||||
|
||||
def __str__(self):
|
||||
val = smart_text(self.instance)
|
||||
|
@ -135,7 +135,7 @@ class EasyInstanceField(object):
|
|||
self.raw_value = getattr(instance.instance, field.name)
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
return force_str('<EasyInstanceField for %s.%s>' % (self.model.model._meta.object_name, self.field.name))
|
||||
|
||||
def values(self):
|
||||
"""
|
||||
|
|
|
@ -6,7 +6,7 @@ from threading import local
|
|||
from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError
|
||||
|
||||
from django.utils import six
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
class BaseMemcachedCache(BaseCache):
|
||||
def __init__(self, server, params, library, value_not_found_exception):
|
||||
|
@ -53,7 +53,7 @@ class BaseMemcachedCache(BaseCache):
|
|||
|
||||
def make_key(self, key, version=None):
|
||||
# Python 2 memcache requires the key to be a byte string.
|
||||
return smart_str(super(BaseMemcachedCache, self).make_key(key, version))
|
||||
return force_str(super(BaseMemcachedCache, self).make_key(key, version))
|
||||
|
||||
def add(self, key, value, timeout=0, version=None):
|
||||
key = self.make_key(key, version=version)
|
||||
|
|
|
@ -8,7 +8,7 @@ from io import BytesIO
|
|||
from django.conf import settings
|
||||
from django.core.files.base import File
|
||||
from django.core.files import temp as tempfile
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
__all__ = ('UploadedFile', 'TemporaryUploadedFile', 'InMemoryUploadedFile',
|
||||
'SimpleUploadedFile')
|
||||
|
@ -30,7 +30,7 @@ class UploadedFile(File):
|
|||
self.charset = charset
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str("<%s: %s (%s)>" % (
|
||||
return force_str("<%s: %s (%s)>" % (
|
||||
self.__class__.__name__, self.name, self.content_type))
|
||||
|
||||
def _get_name(self):
|
||||
|
|
|
@ -9,7 +9,7 @@ from django.core import signals
|
|||
from django.core.handlers import base
|
||||
from django.core.urlresolvers import set_script_prefix
|
||||
from django.utils import datastructures
|
||||
from django.utils.encoding import force_text, smart_str, iri_to_uri
|
||||
from django.utils.encoding import force_str, force_text, iri_to_uri
|
||||
from django.utils.log import getLogger
|
||||
|
||||
logger = getLogger('django.request')
|
||||
|
@ -246,5 +246,5 @@ class WSGIHandler(base.BaseHandler):
|
|||
response_headers = [(str(k), str(v)) for k, v in response.items()]
|
||||
for c in response.cookies.values():
|
||||
response_headers.append((str('Set-Cookie'), str(c.output(header=''))))
|
||||
start_response(smart_str(status), response_headers)
|
||||
start_response(force_str(status), response_headers)
|
||||
return response
|
||||
|
|
|
@ -12,7 +12,7 @@ import traceback
|
|||
import django
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.management.color import color_style
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.six import StringIO
|
||||
|
||||
|
||||
|
@ -65,7 +65,7 @@ class OutputWrapper(object):
|
|||
msg += ending
|
||||
style_func = [f for f in (style_func, self.style_func, lambda x:x)
|
||||
if f is not None][0]
|
||||
self._out.write(smart_str(style_func(msg)))
|
||||
self._out.write(force_str(style_func(msg)))
|
||||
|
||||
|
||||
class BaseCommand(object):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import sys
|
||||
|
||||
from django.core.management.color import color_style
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.itercompat import is_iterable
|
||||
from django.utils import six
|
||||
|
||||
|
@ -13,7 +13,7 @@ class ModelErrorCollection:
|
|||
|
||||
def add(self, context, error):
|
||||
self.errors.append((context, error))
|
||||
self.outfile.write(self.style.ERROR(smart_str("%s: %s\n" % (context, error))))
|
||||
self.outfile.write(self.style.ERROR(force_str("%s: %s\n" % (context, error))))
|
||||
|
||||
def get_validation_errors(outfile, app=None):
|
||||
"""
|
||||
|
|
|
@ -14,7 +14,7 @@ from threading import local
|
|||
from django.http import Http404
|
||||
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
|
||||
from django.utils.datastructures import MultiValueDict
|
||||
from django.utils.encoding import iri_to_uri, force_text, smart_str
|
||||
from django.utils.encoding import force_str, force_text, iri_to_uri
|
||||
from django.utils.functional import memoize, lazy
|
||||
from django.utils.importlib import import_module
|
||||
from django.utils.module_loading import module_has_submodule
|
||||
|
@ -195,7 +195,7 @@ class RegexURLPattern(LocaleRegexProvider):
|
|||
self.name = name
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<%s %s %s>' % (self.__class__.__name__, self.name, self.regex.pattern))
|
||||
return force_str('<%s %s %s>' % (self.__class__.__name__, self.name, self.regex.pattern))
|
||||
|
||||
def add_prefix(self, prefix):
|
||||
"""
|
||||
|
@ -245,7 +245,7 @@ class RegexURLResolver(LocaleRegexProvider):
|
|||
self._app_dict = {}
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str('<%s %s (%s:%s) %s>' % (
|
||||
return force_str('<%s %s (%s:%s) %s>' % (
|
||||
self.__class__.__name__, self.urlconf_name, self.app_name,
|
||||
self.namespace, self.regex.pattern))
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ except ImportError: # Python 2
|
|||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.encoding import smart_text
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.ipv6 import is_valid_ipv6_address
|
||||
from django.utils import six
|
||||
|
||||
|
@ -36,7 +36,7 @@ class RegexValidator(object):
|
|||
"""
|
||||
Validates that the input matches the regular expression.
|
||||
"""
|
||||
if not self.regex.search(smart_text(value)):
|
||||
if not self.regex.search(force_text(value)):
|
||||
raise ValidationError(self.message, code=self.code)
|
||||
|
||||
class URLValidator(RegexValidator):
|
||||
|
@ -55,7 +55,7 @@ class URLValidator(RegexValidator):
|
|||
except ValidationError as e:
|
||||
# Trivial case failed. Try for possible IDN domain
|
||||
if value:
|
||||
value = smart_text(value)
|
||||
value = force_text(value)
|
||||
scheme, netloc, path, query, fragment = urlsplit(value)
|
||||
try:
|
||||
netloc = netloc.encode('idna').decode('ascii') # IDN -> ACE
|
||||
|
|
|
@ -609,7 +609,7 @@ class BaseDatabaseOperations(object):
|
|||
exists for database backends to provide a better implementation
|
||||
according to their own quoting schemes.
|
||||
"""
|
||||
from django.utils.encoding import smart_text, force_text
|
||||
from django.utils.encoding import force_text
|
||||
|
||||
# Convert params to contain Unicode values.
|
||||
to_unicode = lambda s: force_text(s, strings_only=True, errors='replace')
|
||||
|
@ -618,7 +618,7 @@ class BaseDatabaseOperations(object):
|
|||
else:
|
||||
u_params = dict([(to_unicode(k), to_unicode(v)) for k, v in params.items()])
|
||||
|
||||
return smart_text(sql) % u_params
|
||||
return force_text(sql) % u_params
|
||||
|
||||
def last_insert_id(self, cursor, table_name, pk_name):
|
||||
"""
|
||||
|
@ -802,8 +802,8 @@ class BaseDatabaseOperations(object):
|
|||
|
||||
def prep_for_like_query(self, x):
|
||||
"""Prepares a value for use in a LIKE query."""
|
||||
from django.utils.encoding import smart_text
|
||||
return smart_text(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
|
||||
from django.utils.encoding import force_text
|
||||
return force_text(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
|
||||
|
||||
# Same as prep_for_like_query(), but called for "iexact" matches, which
|
||||
# need not necessarily be implemented using "LIKE" in the backend.
|
||||
|
|
|
@ -23,7 +23,7 @@ from django.db.models import signals
|
|||
from django.db.models.loading import register_models, get_model
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.functional import curry
|
||||
from django.utils.encoding import smart_str, force_text
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils import six
|
||||
from django.utils.text import get_text_list, capfirst
|
||||
|
||||
|
@ -404,7 +404,7 @@ class Model(six.with_metaclass(ModelBase, object)):
|
|||
u = six.text_type(self)
|
||||
except (UnicodeEncodeError, UnicodeDecodeError):
|
||||
u = '[Bad Unicode data]'
|
||||
return smart_str('<%s: %s>' % (self.__class__.__name__, u))
|
||||
return force_str('<%s: %s>' % (self.__class__.__name__, u))
|
||||
|
||||
def __str__(self):
|
||||
if not six.PY3 and hasattr(self, '__unicode__'):
|
||||
|
|
|
@ -8,7 +8,7 @@ from django.core.files.base import File
|
|||
from django.core.files.storage import default_storage
|
||||
from django.core.files.images import ImageFile
|
||||
from django.db.models import signals
|
||||
from django.utils.encoding import force_text, smart_str
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils import six
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
@ -280,7 +280,7 @@ class FileField(Field):
|
|||
setattr(cls, self.name, self.descriptor_class(self))
|
||||
|
||||
def get_directory_name(self):
|
||||
return os.path.normpath(force_text(datetime.datetime.now().strftime(smart_str(self.upload_to))))
|
||||
return os.path.normpath(force_text(datetime.datetime.now().strftime(force_str(self.upload_to))))
|
||||
|
||||
def get_filename(self, filename):
|
||||
return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))
|
||||
|
|
|
@ -61,14 +61,14 @@ else:
|
|||
if not _cookie_allows_colon_in_names:
|
||||
def load(self, rawdata):
|
||||
self.bad_cookies = set()
|
||||
super(SimpleCookie, self).load(smart_str(rawdata))
|
||||
super(SimpleCookie, self).load(force_str(rawdata))
|
||||
for key in self.bad_cookies:
|
||||
del self[key]
|
||||
|
||||
# override private __set() method:
|
||||
# (needed for using our Morsel, and for laxness with CookieError
|
||||
def _BaseCookie__set(self, key, real_value, coded_value):
|
||||
key = smart_str(key)
|
||||
key = force_str(key)
|
||||
try:
|
||||
M = self.get(key, Morsel())
|
||||
M.set(key, real_value, coded_value)
|
||||
|
@ -85,7 +85,7 @@ from django.core.files import uploadhandler
|
|||
from django.http.multipartparser import MultiPartParser
|
||||
from django.http.utils import *
|
||||
from django.utils.datastructures import MultiValueDict, ImmutableList
|
||||
from django.utils.encoding import force_bytes, force_text, smart_str, iri_to_uri
|
||||
from django.utils.encoding import force_bytes, force_str, force_text, iri_to_uri
|
||||
from django.utils.http import cookie_date
|
||||
from django.utils import six
|
||||
from django.utils import timezone
|
||||
|
@ -137,7 +137,7 @@ def build_request_repr(request, path_override=None, GET_override=None,
|
|||
except Exception:
|
||||
meta = '<could not parse>'
|
||||
path = path_override if path_override is not None else request.path
|
||||
return smart_str('<%s\npath:%s,\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' %
|
||||
return force_str('<%s\npath:%s,\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' %
|
||||
(request.__class__.__name__,
|
||||
path,
|
||||
six.text_type(get),
|
||||
|
|
|
@ -11,7 +11,7 @@ from django.utils.importlib import import_module
|
|||
from django.utils.itercompat import is_iterable
|
||||
from django.utils.text import (smart_split, unescape_string_literal,
|
||||
get_text_list)
|
||||
from django.utils.encoding import smart_text, force_text, smart_str
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils.translation import ugettext_lazy, pgettext_lazy
|
||||
from django.utils.safestring import (SafeData, EscapeData, mark_safe,
|
||||
mark_for_escaping)
|
||||
|
@ -116,7 +116,7 @@ class Template(object):
|
|||
def __init__(self, template_string, origin=None,
|
||||
name='<Unknown Template>'):
|
||||
try:
|
||||
template_string = smart_text(template_string)
|
||||
template_string = force_text(template_string)
|
||||
except UnicodeDecodeError:
|
||||
raise TemplateEncodingError("Templates can only be constructed "
|
||||
"from unicode or UTF-8 strings.")
|
||||
|
@ -848,7 +848,7 @@ class TextNode(Node):
|
|||
self.s = s
|
||||
|
||||
def __repr__(self):
|
||||
return "<Text Node: '%s'>" % smart_str(self.s[:25], 'ascii',
|
||||
return force_str("<Text Node: '%s'>" % self.s[:25], 'ascii',
|
||||
errors='replace')
|
||||
|
||||
def render(self, context):
|
||||
|
|
|
@ -4,7 +4,7 @@ import datetime
|
|||
from django.conf import settings
|
||||
from django.utils import dateformat, numberformat, datetime_safe
|
||||
from django.utils.importlib import import_module
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.functional import lazy
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils import six
|
||||
|
@ -66,7 +66,7 @@ def get_format(format_type, lang=None, use_l10n=None):
|
|||
If use_l10n is provided and is not None, that will force the value to
|
||||
be localized (or not), overriding the value of settings.USE_L10N.
|
||||
"""
|
||||
format_type = smart_str(format_type)
|
||||
format_type = force_str(format_type)
|
||||
if use_l10n or (use_l10n is None and settings.USE_L10N):
|
||||
if lang is None:
|
||||
lang = get_language()
|
||||
|
@ -160,14 +160,14 @@ def localize_input(value, default=None):
|
|||
return number_format(value)
|
||||
elif isinstance(value, datetime.datetime):
|
||||
value = datetime_safe.new_datetime(value)
|
||||
format = smart_str(default or get_format('DATETIME_INPUT_FORMATS')[0])
|
||||
format = force_str(default or get_format('DATETIME_INPUT_FORMATS')[0])
|
||||
return value.strftime(format)
|
||||
elif isinstance(value, datetime.date):
|
||||
value = datetime_safe.new_date(value)
|
||||
format = smart_str(default or get_format('DATE_INPUT_FORMATS')[0])
|
||||
format = force_str(default or get_format('DATE_INPUT_FORMATS')[0])
|
||||
return value.strftime(format)
|
||||
elif isinstance(value, datetime.time):
|
||||
format = smart_str(default or get_format('TIME_INPUT_FORMATS')[0])
|
||||
format = force_str(default or get_format('TIME_INPUT_FORMATS')[0])
|
||||
return value.strftime(format)
|
||||
return value
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ except ImportError: # Python 2
|
|||
from email.utils import formatdate
|
||||
|
||||
from django.utils.datastructures import MultiValueDict
|
||||
from django.utils.encoding import force_text, smart_str
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils.functional import allow_lazy
|
||||
from django.utils import six
|
||||
|
||||
|
@ -39,7 +39,7 @@ def urlquote(url, safe='/'):
|
|||
can safely be used as part of an argument to a subsequent iri_to_uri() call
|
||||
without double-quoting occurring.
|
||||
"""
|
||||
return force_text(urllib_parse.quote(smart_str(url), smart_str(safe)))
|
||||
return force_text(urllib_parse.quote(force_str(url), force_str(safe)))
|
||||
urlquote = allow_lazy(urlquote, six.text_type)
|
||||
|
||||
def urlquote_plus(url, safe=''):
|
||||
|
@ -49,7 +49,7 @@ def urlquote_plus(url, safe=''):
|
|||
returned string can safely be used as part of an argument to a subsequent
|
||||
iri_to_uri() call without double-quoting occurring.
|
||||
"""
|
||||
return force_text(urllib_parse.quote_plus(smart_str(url), smart_str(safe)))
|
||||
return force_text(urllib_parse.quote_plus(force_str(url), force_str(safe)))
|
||||
urlquote_plus = allow_lazy(urlquote_plus, six.text_type)
|
||||
|
||||
def urlunquote(quoted_url):
|
||||
|
@ -57,7 +57,7 @@ def urlunquote(quoted_url):
|
|||
A wrapper for Python's urllib.unquote() function that can operate on
|
||||
the result of django.utils.http.urlquote().
|
||||
"""
|
||||
return force_text(urllib_parse.unquote(smart_str(quoted_url)))
|
||||
return force_text(urllib_parse.unquote(force_str(quoted_url)))
|
||||
urlunquote = allow_lazy(urlunquote, six.text_type)
|
||||
|
||||
def urlunquote_plus(quoted_url):
|
||||
|
@ -65,7 +65,7 @@ def urlunquote_plus(quoted_url):
|
|||
A wrapper for Python's urllib.unquote_plus() function that can operate on
|
||||
the result of django.utils.http.urlquote_plus().
|
||||
"""
|
||||
return force_text(urllib_parse.unquote_plus(smart_str(quoted_url)))
|
||||
return force_text(urllib_parse.unquote_plus(force_str(quoted_url)))
|
||||
urlunquote_plus = allow_lazy(urlunquote_plus, six.text_type)
|
||||
|
||||
def urlencode(query, doseq=0):
|
||||
|
@ -79,8 +79,8 @@ def urlencode(query, doseq=0):
|
|||
elif hasattr(query, 'items'):
|
||||
query = query.items()
|
||||
return urllib_parse.urlencode(
|
||||
[(smart_str(k),
|
||||
[smart_str(i) for i in v] if isinstance(v, (list,tuple)) else smart_str(v))
|
||||
[(force_str(k),
|
||||
[force_str(i) for i in v] if isinstance(v, (list,tuple)) else force_str(v))
|
||||
for k, v in query],
|
||||
doseq)
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import gettext as gettext_module
|
|||
from threading import local
|
||||
|
||||
from django.utils.importlib import import_module
|
||||
from django.utils.encoding import smart_str, smart_text
|
||||
from django.utils.encoding import force_str, force_text
|
||||
from django.utils.safestring import mark_safe, SafeData
|
||||
from django.utils import six
|
||||
from django.utils.six import StringIO
|
||||
|
@ -454,7 +454,7 @@ def templatize(src, origin=None):
|
|||
from django.conf import settings
|
||||
from django.template import (Lexer, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK,
|
||||
TOKEN_COMMENT, TRANSLATOR_COMMENT_MARK)
|
||||
src = smart_text(src, settings.FILE_CHARSET)
|
||||
src = force_text(src, settings.FILE_CHARSET)
|
||||
out = StringIO()
|
||||
message_context = None
|
||||
intrans = False
|
||||
|
@ -469,7 +469,7 @@ def templatize(src, origin=None):
|
|||
content = ''.join(comment)
|
||||
translators_comment_start = None
|
||||
for lineno, line in enumerate(content.splitlines(True)):
|
||||
if line.lstrip().startswith(smart_text(TRANSLATOR_COMMENT_MARK)):
|
||||
if line.lstrip().startswith(TRANSLATOR_COMMENT_MARK):
|
||||
translators_comment_start = lineno
|
||||
for lineno, line in enumerate(content.splitlines(True)):
|
||||
if translators_comment_start is not None and lineno >= translators_comment_start:
|
||||
|
@ -584,7 +584,7 @@ def templatize(src, origin=None):
|
|||
out.write(' # %s' % t.contents)
|
||||
else:
|
||||
out.write(blankout(t.contents, 'X'))
|
||||
return smart_str(out.getvalue())
|
||||
return force_str(out.getvalue())
|
||||
|
||||
def parse_accept_lang_header(lang_string):
|
||||
"""
|
||||
|
|
|
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||
import time
|
||||
from datetime import timedelta, tzinfo
|
||||
|
||||
from django.utils.encoding import smart_text, smart_str, DEFAULT_LOCALE_ENCODING
|
||||
from django.utils.encoding import force_str, force_text, DEFAULT_LOCALE_ENCODING
|
||||
|
||||
# Python's doc say: "A tzinfo subclass must have an __init__() method that can
|
||||
# be called with no arguments". FixedOffset and LocalTimezone don't honor this
|
||||
|
@ -53,7 +53,7 @@ class LocalTimezone(tzinfo):
|
|||
self._tzname = self.tzname(dt)
|
||||
|
||||
def __repr__(self):
|
||||
return smart_str(self._tzname)
|
||||
return force_str(self._tzname)
|
||||
|
||||
def __getinitargs__(self):
|
||||
return self.__dt,
|
||||
|
@ -72,7 +72,7 @@ class LocalTimezone(tzinfo):
|
|||
|
||||
def tzname(self, dt):
|
||||
try:
|
||||
return smart_text(time.tzname[self._isdst(dt)],
|
||||
return force_text(time.tzname[self._isdst(dt)],
|
||||
DEFAULT_LOCALE_ENCODING)
|
||||
except UnicodeDecodeError:
|
||||
return None
|
||||
|
|
Loading…
Reference in New Issue