Я хотел создать удостоверение идентификатора formencode, поддерживающее IDN, для использования в одном из моих проектов. Я использовал часть кода из проекта Django (http://code.djangoproject.com/svn/django/trunk/django/core/validators.py), но в моем коде I должна быть тривиальная ошибка не могу найти:Ошибка при проверке формы formencode электронной почты
class Email(formencode.validators.Email):
def _to_python(self, value, state):
try:
return super(Email, self)._to_python(value, state)
except formencode.Invalid as e:
# Trivial case failed. Try for possible IDN domain-part
print 'heywo !'
if value and u'@' in value:
parts = value.split(u'@')
try:
parts[-1] = parts[-1].encode('idna')
except UnicodeError:
raise e
try:
super(Email, self)._to_python(u'@'.join(parts), state)
except formencode.Invalid as ex:
raise ex
return value
else:
raise e
Когда я пытаюсь проверить электронную почту с доменом IDN (например: [email protected]ääl.de) недействительна исключения, сгенерированные первый вызов брошен, и часть кода после первое исключение никогда не выполняется («heywo!» никогда не печатается).
Существует пример:
>>> from test.lib.validators import Email
>>> Email().to_python(u'[email protected]ääz.de')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/FormEncode-1.2.3dev-py2.6.egg/formencode /api.py", line 416, in to_python
vp(value, state)
File "/usr/local/lib/python2.6/dist-packages/FormEncode-1.2.3dev-py2.6.egg/formencode /validators.py", line 1352, in validate_python
value, state)
Invalid: The domain portion of the email address is invalid (the portion after the @: z\xe4\xe4z.de)
Что я сделал не так?
Спасибо.
Пожалуйста, измените запись и включить трассировку стека вы получите с ошибкой. – Daenyth
Я добавил след. Как я уже сказал, это результат, который я ожидаю, вызывая валидатор _original_ Email. Это не так:/ – Pierre
Я бы посмотрел строку 1352 в validators.py как отчеты трассировки. Я подозреваю, что тот, кто сделал этот модуль, неправильно обрабатывает части домена юникода. Я также не совсем уверен, что они действительны для начала, но они могут быть легко (у меня недостаточно знаний). Проверяет ли он, когда вы удаляете юникод? – Daenyth