装饰发布服务器函数和订阅服务器路由,必要时创建主题/订阅

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为您处理这个 提供以下内容:

  1. OS环境变量PUBSUB_DECORATOR_API_KEY
  2. 烧瓶应用程序配置PUBSUB_DECORATOR_API_KEY
  3. 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从ImageIO中排除特定的TIFF读取器?   JavaJMockit和passbyreference。我们中一定有一个人错了(可能是我!)   java Android camera2放弃了牛轧糖的表面,但在棉花糖上工作   java按字符串中出现的顺序对字符数组进行排序   如何获取Groovy生成的java源代码   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java为什么我的冒泡排序代码会打印出这些奇怪的东西?   java JAXB:typesafeEnumMemberName=“generateName”是否可自定义?   Java编程输入:今天是星期天输出:星期天是今天   java不理解首个OOAD书的吉他示例   java如何从JformattedTextfield检索货币格式值   java可以从相同的源代码生成功能不同的可执行文件吗?