装饰发布服务器函数和订阅服务器路由,必要时创建主题/订阅
Flask-PubSubDecorator的Python项目详细描述
烧瓶装饰工
根据需要装饰发布服务器函数和订阅服务器路由以创建主题/订阅。
安装
将此行添加到应用程序的requirements.txt中
Flask-PubSubDecorator
然后执行:
$ pip install -r requirements.txt
或自行安装为:
$ pip install Flask-PubSubDecorator
用法
使用pubsubdecorator非常简单。首先将google_application_credentials环境变量设置为指向有效的json creds文件。
$ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/creds.json
下面的代码片段将帮助您编写代码
fromflaskimportFlask,requestfromPubSubDecoratorimportPubSubDecoratorimportbase64importjsonapp=Flask(__name__)# blueprint can optionally be passed in for registering subscribers in a blueprint endpointapp.pubsub=PubSubDecorator(app)# publisher decorator will inject publisher client and topic path@app.pubsub.publisher(topic='user_confirmed')defuser_confirmed(publisher,topic,user):publisher.publish(topic,data=json.dumps({'user_id':user.id}))# subscriber decorator will register the Flask route, prefixing /_ah/push-handlers# subscriber decorator will parse and inject pubsub message@app.pubsub.subscriber(subscription='process_user_confirmation',topic='user_confirmed',route='/process_user_confirmation',methods=['POST'])defprocess_user_confirmation(message,*args,**kwargs):try:user_id=message.get('user_id')# do some async work here!exceptException:_logger.exception('An unexpected error occurred processing subscription "{0}": {1}'.format(kwargs.get('__subscription__'),request.data))# Unexpected failure, do not ack messagereturn'',422return'',200
安全性
pubsub推送订阅本质上是面向公众的,因此应该受到保护。谷歌推荐的解决方案 将密钥附加到已注册的订阅pushendpoint。pubsubdecorator为您处理这个 提供以下内容:
- OS环境变量
PUBSUB_DECORATOR_API_KEY
- 烧瓶应用程序配置
PUBSUB_DECORATOR_API_KEY
- api_密钥被传递到pubsubdecorator构造函数中。
最佳实践:使用gcloud kms加密密钥,将其存储在gcloud数据存储中,并导出到os环境变量 在运行时。
日志记录
decorators将登录到“flask pubsub decorator”命名空间。
importsysimportloggingimportlogging.handlerslogger=logging.getLogger('flask-pubsub-decorator')logger.setLevel(logging.DEBUG)log_file=logging.handlers.RotatingFileHandler('log_file_name.log',maxBytes=5*1024*1024,backupCount=10)logger.addHandler(log_file)
测试
$ pytest -s tests.py