Remote_api configuration with App Engine

前端 未结 2 2080
情歌与酒
情歌与酒 2020-12-11 11:54

Using Python, I\'m trying to connect to my AppEngine app\'s remote_api handler, but I keep getting an error. What I want to do is set up the remote_api stubs to route data

相关标签:
2条回答
  • 2020-12-11 12:21

    If you are only interested in accesing the datastore you can avoid the stub error with the testBed:

    # First, create an instance of the Testbed class.
    myTestBed = testbed.Testbed()
    
    # Then activate the testbed, which prepares the service stubs for use.
    myTestBed.activate()
    
    # Next, declare which service stubs you want to use.
    myTestBed.init_blobstore_stub()
    myTestBed.init_logservice_stub()
    
    0 讨论(0)
  • 2020-12-11 12:23

    assuming you are using high replication datastore now...

    Your app_id is probably wrong, and you also need to pass the address parameter. I whipped this up a while back while reading the oreilly book for appengine(book is severely out of date and not recommended)

    def attach_to_app(app_id, user=None, password=None, path=None, address=None):
        """
        attaches to app_id instance at address (default: <app_id>.appspot.com)
    
        if you don't specify a user/password you will be prompted for one
    
        if you don't specify an address it is assumed to be
        <app_id>.appspot.com
    
        path: path to remote_api handler, if not
        specified, will use /_ah/remote_api 
        """
        path = path or "/_ah/remote_api"
    
        if not address:
            address = "%s.appspot.com" % app_id
    
        init_remote_api(app_id, path, address, user=user, password=password)
    
    
    
    
    def auth_func():
        """
        function to prompt user for credentials
        """
        email_address = raw_input("Email Address: ")
        password = getpass.getpass("Password: ")
        return email_address, password
    
    
    def init_remote_api(app_id, path, address, user=None, password=None):
        """
        generic wrapper to initialize the remoteapi for a given path
    
        required
        =========
        app_id : the app_id of the application to connect to
        path: the path to the remote_api handler ex: /_ah/remote_api
        address: server to connect to ex: myapp.appspot.com
    
        if user and password are not specified you will be prompted on
        connection if needed
        """
        if user and password:
            def my_auth():
                return (user, password)
        else:
            my_auth = auth_func
    
        remote_api_stub.ConfigureRemoteApi(app_id, path, my_auth, address)
        remote_api_stub.MaybeInvokeAuthentication()
        os.environ["SERVER_SOFTWARE"] = "Development (remote_api)/1.0"
    
    # example
    APP_ID = "s~myapp" # when hrds was introduced it became necessary to specify app_id and address note the "s~..."
    ADDRESS = "myapp.appspot.com"
    attach_to_app(APP_ID, address=ADDRESS)
    
    0 讨论(0)
提交回复
热议问题