[Twisted-Python] Twisted cred perspective unicode support

rdrb at 123.cl rdrb at 123.cl
Mon Jun 9 21:20:35 MDT 2003


I got problems using Twisted cred with Python2.2.0.
My perspectives names are based on a url encoding.
I have found that there is a problem when PerspectiveName is  unicode.

I also discovered that the error message is not explicative.

The CVS does not have a solution for this problems.

Both diminute problem are solved in the next patch.

Twisted is a great tool.
Thanks you for Twisted.

RodrigoB.

- Post patch for twisted.cred.perspective (Type -> Types, report error type):

the cause:
----------

import types
isinstance(u"/test1", types.StringType) 
=>0

The patch:
----------

class Perspective:
    """I am an Identity's view onto a service.

    I am the interface through which most 'external' code should
    interact with a service; I represent the actions a user may
    perform upon a service, and the state associated with that
    user for that service.
    """

    _service_cached = 0 # Has my service cached me from a loaded store, or do I live in memory usually?

    def __init__(self, perspectiveName, identityName="Nobody"):
        """Create me.

        I require a name for myself and a reference to the service
        I participate in.  (My identity name will be 'Nobody' by
        default, which will normally not resolve.)
        """
        if not isinstance(perspectiveName, types.StringTypes):
            raise TypeError("Expected string, got '%s' (%s)."% (perspectiveName, type(perspectiveName)))
        if not isinstance(identityName, types.StringTypes):
            raise TypeError("Expected string, got '%s' (%s)."% (identityName, type(identityName)))
        self.perspectiveName = perspectiveName
        self.identityName = identityName


The diff
---------

$ diff perspective.py /usr/local/lib/python2.2/site-packages/twisted/cred/perspective.py 
49,52c49,52
<         if not isinstance(perspectiveName, types.StringType):
<             raise TypeError("Expected string, got %s."% perspectiveName)
<         if not isinstance(identityName, types.StringType):
<             raise TypeError("Expected string, got %s."% identityName)
---
>         if not isinstance(perspectiveName, types.StringTypes):
>             raise TypeError("Expected string, got '%s' (%s)."% (perspectiveName, type(perspectiveName)))
>         if not isinstance(identityName, types.StringTypes):
>             raise TypeError("Expected string, got '%s' (%s)."% (identityName, type(identityName)))






More information about the Twisted-Python mailing list