2010-10-24 44 views
1

我试图修补一个测试框架内置在python JavaScript中称为mootools-test-runner(我是一个前端开发人员白天,所以我的Python技能是很弱......真的很弱)使用threading.Timer响应HTTPRequest后延迟响应

用例是我们希望能够向服务器发出一个json请求,并让它在返回之前延迟x个时间量 - 最初它被写入使用睡眠方法,但阻止了多个同时发生的请求。 Sooo ...在拨通了大约一天后,我到达了下面的代码。我看到的问题(尽管我的代码可能有很多问题)是:

视图test_runner.views.echo_json没有返回HttpResponse对象。

如果任何人可以提供任何建议或指引我在正确的方向我将超级感激 - 谢谢!

def echo_json(req, wasDelayed=False): 
    if req.REQUEST.get('delay') and wasDelayed == False: 
     sleeper(req, echo_jsonp) 
    else: 
     response = {} 
     callback = req.REQUEST.get('callback', False) 
     noresponse_eys = ['callback', 'delay'] 
     for key, value in req.REQUEST.items(): 
      if key not in noresponse_keys: 
       response.update({key: value}) 

     response = simplejson.dumps(response) 

     if callback: 
      response = '%s(%s);' % (callback, response) 

     return HttpResponse(response, mimetype='application/javascript') 

def sleeper(req, callback) 
    delay = float(req.REQUEST.get('delay')) 
    t = threading.Timer(delay, functools.partial(callback, req, true)) 
    t.start() 
+0

请将您的Python框架添加到标签。 – 2010-10-24 19:54:34

+0

哦,对不起,谢谢:) – jacobthornton 2010-10-24 20:01:02

回答

0

你确定你想要的for key, value循环内的return声明?你只允许一次迭代,然后返回。

另外,检查函数的流程。有些情况下会返回无。最简单的方法是打印出请求对象,并在函数不返回HttpResponse对象的情况下检查它。

看到,如果你的函数将返回无

  • req.request包含关键字 '延迟' 和wasDelayed为True
  • req.REQUEST.items()是空

我不能确定,但​​我认为这两个问题是else:return那里。不应该在else:以下的代码执行响应是否延迟?并且回归声明不应该在for循环之外?

+0

是的,它看起来像你在该返回线上有一个额外的缩进。试试看它停止。 – 2010-10-24 20:21:08

+0

else在某种奇怪的睡眠循环中执行相同的代码。一个更标准的方式来做这件事将是一段时间。 – 2010-10-24 20:22:09

+0

teh for循环内的返回是复制粘贴错误 - 对此感到遗憾。感谢您的帮助 – jacobthornton 2010-10-24 20:29:46