mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 18:36:36 +00:00
Remove usage of six.moves.binary_type.
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
from six import binary_type
|
|
||||||
from typing import Any, Callable, Dict, List, Tuple, Text
|
from typing import Any, Callable, Dict, List, Tuple, Text
|
||||||
|
|
||||||
# This file needs to be different from cache.py because cache.py
|
# This file needs to be different from cache.py because cache.py
|
||||||
@@ -33,7 +32,7 @@ def message_fetch_objects():
|
|||||||
id__gt=max_id - MESSAGE_CACHE_SIZE)
|
id__gt=max_id - MESSAGE_CACHE_SIZE)
|
||||||
|
|
||||||
def message_cache_items(items_for_remote_cache, message):
|
def message_cache_items(items_for_remote_cache, message):
|
||||||
# type: (Dict[Text, Tuple[binary_type]], Message) -> None
|
# type: (Dict[Text, Tuple[bytes]], Message) -> None
|
||||||
'''
|
'''
|
||||||
Note: this code is untested, and the caller has been
|
Note: this code is untested, and the caller has been
|
||||||
commented out for a while.
|
commented out for a while.
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ from zerver.lib.send_email import FromAddress
|
|||||||
from zerver.models import Stream, Recipient, \
|
from zerver.models import Stream, Recipient, \
|
||||||
get_user_profile_by_id, get_display_recipient, get_personal_recipient, \
|
get_user_profile_by_id, get_display_recipient, get_personal_recipient, \
|
||||||
Message, Realm, UserProfile, get_system_bot
|
Message, Realm, UserProfile, get_system_bot
|
||||||
from six import binary_type
|
|
||||||
import talon
|
import talon
|
||||||
from talon import quotations
|
from talon import quotations
|
||||||
|
|
||||||
@@ -221,7 +220,7 @@ def get_message_part_by_type(message, content_type):
|
|||||||
for idx, part in enumerate(message.walk()):
|
for idx, part in enumerate(message.walk()):
|
||||||
if part.get_content_type() == content_type:
|
if part.get_content_type() == content_type:
|
||||||
content = part.get_payload(decode=True)
|
content = part.get_payload(decode=True)
|
||||||
assert isinstance(content, binary_type)
|
assert isinstance(content, bytes)
|
||||||
if charsets[idx]:
|
if charsets[idx]:
|
||||||
return content.decode(charsets[idx], errors="ignore")
|
return content.decode(charsets[idx], errors="ignore")
|
||||||
return None
|
return None
|
||||||
@@ -267,7 +266,7 @@ def extract_and_upload_attachments(message, realm):
|
|||||||
filename = part.get_filename()
|
filename = part.get_filename()
|
||||||
if filename:
|
if filename:
|
||||||
attachment = part.get_payload(decode=True)
|
attachment = part.get_payload(decode=True)
|
||||||
if isinstance(attachment, binary_type):
|
if isinstance(attachment, bytes):
|
||||||
s3_url = upload_message_image(filename, len(attachment), content_type,
|
s3_url = upload_message_image(filename, len(attachment), content_type,
|
||||||
attachment,
|
attachment,
|
||||||
user_profile,
|
user_profile,
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import zlib
|
|||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.utils.timezone import now as timezone_now
|
from django.utils.timezone import now as timezone_now
|
||||||
from six import binary_type
|
|
||||||
|
|
||||||
from zerver.lib.avatar import get_avatar_field
|
from zerver.lib.avatar import get_avatar_field
|
||||||
import zerver.lib.bugdown as bugdown
|
import zerver.lib.bugdown as bugdown
|
||||||
@@ -111,16 +110,16 @@ def sew_messages_and_reactions(messages, reactions):
|
|||||||
|
|
||||||
|
|
||||||
def extract_message_dict(message_bytes):
|
def extract_message_dict(message_bytes):
|
||||||
# type: (binary_type) -> Dict[str, Any]
|
# type: (bytes) -> Dict[str, Any]
|
||||||
return dict_with_str_keys(ujson.loads(zlib.decompress(message_bytes).decode("utf-8")))
|
return dict_with_str_keys(ujson.loads(zlib.decompress(message_bytes).decode("utf-8")))
|
||||||
|
|
||||||
def stringify_message_dict(message_dict):
|
def stringify_message_dict(message_dict):
|
||||||
# type: (Dict[str, Any]) -> binary_type
|
# type: (Dict[str, Any]) -> bytes
|
||||||
return zlib.compress(force_bytes(ujson.dumps(message_dict)))
|
return zlib.compress(force_bytes(ujson.dumps(message_dict)))
|
||||||
|
|
||||||
@cache_with_key(to_dict_cache_key, timeout=3600*24)
|
@cache_with_key(to_dict_cache_key, timeout=3600*24)
|
||||||
def message_to_dict_json(message):
|
def message_to_dict_json(message):
|
||||||
# type: (Message) -> binary_type
|
# type: (Message) -> bytes
|
||||||
return MessageDict.to_dict_uncached(message)
|
return MessageDict.to_dict_uncached(message)
|
||||||
|
|
||||||
class MessageDict:
|
class MessageDict:
|
||||||
@@ -178,7 +177,7 @@ class MessageDict:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def to_dict_uncached(message):
|
def to_dict_uncached(message):
|
||||||
# type: (Message) -> binary_type
|
# type: (Message) -> bytes
|
||||||
dct = MessageDict.to_dict_uncached_helper(message)
|
dct = MessageDict.to_dict_uncached_helper(message)
|
||||||
return stringify_message_dict(dct)
|
return stringify_message_dict(dct)
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ import time
|
|||||||
import ujson
|
import ujson
|
||||||
import unittest
|
import unittest
|
||||||
import urllib
|
import urllib
|
||||||
from six import binary_type
|
|
||||||
from zerver.lib.str_utils import NonBinaryStr
|
from zerver.lib.str_utils import NonBinaryStr
|
||||||
from moto import mock_s3_deprecated
|
from moto import mock_s3_deprecated
|
||||||
|
|
||||||
@@ -134,13 +133,13 @@ def simulated_empty_cache():
|
|||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def queries_captured(include_savepoints=False):
|
def queries_captured(include_savepoints=False):
|
||||||
# type: (Optional[bool]) -> Generator[List[Dict[str, Union[str, binary_type]]], None, None]
|
# type: (Optional[bool]) -> Generator[List[Dict[str, Union[str, bytes]]], None, None]
|
||||||
'''
|
'''
|
||||||
Allow a user to capture just the queries executed during
|
Allow a user to capture just the queries executed during
|
||||||
the with statement.
|
the with statement.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
queries = [] # type: List[Dict[str, Union[str, binary_type]]]
|
queries = [] # type: List[Dict[str, Union[str, bytes]]]
|
||||||
|
|
||||||
def wrapper_execute(self, action, sql, params=()):
|
def wrapper_execute(self, action, sql, params=()):
|
||||||
# type: (TimeTrackingCursor, Callable[[NonBinaryStr, Iterable[Any]], None], NonBinaryStr, Iterable[Any]) -> None
|
# type: (TimeTrackingCursor, Callable[[NonBinaryStr, Iterable[Any]], None], NonBinaryStr, Iterable[Any]) -> None
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import base64
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from PIL import Image, ImageOps
|
from PIL import Image, ImageOps
|
||||||
from six import binary_type
|
|
||||||
import io
|
import io
|
||||||
import random
|
import random
|
||||||
import logging
|
import logging
|
||||||
@@ -89,7 +88,7 @@ class ExceededQuotaError(JsonableError):
|
|||||||
code = ErrorCode.QUOTA_EXCEEDED
|
code = ErrorCode.QUOTA_EXCEEDED
|
||||||
|
|
||||||
def resize_avatar(image_data, size=DEFAULT_AVATAR_SIZE):
|
def resize_avatar(image_data, size=DEFAULT_AVATAR_SIZE):
|
||||||
# type: (binary_type, int) -> binary_type
|
# type: (bytes, int) -> bytes
|
||||||
try:
|
try:
|
||||||
im = Image.open(io.BytesIO(image_data))
|
im = Image.open(io.BytesIO(image_data))
|
||||||
im = ImageOps.fit(im, (size, size), Image.ANTIALIAS)
|
im = ImageOps.fit(im, (size, size), Image.ANTIALIAS)
|
||||||
@@ -101,7 +100,7 @@ def resize_avatar(image_data, size=DEFAULT_AVATAR_SIZE):
|
|||||||
|
|
||||||
|
|
||||||
def resize_emoji(image_data, size=DEFAULT_EMOJI_SIZE):
|
def resize_emoji(image_data, size=DEFAULT_EMOJI_SIZE):
|
||||||
# type: (binary_type, int) -> binary_type
|
# type: (bytes, int) -> bytes
|
||||||
try:
|
try:
|
||||||
im = Image.open(io.BytesIO(image_data))
|
im = Image.open(io.BytesIO(image_data))
|
||||||
image_format = im.format
|
image_format = im.format
|
||||||
@@ -127,7 +126,7 @@ def resize_emoji(image_data, size=DEFAULT_EMOJI_SIZE):
|
|||||||
class ZulipUploadBackend:
|
class ZulipUploadBackend:
|
||||||
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
||||||
content_type, file_data, user_profile, target_realm=None):
|
content_type, file_data, user_profile, target_realm=None):
|
||||||
# type: (Text, int, Optional[Text], binary_type, UserProfile, Optional[Realm]) -> Text
|
# type: (Text, int, Optional[Text], bytes, UserProfile, Optional[Realm]) -> Text
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def upload_avatar_image(self, user_file, acting_user_profile, target_user_profile):
|
def upload_avatar_image(self, user_file, acting_user_profile, target_user_profile):
|
||||||
@@ -184,7 +183,7 @@ def upload_image_to_s3(
|
|||||||
content_type,
|
content_type,
|
||||||
user_profile,
|
user_profile,
|
||||||
contents):
|
contents):
|
||||||
# type: (NonBinaryStr, Text, Optional[Text], UserProfile, binary_type) -> None
|
# type: (NonBinaryStr, Text, Optional[Text], UserProfile, bytes) -> None
|
||||||
|
|
||||||
conn = S3Connection(settings.S3_KEY, settings.S3_SECRET_KEY)
|
conn = S3Connection(settings.S3_KEY, settings.S3_SECRET_KEY)
|
||||||
bucket = get_bucket(conn, bucket_name)
|
bucket = get_bucket(conn, bucket_name)
|
||||||
@@ -259,7 +258,7 @@ class S3UploadBackend(ZulipUploadBackend):
|
|||||||
|
|
||||||
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
||||||
content_type, file_data, user_profile, target_realm=None):
|
content_type, file_data, user_profile, target_realm=None):
|
||||||
# type: (Text, int, Optional[Text], binary_type, UserProfile, Optional[Realm]) -> Text
|
# type: (Text, int, Optional[Text], bytes, UserProfile, Optional[Realm]) -> Text
|
||||||
bucket_name = settings.S3_AUTH_UPLOADS_BUCKET
|
bucket_name = settings.S3_AUTH_UPLOADS_BUCKET
|
||||||
if target_realm is None:
|
if target_realm is None:
|
||||||
target_realm = user_profile.realm
|
target_realm = user_profile.realm
|
||||||
@@ -434,7 +433,7 @@ def mkdirs(path):
|
|||||||
os.makedirs(dirname)
|
os.makedirs(dirname)
|
||||||
|
|
||||||
def write_local_file(type, path, file_data):
|
def write_local_file(type, path, file_data):
|
||||||
# type: (Text, Text, binary_type) -> None
|
# type: (Text, Text, bytes) -> None
|
||||||
file_path = os.path.join(settings.LOCAL_UPLOADS_DIR, type, path)
|
file_path = os.path.join(settings.LOCAL_UPLOADS_DIR, type, path)
|
||||||
mkdirs(file_path)
|
mkdirs(file_path)
|
||||||
with open(file_path, 'wb') as f:
|
with open(file_path, 'wb') as f:
|
||||||
@@ -451,7 +450,7 @@ def get_local_file_path(path_id):
|
|||||||
class LocalUploadBackend(ZulipUploadBackend):
|
class LocalUploadBackend(ZulipUploadBackend):
|
||||||
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
def upload_message_image(self, uploaded_file_name, uploaded_file_size,
|
||||||
content_type, file_data, user_profile, target_realm=None):
|
content_type, file_data, user_profile, target_realm=None):
|
||||||
# type: (Text, int, Optional[Text], binary_type, UserProfile, Optional[Realm]) -> Text
|
# type: (Text, int, Optional[Text], bytes, UserProfile, Optional[Realm]) -> Text
|
||||||
# Split into 256 subdirectories to prevent directories from getting too big
|
# Split into 256 subdirectories to prevent directories from getting too big
|
||||||
path = "/".join([
|
path = "/".join([
|
||||||
str(user_profile.realm_id),
|
str(user_profile.realm_id),
|
||||||
@@ -574,7 +573,7 @@ def upload_emoji_image(emoji_file, emoji_file_name, user_profile):
|
|||||||
|
|
||||||
def upload_message_image(uploaded_file_name, uploaded_file_size,
|
def upload_message_image(uploaded_file_name, uploaded_file_size,
|
||||||
content_type, file_data, user_profile, target_realm=None):
|
content_type, file_data, user_profile, target_realm=None):
|
||||||
# type: (Text, int, Optional[Text], binary_type, UserProfile, Optional[Realm]) -> Text
|
# type: (Text, int, Optional[Text], bytes, UserProfile, Optional[Realm]) -> Text
|
||||||
return upload_backend.upload_message_image(uploaded_file_name, uploaded_file_size,
|
return upload_backend.upload_message_image(uploaded_file_name, uploaded_file_size,
|
||||||
content_type, file_data, user_profile, target_realm=target_realm)
|
content_type, file_data, user_profile, target_realm=target_realm)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from typing import Any, Callable, List, Optional, Sequence, TypeVar, Iterable, Set, Tuple, Text
|
from typing import Any, Callable, List, Optional, Sequence, TypeVar, Iterable, Set, Tuple, Text
|
||||||
from six import binary_type
|
|
||||||
import base64
|
import base64
|
||||||
import errno
|
import errno
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -88,7 +87,7 @@ def run_in_batches(all_list, batch_size, callback, sleep_time = 0, logger = None
|
|||||||
sleep(sleep_time)
|
sleep(sleep_time)
|
||||||
|
|
||||||
def make_safe_digest(string, hash_func=hashlib.sha1):
|
def make_safe_digest(string, hash_func=hashlib.sha1):
|
||||||
# type: (Text, Callable[[binary_type], Any]) -> Text
|
# type: (Text, Callable[[bytes], Any]) -> Text
|
||||||
"""
|
"""
|
||||||
return a hex digest of `string`.
|
return a hex digest of `string`.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
from six import binary_type
|
|
||||||
from typing import Any, AnyStr, Callable, Dict, Iterable, List, MutableMapping, Optional, Text
|
from typing import Any, AnyStr, Callable, Dict, Iterable, List, MutableMapping, Optional, Text
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -225,7 +224,7 @@ def write_log_line(log_data, path, method, remote_ip, email, client_name,
|
|||||||
error_data = u''
|
error_data = u''
|
||||||
elif isinstance(error_content_list[0], Text):
|
elif isinstance(error_content_list[0], Text):
|
||||||
error_data = u''.join(error_content_list)
|
error_data = u''.join(error_content_list)
|
||||||
elif isinstance(error_content_list[0], binary_type):
|
elif isinstance(error_content_list[0], bytes):
|
||||||
error_data = repr(b''.join(error_content_list))
|
error_data = repr(b''.join(error_content_list))
|
||||||
if len(error_data) > 100:
|
if len(error_data) > 100:
|
||||||
error_data = u"[content more than 100 characters]"
|
error_data = u"[content more than 100 characters]"
|
||||||
|
|||||||
@@ -22,16 +22,14 @@ from boto.s3.connection import S3Connection
|
|||||||
from requests import ConnectionError, Response
|
from requests import ConnectionError, Response
|
||||||
from typing import Dict, Text, Tuple, Optional, Union
|
from typing import Dict, Text, Tuple, Optional, Union
|
||||||
|
|
||||||
from six import binary_type
|
|
||||||
|
|
||||||
|
def force_str(s: Union[Text, bytes], encoding: Text='utf-8') -> str:
|
||||||
def force_str(s: Union[Text, binary_type], encoding: Text='utf-8') -> str:
|
|
||||||
"""converts a string to a native string"""
|
"""converts a string to a native string"""
|
||||||
if isinstance(s, str):
|
if isinstance(s, str):
|
||||||
return s
|
return s
|
||||||
elif isinstance(s, Text):
|
elif isinstance(s, Text):
|
||||||
return s.encode(str(encoding))
|
return s.encode(str(encoding))
|
||||||
elif isinstance(s, binary_type):
|
elif isinstance(s, bytes):
|
||||||
return s.decode(encoding)
|
return s.decode(encoding)
|
||||||
else:
|
else:
|
||||||
raise TypeError("force_str expects a string type")
|
raise TypeError("force_str expects a string type")
|
||||||
@@ -42,7 +40,7 @@ class Uploader:
|
|||||||
self.path_template = "{realm_id}/emoji/{emoji_file_name}"
|
self.path_template = "{realm_id}/emoji/{emoji_file_name}"
|
||||||
self.emoji_size = (64, 64)
|
self.emoji_size = (64, 64)
|
||||||
|
|
||||||
def upload_files(self, response: Response, resized_image: binary_type,
|
def upload_files(self, response: Response, resized_image: bytes,
|
||||||
dst_path_id: Text) -> None:
|
dst_path_id: Text) -> None:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
@@ -51,7 +49,7 @@ class Uploader:
|
|||||||
file_name = ''.join((emoji_name, image_ext))
|
file_name = ''.join((emoji_name, image_ext))
|
||||||
return file_name, self.path_template.format(realm_id=realm_id, emoji_file_name=file_name)
|
return file_name, self.path_template.format(realm_id=realm_id, emoji_file_name=file_name)
|
||||||
|
|
||||||
def resize_emoji(self, image_data: binary_type) -> Optional[binary_type]:
|
def resize_emoji(self, image_data: bytes) -> Optional[bytes]:
|
||||||
im = Image.open(io.BytesIO(image_data))
|
im = Image.open(io.BytesIO(image_data))
|
||||||
format_ = im.format
|
format_ = im.format
|
||||||
if format_ == 'GIF' and im.is_animated:
|
if format_ == 'GIF' and im.is_animated:
|
||||||
@@ -91,12 +89,12 @@ class LocalUploader(Uploader):
|
|||||||
if not os.path.isdir(dirname):
|
if not os.path.isdir(dirname):
|
||||||
os.makedirs(dirname)
|
os.makedirs(dirname)
|
||||||
|
|
||||||
def write_local_file(self, path: Text, file_data: binary_type) -> None:
|
def write_local_file(self, path: Text, file_data: bytes) -> None:
|
||||||
self.mkdirs(path)
|
self.mkdirs(path)
|
||||||
with open(path, 'wb') as f:
|
with open(path, 'wb') as f:
|
||||||
f.write(file_data)
|
f.write(file_data)
|
||||||
|
|
||||||
def upload_files(self, response: Response, resized_image: binary_type,
|
def upload_files(self, response: Response, resized_image: bytes,
|
||||||
dst_path_id: Text) -> None:
|
dst_path_id: Text) -> None:
|
||||||
dst_file = os.path.join(settings.LOCAL_UPLOADS_DIR, 'avatars', dst_path_id)
|
dst_file = os.path.join(settings.LOCAL_UPLOADS_DIR, 'avatars', dst_path_id)
|
||||||
if resized_image:
|
if resized_image:
|
||||||
@@ -113,13 +111,13 @@ class S3Uploader(Uploader):
|
|||||||
bucket_name = settings.S3_AVATAR_BUCKET
|
bucket_name = settings.S3_AVATAR_BUCKET
|
||||||
self.bucket = conn.get_bucket(bucket_name, validate=False)
|
self.bucket = conn.get_bucket(bucket_name, validate=False)
|
||||||
|
|
||||||
def upload_to_s3(self, path: Text, file_data: binary_type,
|
def upload_to_s3(self, path: Text, file_data: bytes,
|
||||||
headers: Optional[Dict[Text, Text]]) -> None:
|
headers: Optional[Dict[Text, Text]]) -> None:
|
||||||
key = Key(self.bucket)
|
key = Key(self.bucket)
|
||||||
key.key = path
|
key.key = path
|
||||||
key.set_contents_from_string(force_str(file_data), headers=headers)
|
key.set_contents_from_string(force_str(file_data), headers=headers)
|
||||||
|
|
||||||
def upload_files(self, response: Response, resized_image: binary_type,
|
def upload_files(self, response: Response, resized_image: bytes,
|
||||||
dst_path_id: Text) -> None:
|
dst_path_id: Text) -> None:
|
||||||
headers = None # type: Optional[Dict[Text, Text]]
|
headers = None # type: Optional[Dict[Text, Text]]
|
||||||
content_type = response.headers.get(str("Content-Type")) or guess_type(dst_path_id)[0]
|
content_type = response.headers.get(str("Content-Type")) or guess_type(dst_path_id)[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user