[Checkins] SVN: grok/trunk/src/grok/ you can only pass unicode or
ascii to grok.name
Philipp von Weitershausen
philikon at philikon.de
Sun Oct 15 09:50:46 EDT 2006
Log message for revision 70648:
you can only pass unicode or ascii to grok.name
Changed:
U grok/trunk/src/grok/_grok.py
A grok/trunk/src/grok/tests/view/nameunicode.py
-=-
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py 2006-10-15 13:45:58 UTC (rev 70647)
+++ grok/trunk/src/grok/_grok.py 2006-10-15 13:50:45 UTC (rev 70648)
@@ -15,6 +15,7 @@
"""
import types
import sys
+import re
from zope.dottedname.resolve import resolve
from zope import component
from zope import interface
@@ -114,7 +115,17 @@
if name in frame.f_locals:
raise GrokError(error_message)
frame.f_locals[name] = value
+
+def not_unicode_or_ascii(value):
+ if isinstance(value, unicode):
+ return False
+ if not isinstance(value, str):
+ return True
+ return is_not_ascii(value)
+
+is_not_ascii = re.compile(eval(r'u"[\u0080-\uffff]"')).search
+
def context(obj):
if not (IInterface.providedBy(obj) or isclass(obj)):
raise GrokError("You can only pass classes or interfaces to "
@@ -125,6 +136,8 @@
"or module.")
def name(name):
+ if not_unicode_or_ascii(name):
+ raise GrokError("You can only pass unicode or ASCII to grok.name.")
if not caller_is_class():
raise GrokError("grok.name can only be used on class level.")
set_local('name', name, "grok.name can only be called once per class.")
Added: grok/trunk/src/grok/tests/view/nameunicode.py
===================================================================
--- grok/trunk/src/grok/tests/view/nameunicode.py 2006-10-15 13:45:58 UTC (rev 70647)
+++ grok/trunk/src/grok/tests/view/nameunicode.py 2006-10-15 13:50:45 UTC (rev 70648)
@@ -0,0 +1,28 @@
+# -*- coding: latin-1 -*-
+"""
+You can only pass unicode to `grok.name`:
+
+ >>> pass_unicode()
+ >>> pass_encodedstring()
+ Traceback (most recent call last):
+ ...
+ GrokError: You can only pass unicode or ASCII to grok.name.
+ >>> pass_object()
+ Traceback (most recent call last):
+ ...
+ GrokError: You can only pass unicode or ASCII to grok.name.
+
+"""
+import grok
+
+def pass_unicode():
+ class View(object):
+ grok.name(u'name')
+
+def pass_encodedstring():
+ class View(object):
+ grok.name("ölkj")
+
+def pass_object():
+ class View(object):
+ grok.name(object())
Property changes on: grok/trunk/src/grok/tests/view/nameunicode.py
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list