我有非常简单的python代码来访问Amazon Simple Queue Service。但是我得到了
builtins.TypeError
TypeError: get_queue() missing 1 required positional argument: 'self'
我的代码:
class CloudQueue(object):
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
@app.route('/get/<name>')
def get_queue(self, name):
if(name != None):
queue = self.conn.get_queue(str(name)) <--------- HERE
return conn.get_all_queues()
if __name__ == "__main__":
cq = CloudQueue()
app.debug = True
app.run()
答案 0 :(得分:1)
您无法将方法注册为路线;在装饰器运行时,仍在定义类,并且您注册的所有内容都是未绑定的函数对象。由于它未绑定到实例,因此无法传入self
。
不要在这里使用课程;为每个请求重新创建连接:
@app.route('/get/<name>')
def get_queue(name):
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
queue = conn.get_queue(name)
return 'some response string'
您可以将其设置为全局,但是您需要确保在第一个请求上重新创建连接(因此即使在使用子进程处理请求的WSGI服务器时它也会继续工作):
@app.before_first_request()
def connect_to_boto():
global conn
conn = boto.sqs.connect_to_region("eu-west-1",
aws_access_key_id="abc",
aws_secret_access_key="abc")
@app.route('/get/<name>')
def get_queue(name):
queue = conn.get_queue(name)
return 'some response string'
仅当您确定boto
连接对象是线程安全的时才使用此选项。