The pyamf.org (that has already been linked to) is great. 

An alternative (if you dont need the unserialized data server side) is
to use byteArray. I pasted below a very scrappy example of how to get
this working using Google App Engine (in python). Incidentally, the
same GAE had a pyamf example in it, which I have left, but which is
commented out. (The MXML/AS is first, then the python)

tom

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
layout="absolute"
        creationComplete="initApp()">
        
        <mx:Script>
                <![CDATA[
                        
                        import flash.net.*;
                        import flash.utils.*;
                        
                        private var fileID:int
                        
                        public function initApp():void{
                                
                                var args1:Array = new Array
                                var args2:Array = new Array
                                var ba:ByteArray = new ByteArray
                                
                                args1[0] = [1, 3, 10]
                                args1[1] = [4,3,3,4,5]
                                args2 = [0,1]                   
                                ba.writeObject(args1);
                                ba.writeObject(args2);
                                trace("ba position: " + ba.position)
                                ba.position = 0;
                                trace("ba position: " + ba.position)
                                var args3:Array = ba.readObject();
                                trace("ba position: " + ba.position)
                                var args4:Array = ba.readObject();
                                trace("ba position: " + ba.position)
                                for each (var e:* in args3){
                                        trace("args 1 : " + e)
                                }
                                for each (var f:* in args4){
                                        trace("args 2: " + f)
                                }
                                
                                fileID = 1002
                                var loader:URLLoader = new URLLoader();
                        var request:URLRequest = new
URLRequest("http://localhost:8080/byte?fileID="+fileID);
                                request.method = URLRequestMethod.POST
                                request.data = ba
                                request.contentType = 
'application/octet-stream';
                                loader.addEventListener(Event.COMPLETE, 
onWriteComplete);
                                configureListeners(loader);
                                loader.load(request)
                                
                                
                        }
                        
                        private function getData():void{
                                
                                var loader:URLLoader = new URLLoader();
                                loader.dataFormat = URLLoaderDataFormat.BINARY
                        var request:URLRequest = new
URLRequest("http://localhost:8080/byte?fileID="+fileID);
                                request.method = URLRequestMethod.GET
                                request.contentType = 
'application/octet-stream';
                                loader.addEventListener(Event.COMPLETE, onData);
                                configureListeners(loader);
                                loader.load(request)
                                
                                
                                
                        }
                        
                        
                        private function 
configureListeners(dispatcher:IEventDispatcher):void {
            //dispatcher.addEventListener(Event.COMPLETE,
completeHandler);
            dispatcher.addEventListener(Event.OPEN, openHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS,
progressHandler);
           
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
securityErrorHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS,
httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR,
ioErrorHandler);
                }
        
                private function onData(event:Event):void {
                    var loader:URLLoader = URLLoader(event.target);
                    trace("completeHandler: " + loader.data);
                    trace("class: "+ getQualifiedClassName(loader.data))
                    trace("ba position: " + loader.data.position)
                    var b1:Array = loader.data.readObject()
                    for each (var b:* in b1){
                                        trace("args : " + b)
                                }
                    trace("ba position: " + loader.data.position)
                    
                    var b2:Array = loader.data.readObject()
                                for each (var c:* in b2){
                                        trace("args : " + c)
                                }
                    
                }
                        
                        private function onWriteComplete(event:Event):void {
                    trace("write complete: " + event);
                }
                        
                private function openHandler(event:Event):void {
                    trace("openHandler: " + event);
                }
        
                private function progressHandler(event:ProgressEvent):void {
                    trace("progressHandler loaded:" + event.bytesLoaded + "
total: " + event.bytesTotal);
                }
        
                private function
securityErrorHandler(event:SecurityErrorEvent):void {
                    trace("securityErrorHandler: " + event);
                }
        
                private function httpStatusHandler(event:HTTPStatusEvent):void {
                    trace("httpStatusHandler: " + event);
                }
        
                private function ioErrorHandler(event:IOErrorEvent):void {
                    trace("ioErrorHandler: " + event);
                }

                        
                        
                        

                                
                                
                        
                        
                        
                ]]>
        </mx:Script>
        
        <mx:Button label="get data" click="getData()"/>
                

        
</mx:Application>

**************** python for GAE **********************

#!/usr/bin/env python

import wsgiref.handlers
import cgi
import wsgiref.handlers
import os
import logging

from google.appengine.ext import webapp
from google.appengine.ext import db
from google.appengine.ext.webapp import template

#from pyamf.remoting.gateway.google import WebAppGateway


class TestData(db.Model):
   
    s = db.StringProperty()
    d = db.BlobProperty()
    l = db.ListProperty(int)


class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, webapp World!')
        
class Show(webapp.RequestHandler):
    def get(self):
        
        testdata = db.GqlQuery("SELECT * from TestData")
        template_values = {
            'testdata': testdata,
            
            }
        path = os.path.join(os.path.dirname(__file__), 'show.html')
        self.response.out.write(template.render(path, template_values))
    

class Byte(webapp.RequestHandler):
    def get(self):
        
        
        fileID = self.request.get('fileID')
        td = TestData.gql("where s = :1", fileID).get()
        
        self.response.headers['Content-Type'] = 'application/octet-stream'
        self.response.out.write(td.d) 
        
    def post(self):
              
        
        fileID = self.request.get('fileID')
        logging.info("data posted for fileID: " + fileID)
        
        t = TestData()
        t.s = fileID
        
        t.d = db.Blob(self.request.body)
        
        t.put()
        
        


#def echo(data):
#    #self.logger.debug("Echo called. Data is ot type: " + type(data))
#    t = TestData()
#    b = db.Blob(str(data))
#    t.d = b
#    t.s = str(eval(b))
#    #t.l = data
#    t.put()
#    return eval(b)
    

#services = {
#    'myservice.echo': echo,
#}

def main():
    application_paths = [('/', WebAppGateway(services)),
('/helloworld', MainPage), ('/show', Show), ('/byte', Byte)]
    application = webapp.WSGIApplication(application_paths, debug=True)
    wsgiref.handlers.CGIHandler().run(application)




--- In [email protected], "rbross77" <ro...@...> wrote:
>
> Hello,
> 
> I am look ing for some code example of using Python with Flex.
> I would like to be able to retrieve data using RemoteObjects and
call the Python file/program 
> to return the results in AMF format and not XML.
> 
> Thank you,
>


Reply via email to