misc: add force_str(), to encode in Python 2 (#36515)
This commit is contained in:
parent
4b82f00c73
commit
8cf415e664
|
@ -19,6 +19,7 @@ import os
|
|||
from threading import Lock
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.utils import six
|
||||
from django.utils.six.moves import configparser as ConfigParser
|
||||
|
||||
from quixote import get_publisher, get_request
|
||||
|
@ -31,7 +32,7 @@ from django.template import loader, TemplateDoesNotExist
|
|||
from django.template.response import TemplateResponse
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
from .qommon import template
|
||||
from .qommon import force_str, template
|
||||
from .qommon.publisher import get_cfg, set_publisher_class
|
||||
from .publisher import WcsPublisher
|
||||
from .qommon.http_request import HTTPRequest
|
||||
|
@ -97,7 +98,7 @@ class CompatHTTPRequest(HTTPRequest):
|
|||
self.django_request.quixote_request = self
|
||||
self.response = None
|
||||
request.environ['SCRIPT_NAME'] = str(request.environ['SCRIPT_NAME'])
|
||||
request.environ['PATH_INFO'] = request.environ['PATH_INFO'].encode('utf-8')
|
||||
request.environ['PATH_INFO'] = force_str(request.environ['PATH_INFO'])
|
||||
self.environ = self.django_request.META
|
||||
HTTPRequest.__init__(self, None, request.environ)
|
||||
self.scheme = str(self.django_request.scheme)
|
||||
|
|
|
@ -19,6 +19,7 @@ import threading
|
|||
|
||||
import django.apps
|
||||
from django.conf import settings
|
||||
from django.utils import six
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.six.moves import configparser as ConfigParser
|
||||
|
||||
|
@ -29,17 +30,30 @@ try:
|
|||
except ImportError:
|
||||
lasso = None
|
||||
|
||||
|
||||
# force_str: compatibility function to produce an encoded string in Python 2
|
||||
# and a proper unicode string in Python 3
|
||||
if six.PY2:
|
||||
def force_str(s):
|
||||
if isinstance(s, str):
|
||||
return s
|
||||
return s.encode('utf-8')
|
||||
else:
|
||||
force_str = force_text
|
||||
|
||||
|
||||
def _(message):
|
||||
pub = get_publisher()
|
||||
if pub is None:
|
||||
return message
|
||||
return force_text(pub.gettext(str(message)), 'utf-8').encode(pub.site_charset)
|
||||
return force_str(force_text(pub.gettext(str(message))))
|
||||
|
||||
def ngettext(*args):
|
||||
pub = get_publisher()
|
||||
if pub is None:
|
||||
return message
|
||||
return force_text(pub.ngettext(*args), 'utf-8').encode(pub.site_charset)
|
||||
return force_str(force_text(pub.ngettext(*args)))
|
||||
|
||||
|
||||
from .publisher import get_cfg, get_logger, get_publisher_class
|
||||
from . import publisher
|
||||
|
|
|
@ -48,7 +48,7 @@ from django.utils.six.moves.urllib import parse as urlparse
|
|||
from quixote import get_publisher, get_response, get_request
|
||||
from quixote.html import htmltext
|
||||
|
||||
from . import _
|
||||
from . import _, force_str
|
||||
from . import get_cfg, get_logger, ezt
|
||||
from .errors import ConnectionError
|
||||
from .template import Template
|
||||
|
@ -248,12 +248,11 @@ def site_encode(s):
|
|||
s = force_text(s)
|
||||
return s.encode(get_publisher().site_charset)
|
||||
|
||||
def ellipsize(s, length = 30):
|
||||
if type(s) is not unicode:
|
||||
s = force_text(s, get_publisher().site_charset, errors='replace')
|
||||
if not s or len(s) < length:
|
||||
return s.encode(get_publisher().site_charset)
|
||||
return s[:length-5].encode(get_publisher().site_charset) + ' (...)'
|
||||
def ellipsize(s, length=30):
|
||||
s = force_text(s, get_publisher().site_charset, errors='replace')
|
||||
if s and len(s) >= length:
|
||||
s = s[:length-5] + ' (...)'
|
||||
return force_str(s)
|
||||
|
||||
def get_month_name(month):
|
||||
month_names = [_('January'), _('February'), _('March'), _('April'),
|
||||
|
|
|
@ -33,7 +33,7 @@ from quixote.directory import Directory
|
|||
from quixote.util import StaticDirectory, StaticFile
|
||||
from quixote.html import htmltext, htmlescape, TemplateIO
|
||||
|
||||
from . import ezt
|
||||
from . import ezt, force_str
|
||||
|
||||
|
||||
def get_template_from_script(filename):
|
||||
|
@ -407,7 +407,8 @@ def decorate(body, response):
|
|||
|
||||
def render(template_name, context):
|
||||
request = getattr(get_request(), 'django_request', None)
|
||||
return htmltext(render_to_string(template_name, context, request=request).encode('utf-8'))
|
||||
result = render_to_string(template_name, context, request=request)
|
||||
return htmltext(force_str(result))
|
||||
|
||||
|
||||
class QommonTemplateResponse(object):
|
||||
|
|
|
@ -20,6 +20,7 @@ import xml.etree.ElementTree as ET
|
|||
from django.utils.encoding import force_text
|
||||
from quixote import get_publisher
|
||||
|
||||
from . import force_str
|
||||
from .misc import indent_xml
|
||||
from .storage import StorableObject
|
||||
|
||||
|
@ -104,7 +105,7 @@ class XmlStorableObject(StorableObject):
|
|||
return obj
|
||||
|
||||
def import_str_from_xml(self, element, charset):
|
||||
return element.text.encode(charset)
|
||||
return force_str(element.text)
|
||||
|
||||
def import_int_from_xml(self, element, charset):
|
||||
return int(element.text)
|
||||
|
|
Loading…
Reference in New Issue