[redland-dev] unicode issue on os x with python bindings
Suzan Foster
su at islief.nl
Thu May 12 07:27:09 BST 2005
On May 12, 2005, at 12:37 AM, Dave Beckett wrote:
> On Wed, 11 May 2005, Suzan Foster wrote:
>> On May 11, 2005, at 10:31 PM, Christopher Schmidt wrote:
>>
>>> On Wed, May 11, 2005 at 10:19:58PM +0200, Suzan Foster wrote:
>>>> I'm hitting an error on my mac with a python script which I'm not
>>>> seeing when running with windows. It's also my first attempt at
>>>> python,
>>>> which doesn't help :-| Anybody who can steer me in the right
>>>> direction?
>>>>
>>>> http://www.ipodder.org/aboutTheDirectory threw an exception.
>>>> librdf_new_uri() argument 2 must be string without null bytes, not
>>>> str
>
> which line?
Line 34. 1591 in RDF.py.
>>> Not sure exactly what "http://www.ipodder.org/aboutTheDirectory" is
>>> supposed to be: if you could give a copy of the code snippet which is
>>> causing the proglem, it might help me.
>
> I can't run this script here, I get
> Traceback (most recent call last):
> File "opmlwalker.py", line 4, in ?
> class OPMLWalker(saxutils.DefaultHandler):
> AttributeError: 'module' object has no attribute 'DefaultHandler'
You need the Python/XML libraries (http://pyxml.sourceforge.net/).
>> Basically it's the RDF.Uri constructor that's failing. This is the
>> version with the use of str() as you suggested. This however throws
>> the
>> same error. The full script was attached to my original post.
>>
>> def process_channel(self, uri):
>> print "Found channel", uri
>> try:
>> statement = RDF.Statement(RDF.Uri(str(uri)),
>> self.rdftype, self.channel)
>> if self.model.contains_statement(statement) :
>> return
>> model = RDF.Model(self.storage)
>> parser = RDF.Parser(name="rss-tag-soup")
>> parser.parse_into_model(model, uri);
>> if model.contains(statement):
>> self.model.add_statement(statement)
>> print "Added", uri
>> except Exception, e:
>> print uri, "threw an exception.", e
>>
>>>
>>> However, when I've run into this issue in the past, it has been as a
>>> result of trying to pass in a <type 'unicode'> string rather than a
>>> <type 'string'> string. You may want to check your code and run a
>>> str()
>>> around anything that might be of type "unicode": you can test this by
>>> using the function type(variable), and you can cast it by using
>>> str(variable).
>>
>> It was indeed of type unicode, however casting didn't solve the
>> problem.
>
> You shouldn't need to. Although I'm not sure what the exact error
> line or
> data is, RDF.Uri has been able to handle unicode strings since redland
> bindings 1.0.0.2 since this code was added:
> elif type(arg) is unicode:
> import Redland_python
> args['string'] = Redland_python.unicode_to_bytes(arg)
>
> it might be that there need to be other clauses in the RDF.Uri
> constructor
> to turn unicode strings into what redland expects. This is to work
> around
> SWIG's inability to declare unicode strings.
I think it's specific to OS X which is not translating the string
correctly.
Regards,
Suzan Foster.
More information about the redland-dev
mailing list