[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