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 google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to