import stackless
import pickle

from twisted.web import client

def tasklet():
    # create an example state
    factory = client.HTTPClientFactory("http://www.google.com/", agent = "stackless/1.0" )
        
    get_complete = [False]
    get_failed = [False]
        
    def _doFailure(data):
        get_failed[0] = factory.status
    
    def _doSuccess(data):
        get_complete[0] = factory.status
    
    factory.deferred.addCallback(_doSuccess).addErrback(_doFailure)
    
    while True:
        stackless.schedule()

def test():
    # run the task
    task = stackless.tasklet(tasklet)
    task.setup()
    task.run()
    
    # pump once
    stackless.schedule()
        
    # now serialise
    data = pickle.dumps(task)
    
    # now deserialise
    obj =  pickle.loads(data)
    
    # resume
    task.kill()
    obj.insert()
    
    # pump again
    stackless.schedule()
     
if __name__=="__main__":
    test()