BUY THIS BOOK
Add to Cart

Print Book $49.99


Add to Cart

Print+PDF $64.99

Add to Cart

PDF $39.99

Safari Books Online

What is this?

Add to UK Cart

Print Book £30.99

What is this?

Looking to Reprint or License this content?

Programming Amazon Web Services
Programming Amazon Web Services S3, EC2, SQS, FPS, and SimpleDB

By James Murty
Book Price: $49.99 USD
£30.99 GBP
PDF Price: $39.99

Cover | Table of Contents | Forum | Colophon


Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
Trouble Accessing With Paws Python Code
Allan
post Jun 11 2008, 04:07 PM
Post #1


New Member
*

Group: Members
Posts: 1
Joined: 11-June 08
Member No.: 386



I'm running Python 2.5.2 with the latest version of lxml.

When I try to connect to AWS with the python PAWS code, I receive the following error. Any idea what I'm doing wrong? I have environment variables set for AWS_ACCESS_KEY and AWS_SECRET_KEY.

Thanks in advance for any assistance...


>>> import S3
>>> svc = S3.S3()
>>> svc.list_buckets()
Body:
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>[snipped]</ID>
<DisplayName>allan</DisplayName>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "S3.py", line 95, in list_buckets
for node in self.xpath_list('//ns:Buckets/ns:Bucket', xmldoc):
File "AWS.py", line 448, in xpath_list
return xml_object.xpath(query, {'ns':self.XML_NAMESPACE})
TypeError: function takes at most 1 positional arguments (2 given)
Go to the top of the page
 
+Quote Post
James Murty
post Jun 12 2008, 11:57 AM
Post #2


Active Member
**

Group: Members
Posts: 13
Joined: 21-March 08
Member No.: 161



This error seems to be caused by a change introduced in the lxml library in version 2 (the original code was developed against version 1.3.6).

After updating to latest version of lxml I got the same problem but the fix is fairly simple, you just need to explicitly tell the xpath() method that the second argument is a hash of "namespaces".

In the AWS.py file, edit the xpath_list() function from the original:
CODE
def xpath_list(self, query, xml_object):
    return xml_object.xpath(query, {'ns':self.XML_NAMESPACE})


and add "namespaces=" before the second argument like so:
CODE
def xpath_list(self, query, xml_object):
    return xml_object.xpath(query, namespaces={'ns':self.XML_NAMESPACE})


Hope this helps,
James
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

RSS Lo-Fi Version Time is now: 28th August 2008 - 12:52 AM