py2.7c: various compatibility fixes

This commit is contained in:
Laura Liberda 2020-11-29 02:36:57 +01:00
parent 320c29c6b3
commit 23e0670e25
6 changed files with 25 additions and 13 deletions

View file

@ -3004,6 +3004,7 @@ else:
def compat_ctypes_WINFUNCTYPE(*args, **kwargs): def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
return ctypes.WINFUNCTYPE(*args, **kwargs) return ctypes.WINFUNCTYPE(*args, **kwargs)
py_major_ver = platform.python_version_tuple()[0]
__all__ = [ __all__ = [
'compat_HTMLParseError', 'compat_HTMLParseError',
@ -3063,5 +3064,6 @@ __all__ = [
'compat_xml_parse_error', 'compat_xml_parse_error',
'compat_xpath', 'compat_xpath',
'compat_zip', 'compat_zip',
'py_major_ver',
'workaround_optparse_bug9161', 'workaround_optparse_bug9161',
] ]

View file

@ -9,7 +9,9 @@ import random
from .compat import ( from .compat import (
compat_parse_qs as parse_qs, compat_parse_qs as parse_qs,
compat_urllib_parse_quote as qs_quote, compat_urllib_parse_quote as qs_quote,
compat_urlparse as urlparse, compat_urllib_parse_urlparse as urlparse,
compat_str,
py_major_ver,
) )
@ -127,15 +129,19 @@ def regex_search_string(regexes, string, default=None, multiple=False, whole_mat
def dump_qs(obj): def dump_qs(obj):
old_qs = [] if py_major_ver == 2:
old_qs = obj.iteritems()
else:
old_qs = list(obj.items())
# sorting by key to unify the result string between python versions
# https://stackoverflow.com/a/3295662/8222484
old_qs.sort()
qs = [] qs = []
for key in obj:
old_qs.append((key, obj[key]))
not_flat = True not_flat = True
while not_flat: while not_flat:
not_flat = False not_flat = False
for old_qs_element in old_qs: for old_qs_element in old_qs:
if isinstance(old_qs_element[1], (str, int, float)): if isinstance(old_qs_element[1], (compat_str, int, float)):
qs.append((old_qs_element[0], old_qs_element[1])) qs.append((old_qs_element[0], old_qs_element[1]))
elif isinstance(old_qs_element[1], (dict)): elif isinstance(old_qs_element[1], (dict)):
for subkey in old_qs_element[1]: for subkey in old_qs_element[1]:
@ -149,7 +155,7 @@ def dump_qs(obj):
element = old_qs_element[1][index] element = old_qs_element[1][index]
if element is not None: if element is not None:
qs.append( qs.append(
(old_qs_element[0] + "[" + str(index) + "]", element)) (old_qs_element[0] + "[" + compat_str(index) + "]", element))
if isinstance(element, (dict, list)): if isinstance(element, (dict, list)):
not_flat = True not_flat = True
if not_flat: if not_flat:
@ -157,8 +163,8 @@ def dump_qs(obj):
qs = [] qs = []
strng = "" strng = ""
for el in qs: for el in qs:
strng += qs_quote(str(el[0]), encoding="utf8") + "=" + \ strng += qs_quote(compat_str(el[0]).encode("utf-8")) + "=" + \
qs_quote(str(el[1]), encoding="utf8") + "&" qs_quote(compat_str(el[1]).encode("utf-8")) + "&"
return strng[:-1] return strng[:-1]

View file

@ -2,6 +2,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from librefi.utils import dump_qs from librefi.utils import dump_qs
from librefi.compat import compat_str
from hashlib import sha512 from hashlib import sha512
@ -15,7 +16,7 @@ def test_dump():
{"przestań mi": ["kurwa", "rodzinę prześladować"]}], {"przestań mi": ["kurwa", "rodzinę prześladować"]}],
} }
result = dump_qs(obj) result = dump_qs(obj)
assert isinstance(result, str) assert isinstance(result, compat_str)
assert sha512(result.encode("utf-8")).hexdigest( assert sha512(result.encode("utf-8")).hexdigest(
# flake8: noqa: E501 # flake8: noqa: E501
) == "80cb0feb585e8a5969598797b74c6f7f2f314ee97dfd2d6f4aaf431b800f6c7a1dfe77efd550a1009d41ef2886b21b87ce1d9e4f11444af554a916987344aee1" ) == "80cb0feb585e8a5969598797b74c6f7f2f314ee97dfd2d6f4aaf431b800f6c7a1dfe77efd550a1009d41ef2886b21b87ce1d9e4f11444af554a916987344aee1"

View file

@ -2,6 +2,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from librefi.utils import regex_search_string from librefi.utils import regex_search_string
from librefi.compat import compat_str
HTML_STRING = """ HTML_STRING = """
<form method="POST" action="/?your=mother"> <form method="POST" action="/?your=mother">
@ -50,7 +51,7 @@ def test_regex_search_multiple_results():
assert isinstance(results, list) assert isinstance(results, list)
assert len(results) == len(EXPECTED_RESULT_2) assert len(results) == len(EXPECTED_RESULT_2)
for i in range(len(results)): for i in range(len(results)):
assert isinstance(results[i], str) assert isinstance(results[i], compat_str)
assert results[i] == EXPECTED_RESULT_2[i] assert results[i] == EXPECTED_RESULT_2[i]

View file

@ -2,12 +2,13 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from librefi.utils import get_user_agent, get_email_address from librefi.utils import get_user_agent, get_email_address
from librefi.compat import compat_str
import re import re
def test_email_address(): def test_email_address():
email = get_email_address() email = get_email_address()
assert isinstance(email, str) assert isinstance(email, compat_str)
assert re.search( assert re.search(
# intentionally dumb and not covering a lot of actual emails # intentionally dumb and not covering a lot of actual emails
r"^[a-zA-Z\d](?:[a-zA-Z\d._-]*[a-zA-Z\d])?@[a-z-\d]+(?:\.[a-z-\d]+)+$", r"^[a-zA-Z\d](?:[a-zA-Z\d._-]*[a-zA-Z\d])?@[a-z-\d]+(?:\.[a-z-\d]+)+$",
@ -17,5 +18,5 @@ def test_email_address():
def test_user_agent(): def test_user_agent():
ua = get_user_agent() ua = get_user_agent()
assert isinstance(ua, str) assert isinstance(ua, compat_str)
pass pass

View file

@ -2,6 +2,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from librefi.utils import absolute_url from librefi.utils import absolute_url
from librefi.compat import compat_str
OLD_URL = "https://sakamoto.pl/ddd" OLD_URL = "https://sakamoto.pl/ddd"
NEW_URL_RELATIVE = "/DDD?test=yes" NEW_URL_RELATIVE = "/DDD?test=yes"
@ -12,7 +13,7 @@ NEW_URL_ABSOLUTE = "https://sakamoto.pl/DDD?test=yes"
def test_basic(): def test_basic():
abso = absolute_url(NEW_URL_RELATIVE, OLD_URL) abso = absolute_url(NEW_URL_RELATIVE, OLD_URL)
assert isinstance(abso, (str)) assert isinstance(abso, (compat_str))
print(abso) print(abso)
assert abso == NEW_URL_ABSOLUTE assert abso == NEW_URL_ABSOLUTE
pass pass