Вопрос
Есть ли лучший способ обработки конфликта Unicode to Bytes с Python 3 при работе в сети.Я пытаюсь избежать перетекания вызовов some_str.encode () и some_str.decode () на пользовательскую часть приложения.Является ли псевдокод ниже жизнеспособным, или он просто создаст больше проблем при попытке решить проблему.
справочная информация о проблеме
Существуют десятки библиотек, которые изначально были написаны на Python2, где BaseStr был asciiоснован.Например, над Twisted была проделана большая работа, чтобы обойти некоторые причуды с Py 2 до 3, но я думаю, что почти все подняли руки с конфликтом строк.
Идея, которую я имею в видуНиже описана реализация и тестирование.
def basestr_decorator(some_callable):
def _decorator(*args, **kwargs):
new_args = args[:]
if "_ignore" in new_args:
del new_args["_ignore"]
return some_callable(*args, **new_args)
new_kwargs = kwargs.copy() #or some proxy perhaps
for position, value in enumerate(args, 0):
if value is unicode:
new_args[position] = args[position].decode()
for key_name in new_kwargs.keys():
if new_args.get(key_name, None_ is unicode:
new_args[key_name] = new_args.setattr(key_name, kwargs[key_name].encode()
retval = some_callable(*args, **kwargs)
some_log_mechanism(f"TODO - {instance} has a unicode parameter!")
return retval.decode("utf-8") if retval is bytes else retval
return _decorator(some_callable)
def safe_guard(instance:object, ignores:set):
for propname in [x for x in dir(instance) if x[0] != "_"]:
if getattr(instance, propname, None) is a callable and propname not in ignores:
setattr(instance, propname, basestr_decorator(getattr(instance, propname)
#From here I would wrap some specific object instances that come up often as an issue.
Я уже разбудил txzmq и провел несколько проверок различных входных данных, чтобы отследить конфликты Unicode, но ключевое слово "some".
Одна из целей -исправить непроверенную версию моего проекта txWeb (имя, вероятно, нужно изменить, так как уже есть pypi txweb) https://github.com/devdave/txWeb
Конкретный пример проблемы
Unicode exceptionin twisted Это был не мой вопрос, но этот случай поднимется сотни раз и станет временным затратом для более крупного проекта.
Не имеет значения: все синтаксические / магические вещи в этой библиотекевырывается.Это была интересная идея, которая в приложении стала слишком утомительной и запутанной.