Dear Google App Engine Group,
since a couple of days I am developing an application within GAE to
communicate with Amazon's Mechanical Turk REST API. Everything is
working perfectly when I am testing locally in my development
environment. After I upload my application to GAE I keep geeting
Errors obviously related to urllib ore urlfetch.
============================== ERROR ==============================
The error I am constantly receiving is the following:
Traceback (most recent call last):
File "/base/python_lib/versions/1/google/appengine/ext/webapp/
__init__.py", line 501, in __call__
handler.get(*groups)
File "/base/python_lib/versions/1/google/appengine/ext/webapp/
util.py", line 57, in check_login
handler_method(self, *args)
File "/base/data/home/apps/guerval/1.333984421936062328/guerval.py",
line 154, in get
mtcGetHitConnector.sendRequest()
File "/base/data/home/apps/guerval/1.333984421936062328/
MTCConnectors/GenericMechanicalTurkConnector.py", line 68, in
sendRequest
urllib.urlencode(self.parameters)).read()
File "/base/python_dist/lib/python2.5/urllib.py", line 84, in
urlopen
return opener.open(url, data)
File "/base/python_dist/lib/python2.5/urllib.py", line 192, in open
return getattr(self, name)(url, data)
File "/base/python_dist/lib/python2.5/urllib.py", line 328, in
open_http
errcode, errmsg, headers = h.getreply()
File "/base/python_dist/lib/python2.5/httplib.py", line 306, in
getreply
response = self._conn.getresponse()
File "/base/python_dist/lib/python2.5/httplib.py", line 194, in
getresponse
self._allow_truncated, self._follow_redirects)
File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py",
line 240, in fetch
return rpc.get_result(allow_truncated)
File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py",
line 387, in get_result
self.check_success(allow_truncated)
File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py",
line 355, in check_success
raise DownloadError(str(e))
DownloadError: ApplicationError: 2
==================================================================
The code that is causing this error looks as follows: (The initiating
code is marked with #####-rows above and below.)
============================== CODE ==============================
'''
Created on 21.05.2009
@author: benjamin.zeller
'''
# Import libraries
import time
import hmac
import sha
import base64
import urllib
import xml.dom.minidom
from google.appengine.api import urlfetch
class GenericMechanicalTurkConnector():
AWS_ACCESS_KEY_ID = ""
AWS_SECRET_ACCESS_KEY = ""
SERVICE_NAME = ""
SERVICE_VERSION = ""
MECHANICAL_TURK_URL = ""
operation = ""
timestamp = ""
signature = ""
parameters = ""
resultXML = ""
def __init__(self, operation):
self.AWS_ACCESS_KEY_ID = "<AWS_ACCESS_KEY_ID>"
self.AWS_SECRET_ACCESS_KEY = "<AWS_SECRET_ACCESS_KEY>"
self.SERVICE_NAME = "AWSMechanicalTurkRequester"
self.SERVICE_VERSION = "2008-04-01"
''' Production Environment '''
'''self.MECHANICAL_TURK_URL = "http://
mechanicalturk.amazonaws.com/onca/xml?"'''
''' Development Environment '''
self.MECHANICAL_TURK_URL = "http://
mechanicalturk.sandbox.amazonaws.com?"
self.operation = operation
self.timestamp= self.generateTimestamp(time.gmtime())
self.signature = self.generateSignature(self.SERVICE_NAME,
self.operation, self.timestamp, self.AWS_SECRET_ACCESS_KEY)
self.parameters = {
'Service': self.SERVICE_NAME,
'Version': self.SERVICE_VERSION,
'AWSAccessKeyId':
self.AWS_ACCESS_KEY_ID,
'Timestamp': self.timestamp,
'Signature': self.signature,
'Operation': self.operation,
}
self.resultXML = "";
# Define authentication routines
def generateTimestamp(self, gmtime):
return time.strftime("%Y-%m-%dT%H:%M:%SZ", gmtime)
def generateSignature(self, service, operation, timestamp,
secret_access_key):
my_sha_hmac = hmac.new(secret_access_key, service + operation
+ timestamp, sha)
my_b64_hmac_digest = base64.encodestring(my_sha_hmac.digest
()).strip()
return my_b64_hmac_digest
# Make the request
def sendRequest(self):
################################## ERROR CAUSE
##################################
resultXmlStr = urllib.urlopen(self.MECHANICAL_TURK_URL,
urllib.urlencode
(self.parameters)).read()
###################################################################################
#resultXmlStr = urlfetch.fetch(url=self.MECHANICAL_TURK_URL,
# payload=urllib.urlencode
(self.parameters),
# method=urlfetch.POST,
# )
print "Debug output: " + resultXmlStr
resultXML = xml.dom.minidom.parseString(resultXmlStr)
self.resultXML = resultXML
def checkForErrorMessage(self, xml):
errorMessage = ""
# Check for and print results and errors
errors_nodes = xml.getElementsByTagName('Errors')
if errors_nodes:
print 'There was an error processing your request:'
for errors_node in errors_nodes:
for error_node in errors_node.getElementsByTagName
('Error'):
errorMessage = ' Error code: ' +
error_node.getElementsByTagName('Code')[0].childNodes[0].data
errorMessage += ' Error message: ' +
error_node.getElementsByTagName('Message')[0].childNodes[0].data
if errorMessage != "":
return errorMessage
def getResult(self):
raise NotImplementedError
==================================================================
Does anyone has any suggestions on how I could resolve this error. I
was already trying the urlfetch.fetch() method (as you can see in the
code) but then the line xml.dom.minidom.parseString(resultXmlStr) did
not work anymore.
I am thankfull for any hints or suggestions
Friendly,
Benjamin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---