2023-02-24T13:49:52,453 Created temporary directory: /tmp/pip-ephem-wheel-cache-1hbzcc6_ 2023-02-24T13:49:52,456 Created temporary directory: /tmp/pip-build-tracker-w5snexdm 2023-02-24T13:49:52,456 Initialized build tracking at /tmp/pip-build-tracker-w5snexdm 2023-02-24T13:49:52,456 Created build tracker: /tmp/pip-build-tracker-w5snexdm 2023-02-24T13:49:52,456 Entered build tracker: /tmp/pip-build-tracker-w5snexdm 2023-02-24T13:49:52,457 Created temporary directory: /tmp/pip-wheel-ecu6nxhf 2023-02-24T13:49:52,462 DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453 2023-02-24T13:49:52,464 Created temporary directory: /tmp/pip-ephem-wheel-cache-haytg8y6 2023-02-24T13:49:52,493 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-02-24T13:49:52,496 2 location(s) to search for versions of flask-gcp-pubsub: 2023-02-24T13:49:52,496 * https://pypi.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,496 * https://www.piwheels.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,497 Fetching project page and analyzing links: https://pypi.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,497 Getting page https://pypi.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,499 Found index url https://pypi.org/simple 2023-02-24T13:49:52,551 Fetched page https://pypi.org/simple/flask-gcp-pubsub/ as application/vnd.pypi.simple.v1+json 2023-02-24T13:49:52,557 Found link https://files.pythonhosted.org/packages/86/31/f5c0b0a70ee4d7c459bff74edf868ebe4c3311dd6d1dc535cb1a6fd24839/flask-gcp-pubsub-0.0.0.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.0.0 2023-02-24T13:49:52,558 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/df/fe/187a54cb034585f0abe1d20c5cb4aaaf42e29cb930da9f7c0be19dcef9bd/flask_gcp_pubsub-0.0.0-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,558 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/dd/5d/2d880d93e3d6974f8d979bae7edd9eecf4b1b8c3b8151af857beef431435/flask_gcp_pubsub-0.1.0-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,559 Found link https://files.pythonhosted.org/packages/af/63/e087cee3bb381340c63abae72693e15b6886816651c2175c7771c3e395de/flask-gcp-pubsub-0.1.1.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.1.1 2023-02-24T13:49:52,559 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/31/82/5003e5fe58dfdd54e0e165d3e4a3e3c365923130b737dc13a15b7b84c009/flask_gcp_pubsub-0.1.1-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,560 Found link https://files.pythonhosted.org/packages/8f/7d/e18e9635401330bc156bfe087716e0f3244d5c3c50a9515415b262b9574f/flask-gcp-pubsub-0.1.2.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.1.2 2023-02-24T13:49:52,560 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/78/cd/601af34e8214c3df745b3e53cbfd7b97d6b1671a0cd04656f1dff85d1430/flask_gcp_pubsub-0.1.2-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,561 Found link https://files.pythonhosted.org/packages/ca/e1/f5ea6e88d9c73bef5c1930ff049f0cbc4eecc2a064e603978239b0e5a112/flask-gcp-pubsub-0.2.0.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.0 2023-02-24T13:49:52,561 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/c3/eb/d2d31a4a47508e34ffc44b5aba4931f6134f2332de3c32ac121e004f4d88/flask_gcp_pubsub-0.2.0-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,562 Found link https://files.pythonhosted.org/packages/42/50/b0f9451c844df9633bce784ae62e3ed22321311e6947976b0444d5d48264/flask-gcp-pubsub-0.2.1.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.1 2023-02-24T13:49:52,562 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/8f/43/d6a1e9e73f70458587f4d20142413c8a26062f34752ea0312bd5b9689d35/flask_gcp_pubsub-0.2.1-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,562 Found link https://files.pythonhosted.org/packages/e2/44/22d058e464c69d441c44c594708c80d4e73d058557620d3db7dfaf75db72/flask-gcp-pubsub-0.2.2.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.2 2023-02-24T13:49:52,563 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/07/4d/506fb918ff1fa263deb39b63d0d9e333c6d99805044ffbdc0a00ee229254/flask_gcp_pubsub-0.2.2-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,563 Found link https://files.pythonhosted.org/packages/56/b7/2b86b0cad8355fb86743993318bf6edada5b2a8573fd9876aa79a7f0d933/flask-gcp-pubsub-0.2.3.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.3 2023-02-24T13:49:52,564 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/7f/a6/2ed862fde2d7164f272b12f230cdec174b57d229bca5cde861cfbd1e7747/flask_gcp_pubsub-0.2.3-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,564 Found link https://files.pythonhosted.org/packages/8a/ee/1de4cf5b18ca128a5a027648209bbeaa0a46d0fbf5f6652c507294a88dcd/flask-gcp-pubsub-0.2.4.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.4 2023-02-24T13:49:52,564 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/da/ad/a5c983301d66c5e722196aa974e8c22ea6afad0d75277f3926e3878f15d9/flask_gcp_pubsub-0.2.4-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,565 Found link https://files.pythonhosted.org/packages/98/73/50439406ac20fbff1aae15d91d3360b138b7ea4e6c348f14bd5103b7eaed/flask-gcp-pubsub-0.2.5.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.5 2023-02-24T13:49:52,565 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/7f/17/2a2e3050ca615a5c4ab225d9998b3684b8eaf5f0b19a4e2f0a35011dc6f6/flask_gcp_pubsub-0.2.5-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,566 Found link https://files.pythonhosted.org/packages/13/60/e25ed7b8eba15a7630411a60b2b5cbfd118b3664e55c75928c5e678ffb4d/flask-gcp-pubsub-0.2.6.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.6 2023-02-24T13:49:52,566 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/33/ef/2f9dcad1b6ecc489491b67df9fef470188fd972ed9cd1cdc353bb3ccba3c/flask_gcp_pubsub-0.2.6-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,567 Found link https://files.pythonhosted.org/packages/f2/30/2fab740f21e7bf3f721d14137844704ae7bfd67c5ff384c6ba835d50594b/flask-gcp-pubsub-0.2.7.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.7 2023-02-24T13:49:52,567 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/23/1a/8c3ccd38cf66c4f8b8777ec70c6ce44d143537df1620f3e768dc8c6007e5/flask_gcp_pubsub-0.2.7-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,567 Found link https://files.pythonhosted.org/packages/a5/6f/c1a918c892b983491c8d63f1a6a4aacf293602bc4b6ba3ab25d5da5ed3a5/flask-gcp-pubsub-0.2.8.tar.gz (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9), version: 0.2.8 2023-02-24T13:49:52,568 Skipping link: No binaries permitted for flask-gcp-pubsub: https://files.pythonhosted.org/packages/0e/67/f367f4e54c0858b971dd5ec5494b2d8ed8f65d3c47347f17bba2f7a3ff03/flask_gcp_pubsub-0.2.8-py3-none-any.whl (from https://pypi.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,568 Fetching project page and analyzing links: https://www.piwheels.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,568 Getting page https://www.piwheels.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,569 Found index url https://www.piwheels.org/simple 2023-02-24T13:49:52,724 Fetched page https://www.piwheels.org/simple/flask-gcp-pubsub/ as text/html 2023-02-24T13:49:52,729 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.6-py3-none-any.whl#sha256=07fa6ffe8d3bfd99727ac0422933ba9256005b9c7af1905f0daa86273ffef95d (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,730 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.5-py3-none-any.whl#sha256=21e69287614b51828f8a11095fcb0403067e4d4d1db56762758405b29418c05c (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,730 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.4-py3-none-any.whl#sha256=0328235257659bc46d82d864be32ecec934b123f60c24322fc300034ac2ed8df (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,730 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.3-py3-none-any.whl#sha256=04b86be785a84b0914ba24b95442a99a4b987e72cb91c070b4ff45cfaa3c8140 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,731 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.2-py3-none-any.whl#sha256=542f99287ca41322215ffcd8396d79e3ed4cb5942eb32c457cb4395183ea3754 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,731 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.1-py3-none-any.whl#sha256=8aeaf5e808c46f4266f3e28b374c2d017144564e71e536f60221a7a3ea094703 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,731 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.2.0-py3-none-any.whl#sha256=09f9b0d31963f2cac92d927cfc7fe935e346abef0a6a4662198442eeedb74ba8 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,732 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.1.2-py3-none-any.whl#sha256=c7af52c9e03268207a069fb9977052054bbeff82d2bba29490d3a70c0d68ad3e (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,732 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.1.1-py3-none-any.whl#sha256=c1fa0b3cd09351a7d90d1d79b52a5c796e0d9649c0578297467820b6432f7b48 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,732 Skipping link: No binaries permitted for flask-gcp-pubsub: https://www.piwheels.org/simple/flask-gcp-pubsub/flask_gcp_pubsub-0.0.0-py3-none-any.whl#sha256=00de094418db500b7a05819cc68496778fcd13b0f6c0108549b87f81b96fa4a8 (from https://www.piwheels.org/simple/flask-gcp-pubsub/) (requires-python:>=3.9) 2023-02-24T13:49:52,732 Skipping link: not a file: https://www.piwheels.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,733 Skipping link: not a file: https://pypi.org/simple/flask-gcp-pubsub/ 2023-02-24T13:49:52,759 Given no hashes to check 1 links for project 'flask-gcp-pubsub': discarding no candidates 2023-02-24T13:49:52,782 Collecting flask-gcp-pubsub==0.2.7 2023-02-24T13:49:52,785 Created temporary directory: /tmp/pip-unpack-eznfamci 2023-02-24T13:49:52,968 Downloading flask-gcp-pubsub-0.2.7.tar.gz (21 kB) 2023-02-24T13:49:53,013 Added flask-gcp-pubsub==0.2.7 from https://files.pythonhosted.org/packages/f2/30/2fab740f21e7bf3f721d14137844704ae7bfd67c5ff384c6ba835d50594b/flask-gcp-pubsub-0.2.7.tar.gz to build tracker '/tmp/pip-build-tracker-w5snexdm' 2023-02-24T13:49:53,018 Created temporary directory: /tmp/pip-build-env-uttgzbtt 2023-02-24T13:49:53,029 Installing build dependencies: started 2023-02-24T13:49:53,030 Running command pip subprocess to install build dependencies 2023-02-24T13:49:54,211 Using pip 23.0.1 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9) 2023-02-24T13:49:54,777 DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453 2023-02-24T13:49:54,803 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-02-24T13:49:56,450 Collecting setuptools>=61.0.0 2023-02-24T13:49:56,581 Using cached https://www.piwheels.org/simple/setuptools/setuptools-67.4.0-py3-none-any.whl (1.1 MB) 2023-02-24T13:49:56,842 Collecting wheel 2023-02-24T13:49:56,865 Using cached https://www.piwheels.org/simple/wheel/wheel-0.38.4-py3-none-any.whl (36 kB) 2023-02-24T13:49:58,659 Installing collected packages: wheel, setuptools 2023-02-24T13:49:58,810 Creating /tmp/pip-build-env-uttgzbtt/overlay/bin 2023-02-24T13:49:58,813 changing mode of /tmp/pip-build-env-uttgzbtt/overlay/bin/wheel to 755 2023-02-24T13:50:01,093 Successfully installed setuptools-67.4.0 wheel-0.38.4 2023-02-24T13:50:01,570 Installing build dependencies: finished with status 'done' 2023-02-24T13:50:01,577 Getting requirements to build wheel: started 2023-02-24T13:50:01,578 Running command Getting requirements to build wheel 2023-02-24T13:50:02,136 /tmp/pip-build-env-uttgzbtt/overlay/lib/python3.9/site-packages/setuptools/config/_apply_pyprojecttoml.py:103: _WouldIgnoreField: 'readme' defined outside of `pyproject.toml` would be ignored. 2023-02-24T13:50:02,137 !! 2023-02-24T13:50:02,137 ########################################################################## 2023-02-24T13:50:02,137 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-02-24T13:50:02,137 ########################################################################## 2023-02-24T13:50:02,138 The following seems to be defined outside of `pyproject.toml`: 2023-02-24T13:50:02,138 `readme = '# Flask GCP Pub/Sub\n\nLite distributed task queue using Google Cloud Platform (GCP) Pub/Sub\n\n[![PyPI version](https://img.shields.io/pypi/v/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![PyPI downloads](https://img.shields.io/pypi/dm/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![GNU GPLv3](https://img.shields.io/github/license/wildsys/flask-gcp-pubsub)](https://www.gnu.org/licenses/gpl-3.0.html)\n\n\n\n- [🤔 What does this package does?](#-what-does-this-package-does)\n- [🚀 Getting started](#-getting-started)\n - [Prerequisites](#prerequisites)\n - [Installation](#installation)\n - [Full example](#full-example)\n - [Bucket notification](#bucket-notification)\n - [Configuration](#configuration)\n- [🔮 Roadmap](#-roadmap)\n - [TO BE CONFIRMED](#to-be-confirmed)\n\n\n\n## 🤔 What does this package does?\n\nAs Celery, but in a lighter version, this package allows you to run operations asynchronously in your Flask project, but without the choice of the broker: it only uses GCP Pub/Sub.\n\nTechnically, this package can run without Flask, but, historically, it comes to have a quick-win for migrating to GCP Cloud Run using the Pub/Sub system, from an existing project using Flask + Celery.\n\nThis package aims to remove some painful tasks by:\n- Creating one dedicated topic for each function\n- Creating one dedicated reusable subscription for each function\n\nWe **do not recommand** this package for the following cases:\n- You need to reuse your development in a multi-cloud context\n- You have high volume of messages to process (not tested)\n\nThis package is given "as it", without garantees, under the GPLv3 License.\n\n## 🚀 Getting started\n\n### Prerequisites\n\n- A [Google Cloud account](https://console.cloud.google.com/)\n- A GCP project ([here to create a new one](https://console.cloud.google.com/projectcreate)), with [Pub/Sub API enabled](https://console.cloud.google.com/apis/library/pubsub.googleapis.com) (take care to select the good one)\n- A [Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) for which one you need a credential JSON file (`creds.json` in example below), with roles:\n - Pub/Sub Admin\n- A local environment with Python >= 3.9\n\n### Installation\n\n```python\npip install flask-gcp-pubsub\n```\n\n### Full example\n\n`demo.py`\n```python\n#!/usr/bin/env python\n# coding: utf-8\n\nfrom flask import Flask, make_response\nfrom flask_gcp_pubsub import PubSub\n\napp = Flask(__name__)\npubsub = PubSub(\n app,\n project_id=\'\',\n gcp_credentials_file=\'./creds.json\'\n)\n\n@pubsub.task\ndef my_task(msg1, msg2):\n """Awesome delayed execution"""\n print(\'test\', msg1, msg2)\n return \'ok\'\n\n@app.route(\'/test\')\ndef route_test():\n """Launch delayed execution"""\n my_task.delay(\'test1\', \'test2\')\n return make_response(\'ok\', 200)\n```\n\n**WARNING**: do not forget to replace `` with you GCP project ID (not number) and to downloed the JSON-formatted key from GCP Console.\n\n`wsgi.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import app\n\n# Start\nif __name__ == \'__main__\':\n app.run()\n```\n\n`wsgi_delayed.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import pubsub\n\n# Start\nif __name__ == \'__main__\':\n pubsub.run()\n```\n\nThis command will launch the Flask server:\n```shell\nflask run --port 9090\n```\n\nThis command will launch the asynchronous tasks manager:\n```shell\npython wsgi_delayed.py\n```\n\nYou can now navigate to http://localhost:9090/test\nAnd if everything goes OK, you just have to check the content of the output in console, which should look something like that:\n```\nStart consumers\nstatus=received message_id=6860318059876990 function=my_task\ntest test1 test2\nstatus=processed message_id=6860318059876990 function=my_task result=ok execution_time=6.818771362304688e-05\n```\n\n### Bucket notification\n\nYou can also create a task based on GCP Storage, by receiving a notification on any supported event from a bucket.\n\n```python\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_FINALIZE\'])\ndef my_bucket_notifications_create(*args, **kwargs):\n print(\'FINALIZE\', args, kwargs)\n\n\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_DELETE\'])\ndef my_bucket_notifications_delete(*args, **kwargs):\n print(\'DELETE\', args, kwargs)\n```\n\nFor the specific Storage product, Google create a specific Service Account for specific actions, that you cannot choose. [You can found it here.](https://console.cloud.google.com/storage/settings;tab=project_access)\n\nYou have to add the **Pub/Sub Admin** role for that particular Service Account in [IAM](https://console.cloud.google.com/iam-admin/iam).\n\nThe *kwargs* returns [all attributes of the Pub/Sub notification](https://cloud.google.com/storage/docs/pubsub-notifications#attributes).\n\nIf you change the function name, the auto-clean included at start-up cannot works. As you cannot excess 10 events per bucket, do not forget to clean previous subscription with commands:\n\n```shell\ngcloud storage buckets notifications list gs://\ngcloud storage buckets notifications delete gs://\n```\n\n### Configuration\n\nConfiguration can be done using keyword arguments in class instantiation and/or flask environment variable (set with `config.update`).\nIf both method used for one configuration key, the class instanciation is primary.\n\n| Flask env variable | Keyword argument | Usage | How-to get? |\n|-|-|-|-|\n| `PUBSUB_PROJECT_ID` | `project_id` | GCP project ID | See [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_JSON` | `gcp_credentials_json` | Service account credentials, as JSON string format | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_FILE` | `gcp_credentials_file` | Servicce account credentials, as JSON local file | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CONCURRENT_CONSUMERS` | `concurrent_consumers` | Number of simultaneous consumer (default: `4`) | |\n| `PUBSUB_CONCURRENT_MESSAGES` | `concurrent_messages` | Number of messages pull from topic per consumer per call (default: `2`) | |\n| `PUBSUB_TOPIC_PREFIX` | `topic_prefix` | Prefix for all topic used in the instance, useful for feature branches using same project. | |\n| `PUBSUB_AUTO_SETUP` | `auto_setup` | Enable the auto-setup for Bucket notifications to Pub/Sub (default: `false`) | |\n\n\n## 🔮 Roadmap\n\n- [ ] Priority in the treatment of messages per functions\n- [ ] Logging instead of print (+ option to format as JSON)\n- [ ] Contributing manual\n- [x] Documentation about Flask configuration keys and their counterpart on PubSub direct call\n\n### TO BE CONFIRMED\n\n- [ ] Region selection (default: all regions) - can be edited in Storage Rules of Topic for the moment\n'` 2023-02-24T13:50:02,139 According to the spec (see the link below), however, setuptools CANNOT 2023-02-24T13:50:02,139 consider this value unless 'readme' is listed as `dynamic`. 2023-02-24T13:50:02,139 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-02-24T13:50:02,139 For the time being, `setuptools` will still consider the given value (as a 2023-02-24T13:50:02,139 **transitional** measure), but please note that future releases of setuptools will 2023-02-24T13:50:02,140 follow strictly the standard. 2023-02-24T13:50:02,140 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2023-02-24T13:50:02,140 remove the `[project]` table from your file and rely entirely on other means of 2023-02-24T13:50:02,140 configuration. 2023-02-24T13:50:02,140 !! 2023-02-24T13:50:02,141 warnings.warn(msg, _WouldIgnoreField) 2023-02-24T13:50:02,434 running egg_info 2023-02-24T13:50:02,440 writing src/flask_gcp_pubsub.egg-info/PKG-INFO 2023-02-24T13:50:02,442 writing dependency_links to src/flask_gcp_pubsub.egg-info/dependency_links.txt 2023-02-24T13:50:02,445 writing requirements to src/flask_gcp_pubsub.egg-info/requires.txt 2023-02-24T13:50:02,446 writing top-level names to src/flask_gcp_pubsub.egg-info/top_level.txt 2023-02-24T13:50:02,462 reading manifest file 'src/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:02,463 adding license file 'LICENSE' 2023-02-24T13:50:02,466 writing manifest file 'src/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:02,561 Getting requirements to build wheel: finished with status 'done' 2023-02-24T13:50:02,571 Created temporary directory: /tmp/pip-modern-metadata-6ua7w1x4 2023-02-24T13:50:02,574 Preparing metadata (pyproject.toml): started 2023-02-24T13:50:02,575 Running command Preparing metadata (pyproject.toml) 2023-02-24T13:50:03,120 /tmp/pip-build-env-uttgzbtt/overlay/lib/python3.9/site-packages/setuptools/config/_apply_pyprojecttoml.py:103: _WouldIgnoreField: 'readme' defined outside of `pyproject.toml` would be ignored. 2023-02-24T13:50:03,121 !! 2023-02-24T13:50:03,121 ########################################################################## 2023-02-24T13:50:03,121 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-02-24T13:50:03,121 ########################################################################## 2023-02-24T13:50:03,122 The following seems to be defined outside of `pyproject.toml`: 2023-02-24T13:50:03,122 `readme = '# Flask GCP Pub/Sub\n\nLite distributed task queue using Google Cloud Platform (GCP) Pub/Sub\n\n[![PyPI version](https://img.shields.io/pypi/v/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![PyPI downloads](https://img.shields.io/pypi/dm/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![GNU GPLv3](https://img.shields.io/github/license/wildsys/flask-gcp-pubsub)](https://www.gnu.org/licenses/gpl-3.0.html)\n\n\n\n- [🤔 What does this package does?](#-what-does-this-package-does)\n- [🚀 Getting started](#-getting-started)\n - [Prerequisites](#prerequisites)\n - [Installation](#installation)\n - [Full example](#full-example)\n - [Bucket notification](#bucket-notification)\n - [Configuration](#configuration)\n- [🔮 Roadmap](#-roadmap)\n - [TO BE CONFIRMED](#to-be-confirmed)\n\n\n\n## 🤔 What does this package does?\n\nAs Celery, but in a lighter version, this package allows you to run operations asynchronously in your Flask project, but without the choice of the broker: it only uses GCP Pub/Sub.\n\nTechnically, this package can run without Flask, but, historically, it comes to have a quick-win for migrating to GCP Cloud Run using the Pub/Sub system, from an existing project using Flask + Celery.\n\nThis package aims to remove some painful tasks by:\n- Creating one dedicated topic for each function\n- Creating one dedicated reusable subscription for each function\n\nWe **do not recommand** this package for the following cases:\n- You need to reuse your development in a multi-cloud context\n- You have high volume of messages to process (not tested)\n\nThis package is given "as it", without garantees, under the GPLv3 License.\n\n## 🚀 Getting started\n\n### Prerequisites\n\n- A [Google Cloud account](https://console.cloud.google.com/)\n- A GCP project ([here to create a new one](https://console.cloud.google.com/projectcreate)), with [Pub/Sub API enabled](https://console.cloud.google.com/apis/library/pubsub.googleapis.com) (take care to select the good one)\n- A [Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) for which one you need a credential JSON file (`creds.json` in example below), with roles:\n - Pub/Sub Admin\n- A local environment with Python >= 3.9\n\n### Installation\n\n```python\npip install flask-gcp-pubsub\n```\n\n### Full example\n\n`demo.py`\n```python\n#!/usr/bin/env python\n# coding: utf-8\n\nfrom flask import Flask, make_response\nfrom flask_gcp_pubsub import PubSub\n\napp = Flask(__name__)\npubsub = PubSub(\n app,\n project_id=\'\',\n gcp_credentials_file=\'./creds.json\'\n)\n\n@pubsub.task\ndef my_task(msg1, msg2):\n """Awesome delayed execution"""\n print(\'test\', msg1, msg2)\n return \'ok\'\n\n@app.route(\'/test\')\ndef route_test():\n """Launch delayed execution"""\n my_task.delay(\'test1\', \'test2\')\n return make_response(\'ok\', 200)\n```\n\n**WARNING**: do not forget to replace `` with you GCP project ID (not number) and to downloed the JSON-formatted key from GCP Console.\n\n`wsgi.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import app\n\n# Start\nif __name__ == \'__main__\':\n app.run()\n```\n\n`wsgi_delayed.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import pubsub\n\n# Start\nif __name__ == \'__main__\':\n pubsub.run()\n```\n\nThis command will launch the Flask server:\n```shell\nflask run --port 9090\n```\n\nThis command will launch the asynchronous tasks manager:\n```shell\npython wsgi_delayed.py\n```\n\nYou can now navigate to http://localhost:9090/test\nAnd if everything goes OK, you just have to check the content of the output in console, which should look something like that:\n```\nStart consumers\nstatus=received message_id=6860318059876990 function=my_task\ntest test1 test2\nstatus=processed message_id=6860318059876990 function=my_task result=ok execution_time=6.818771362304688e-05\n```\n\n### Bucket notification\n\nYou can also create a task based on GCP Storage, by receiving a notification on any supported event from a bucket.\n\n```python\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_FINALIZE\'])\ndef my_bucket_notifications_create(*args, **kwargs):\n print(\'FINALIZE\', args, kwargs)\n\n\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_DELETE\'])\ndef my_bucket_notifications_delete(*args, **kwargs):\n print(\'DELETE\', args, kwargs)\n```\n\nFor the specific Storage product, Google create a specific Service Account for specific actions, that you cannot choose. [You can found it here.](https://console.cloud.google.com/storage/settings;tab=project_access)\n\nYou have to add the **Pub/Sub Admin** role for that particular Service Account in [IAM](https://console.cloud.google.com/iam-admin/iam).\n\nThe *kwargs* returns [all attributes of the Pub/Sub notification](https://cloud.google.com/storage/docs/pubsub-notifications#attributes).\n\nIf you change the function name, the auto-clean included at start-up cannot works. As you cannot excess 10 events per bucket, do not forget to clean previous subscription with commands:\n\n```shell\ngcloud storage buckets notifications list gs://\ngcloud storage buckets notifications delete gs://\n```\n\n### Configuration\n\nConfiguration can be done using keyword arguments in class instantiation and/or flask environment variable (set with `config.update`).\nIf both method used for one configuration key, the class instanciation is primary.\n\n| Flask env variable | Keyword argument | Usage | How-to get? |\n|-|-|-|-|\n| `PUBSUB_PROJECT_ID` | `project_id` | GCP project ID | See [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_JSON` | `gcp_credentials_json` | Service account credentials, as JSON string format | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_FILE` | `gcp_credentials_file` | Servicce account credentials, as JSON local file | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CONCURRENT_CONSUMERS` | `concurrent_consumers` | Number of simultaneous consumer (default: `4`) | |\n| `PUBSUB_CONCURRENT_MESSAGES` | `concurrent_messages` | Number of messages pull from topic per consumer per call (default: `2`) | |\n| `PUBSUB_TOPIC_PREFIX` | `topic_prefix` | Prefix for all topic used in the instance, useful for feature branches using same project. | |\n| `PUBSUB_AUTO_SETUP` | `auto_setup` | Enable the auto-setup for Bucket notifications to Pub/Sub (default: `false`) | |\n\n\n## 🔮 Roadmap\n\n- [ ] Priority in the treatment of messages per functions\n- [ ] Logging instead of print (+ option to format as JSON)\n- [ ] Contributing manual\n- [x] Documentation about Flask configuration keys and their counterpart on PubSub direct call\n\n### TO BE CONFIRMED\n\n- [ ] Region selection (default: all regions) - can be edited in Storage Rules of Topic for the moment\n'` 2023-02-24T13:50:03,123 According to the spec (see the link below), however, setuptools CANNOT 2023-02-24T13:50:03,123 consider this value unless 'readme' is listed as `dynamic`. 2023-02-24T13:50:03,123 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-02-24T13:50:03,123 For the time being, `setuptools` will still consider the given value (as a 2023-02-24T13:50:03,123 **transitional** measure), but please note that future releases of setuptools will 2023-02-24T13:50:03,124 follow strictly the standard. 2023-02-24T13:50:03,124 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2023-02-24T13:50:03,124 remove the `[project]` table from your file and rely entirely on other means of 2023-02-24T13:50:03,124 configuration. 2023-02-24T13:50:03,124 !! 2023-02-24T13:50:03,125 warnings.warn(msg, _WouldIgnoreField) 2023-02-24T13:50:03,403 running dist_info 2023-02-24T13:50:03,409 creating /tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info 2023-02-24T13:50:03,414 writing /tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/PKG-INFO 2023-02-24T13:50:03,417 writing dependency_links to /tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/dependency_links.txt 2023-02-24T13:50:03,419 writing requirements to /tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/requires.txt 2023-02-24T13:50:03,420 writing top-level names to /tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/top_level.txt 2023-02-24T13:50:03,422 writing manifest file '/tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:03,436 reading manifest file '/tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:03,439 adding license file 'LICENSE' 2023-02-24T13:50:03,441 writing manifest file '/tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:03,442 creating '/tmp/pip-modern-metadata-6ua7w1x4/flask_gcp_pubsub-0.2.7.dist-info' 2023-02-24T13:50:03,575 Preparing metadata (pyproject.toml): finished with status 'done' 2023-02-24T13:50:03,582 Source in /tmp/pip-wheel-ecu6nxhf/flask-gcp-pubsub_5a661108197744318efb330507527e7e has version 0.2.7, which satisfies requirement flask-gcp-pubsub==0.2.7 from https://files.pythonhosted.org/packages/f2/30/2fab740f21e7bf3f721d14137844704ae7bfd67c5ff384c6ba835d50594b/flask-gcp-pubsub-0.2.7.tar.gz 2023-02-24T13:50:03,583 Removed flask-gcp-pubsub==0.2.7 from https://files.pythonhosted.org/packages/f2/30/2fab740f21e7bf3f721d14137844704ae7bfd67c5ff384c6ba835d50594b/flask-gcp-pubsub-0.2.7.tar.gz from build tracker '/tmp/pip-build-tracker-w5snexdm' 2023-02-24T13:50:03,590 Created temporary directory: /tmp/pip-unpack-qk1y6xy1 2023-02-24T13:50:03,591 Building wheels for collected packages: flask-gcp-pubsub 2023-02-24T13:50:03,595 Created temporary directory: /tmp/pip-wheel-cepp543n 2023-02-24T13:50:03,595 Destination directory: /tmp/pip-wheel-cepp543n 2023-02-24T13:50:03,598 Building wheel for flask-gcp-pubsub (pyproject.toml): started 2023-02-24T13:50:03,599 Running command Building wheel for flask-gcp-pubsub (pyproject.toml) 2023-02-24T13:50:04,098 /tmp/pip-build-env-uttgzbtt/overlay/lib/python3.9/site-packages/setuptools/config/_apply_pyprojecttoml.py:103: _WouldIgnoreField: 'readme' defined outside of `pyproject.toml` would be ignored. 2023-02-24T13:50:04,099 !! 2023-02-24T13:50:04,099 ########################################################################## 2023-02-24T13:50:04,099 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-02-24T13:50:04,099 ########################################################################## 2023-02-24T13:50:04,100 The following seems to be defined outside of `pyproject.toml`: 2023-02-24T13:50:04,100 `readme = '# Flask GCP Pub/Sub\n\nLite distributed task queue using Google Cloud Platform (GCP) Pub/Sub\n\n[![PyPI version](https://img.shields.io/pypi/v/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![PyPI downloads](https://img.shields.io/pypi/dm/flask-gcp-pubsub)](https://github.com/wildsys/flask-gcp-pubsub) [![GNU GPLv3](https://img.shields.io/github/license/wildsys/flask-gcp-pubsub)](https://www.gnu.org/licenses/gpl-3.0.html)\n\n\n\n- [🤔 What does this package does?](#-what-does-this-package-does)\n- [🚀 Getting started](#-getting-started)\n - [Prerequisites](#prerequisites)\n - [Installation](#installation)\n - [Full example](#full-example)\n - [Bucket notification](#bucket-notification)\n - [Configuration](#configuration)\n- [🔮 Roadmap](#-roadmap)\n - [TO BE CONFIRMED](#to-be-confirmed)\n\n\n\n## 🤔 What does this package does?\n\nAs Celery, but in a lighter version, this package allows you to run operations asynchronously in your Flask project, but without the choice of the broker: it only uses GCP Pub/Sub.\n\nTechnically, this package can run without Flask, but, historically, it comes to have a quick-win for migrating to GCP Cloud Run using the Pub/Sub system, from an existing project using Flask + Celery.\n\nThis package aims to remove some painful tasks by:\n- Creating one dedicated topic for each function\n- Creating one dedicated reusable subscription for each function\n\nWe **do not recommand** this package for the following cases:\n- You need to reuse your development in a multi-cloud context\n- You have high volume of messages to process (not tested)\n\nThis package is given "as it", without garantees, under the GPLv3 License.\n\n## 🚀 Getting started\n\n### Prerequisites\n\n- A [Google Cloud account](https://console.cloud.google.com/)\n- A GCP project ([here to create a new one](https://console.cloud.google.com/projectcreate)), with [Pub/Sub API enabled](https://console.cloud.google.com/apis/library/pubsub.googleapis.com) (take care to select the good one)\n- A [Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) for which one you need a credential JSON file (`creds.json` in example below), with roles:\n - Pub/Sub Admin\n- A local environment with Python >= 3.9\n\n### Installation\n\n```python\npip install flask-gcp-pubsub\n```\n\n### Full example\n\n`demo.py`\n```python\n#!/usr/bin/env python\n# coding: utf-8\n\nfrom flask import Flask, make_response\nfrom flask_gcp_pubsub import PubSub\n\napp = Flask(__name__)\npubsub = PubSub(\n app,\n project_id=\'\',\n gcp_credentials_file=\'./creds.json\'\n)\n\n@pubsub.task\ndef my_task(msg1, msg2):\n """Awesome delayed execution"""\n print(\'test\', msg1, msg2)\n return \'ok\'\n\n@app.route(\'/test\')\ndef route_test():\n """Launch delayed execution"""\n my_task.delay(\'test1\', \'test2\')\n return make_response(\'ok\', 200)\n```\n\n**WARNING**: do not forget to replace `` with you GCP project ID (not number) and to downloed the JSON-formatted key from GCP Console.\n\n`wsgi.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import app\n\n# Start\nif __name__ == \'__main__\':\n app.run()\n```\n\n`wsgi_delayed.py`\n```python\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Imports\nfrom demo import pubsub\n\n# Start\nif __name__ == \'__main__\':\n pubsub.run()\n```\n\nThis command will launch the Flask server:\n```shell\nflask run --port 9090\n```\n\nThis command will launch the asynchronous tasks manager:\n```shell\npython wsgi_delayed.py\n```\n\nYou can now navigate to http://localhost:9090/test\nAnd if everything goes OK, you just have to check the content of the output in console, which should look something like that:\n```\nStart consumers\nstatus=received message_id=6860318059876990 function=my_task\ntest test1 test2\nstatus=processed message_id=6860318059876990 function=my_task result=ok execution_time=6.818771362304688e-05\n```\n\n### Bucket notification\n\nYou can also create a task based on GCP Storage, by receiving a notification on any supported event from a bucket.\n\n```python\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_FINALIZE\'])\ndef my_bucket_notifications_create(*args, **kwargs):\n print(\'FINALIZE\', args, kwargs)\n\n\n@pubsub.bucket(\'bucket-flask-gcp\', events=[\'OBJECT_DELETE\'])\ndef my_bucket_notifications_delete(*args, **kwargs):\n print(\'DELETE\', args, kwargs)\n```\n\nFor the specific Storage product, Google create a specific Service Account for specific actions, that you cannot choose. [You can found it here.](https://console.cloud.google.com/storage/settings;tab=project_access)\n\nYou have to add the **Pub/Sub Admin** role for that particular Service Account in [IAM](https://console.cloud.google.com/iam-admin/iam).\n\nThe *kwargs* returns [all attributes of the Pub/Sub notification](https://cloud.google.com/storage/docs/pubsub-notifications#attributes).\n\nIf you change the function name, the auto-clean included at start-up cannot works. As you cannot excess 10 events per bucket, do not forget to clean previous subscription with commands:\n\n```shell\ngcloud storage buckets notifications list gs://\ngcloud storage buckets notifications delete gs://\n```\n\n### Configuration\n\nConfiguration can be done using keyword arguments in class instantiation and/or flask environment variable (set with `config.update`).\nIf both method used for one configuration key, the class instanciation is primary.\n\n| Flask env variable | Keyword argument | Usage | How-to get? |\n|-|-|-|-|\n| `PUBSUB_PROJECT_ID` | `project_id` | GCP project ID | See [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_JSON` | `gcp_credentials_json` | Service account credentials, as JSON string format | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CREDENTIALS_FILE` | `gcp_credentials_file` | Servicce account credentials, as JSON local file | See IAM in [console.cloud.google.com](https://console.cloud.google.com/) |\n| `PUBSUB_CONCURRENT_CONSUMERS` | `concurrent_consumers` | Number of simultaneous consumer (default: `4`) | |\n| `PUBSUB_CONCURRENT_MESSAGES` | `concurrent_messages` | Number of messages pull from topic per consumer per call (default: `2`) | |\n| `PUBSUB_TOPIC_PREFIX` | `topic_prefix` | Prefix for all topic used in the instance, useful for feature branches using same project. | |\n| `PUBSUB_AUTO_SETUP` | `auto_setup` | Enable the auto-setup for Bucket notifications to Pub/Sub (default: `false`) | |\n\n\n## 🔮 Roadmap\n\n- [ ] Priority in the treatment of messages per functions\n- [ ] Logging instead of print (+ option to format as JSON)\n- [ ] Contributing manual\n- [x] Documentation about Flask configuration keys and their counterpart on PubSub direct call\n\n### TO BE CONFIRMED\n\n- [ ] Region selection (default: all regions) - can be edited in Storage Rules of Topic for the moment\n'` 2023-02-24T13:50:04,100 According to the spec (see the link below), however, setuptools CANNOT 2023-02-24T13:50:04,101 consider this value unless 'readme' is listed as `dynamic`. 2023-02-24T13:50:04,101 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-02-24T13:50:04,101 For the time being, `setuptools` will still consider the given value (as a 2023-02-24T13:50:04,101 **transitional** measure), but please note that future releases of setuptools will 2023-02-24T13:50:04,101 follow strictly the standard. 2023-02-24T13:50:04,102 To prevent this warning, you can list 'readme' under `dynamic` or alternatively 2023-02-24T13:50:04,102 remove the `[project]` table from your file and rely entirely on other means of 2023-02-24T13:50:04,102 configuration. 2023-02-24T13:50:04,102 !! 2023-02-24T13:50:04,103 warnings.warn(msg, _WouldIgnoreField) 2023-02-24T13:50:04,360 running bdist_wheel 2023-02-24T13:50:04,374 running build 2023-02-24T13:50:04,374 running build_py 2023-02-24T13:50:04,379 creating build 2023-02-24T13:50:04,380 creating build/lib 2023-02-24T13:50:04,380 creating build/lib/flask_gcp_pubsub 2023-02-24T13:50:04,382 copying src/flask_gcp_pubsub/storage.py -> build/lib/flask_gcp_pubsub 2023-02-24T13:50:04,383 copying src/flask_gcp_pubsub/__init__.py -> build/lib/flask_gcp_pubsub 2023-02-24T13:50:04,385 copying src/flask_gcp_pubsub/publisher.py -> build/lib/flask_gcp_pubsub 2023-02-24T13:50:04,387 copying src/flask_gcp_pubsub/pubsub.py -> build/lib/flask_gcp_pubsub 2023-02-24T13:50:04,389 running egg_info 2023-02-24T13:50:04,397 writing src/flask_gcp_pubsub.egg-info/PKG-INFO 2023-02-24T13:50:04,399 writing dependency_links to src/flask_gcp_pubsub.egg-info/dependency_links.txt 2023-02-24T13:50:04,401 writing requirements to src/flask_gcp_pubsub.egg-info/requires.txt 2023-02-24T13:50:04,402 writing top-level names to src/flask_gcp_pubsub.egg-info/top_level.txt 2023-02-24T13:50:04,409 reading manifest file 'src/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:04,411 adding license file 'LICENSE' 2023-02-24T13:50:04,413 writing manifest file 'src/flask_gcp_pubsub.egg-info/SOURCES.txt' 2023-02-24T13:50:04,423 installing to build/bdist.linux-armv7l/wheel 2023-02-24T13:50:04,423 running install 2023-02-24T13:50:04,448 running install_lib 2023-02-24T13:50:04,453 creating build/bdist.linux-armv7l 2023-02-24T13:50:04,453 creating build/bdist.linux-armv7l/wheel 2023-02-24T13:50:04,455 creating build/bdist.linux-armv7l/wheel/flask_gcp_pubsub 2023-02-24T13:50:04,456 copying build/lib/flask_gcp_pubsub/storage.py -> build/bdist.linux-armv7l/wheel/flask_gcp_pubsub 2023-02-24T13:50:04,458 copying build/lib/flask_gcp_pubsub/__init__.py -> build/bdist.linux-armv7l/wheel/flask_gcp_pubsub 2023-02-24T13:50:04,460 copying build/lib/flask_gcp_pubsub/publisher.py -> build/bdist.linux-armv7l/wheel/flask_gcp_pubsub 2023-02-24T13:50:04,462 copying build/lib/flask_gcp_pubsub/pubsub.py -> build/bdist.linux-armv7l/wheel/flask_gcp_pubsub 2023-02-24T13:50:04,464 running install_egg_info 2023-02-24T13:50:04,468 Copying src/flask_gcp_pubsub.egg-info to build/bdist.linux-armv7l/wheel/flask_gcp_pubsub-0.2.7-py3.9.egg-info 2023-02-24T13:50:04,479 running install_scripts 2023-02-24T13:50:04,497 creating build/bdist.linux-armv7l/wheel/flask_gcp_pubsub-0.2.7.dist-info/WHEEL 2023-02-24T13:50:04,500 creating '/tmp/pip-wheel-cepp543n/.tmp-w31x4tgj/flask_gcp_pubsub-0.2.7-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2023-02-24T13:50:04,502 adding 'flask_gcp_pubsub/__init__.py' 2023-02-24T13:50:04,503 adding 'flask_gcp_pubsub/publisher.py' 2023-02-24T13:50:04,505 adding 'flask_gcp_pubsub/pubsub.py' 2023-02-24T13:50:04,506 adding 'flask_gcp_pubsub/storage.py' 2023-02-24T13:50:04,514 adding 'flask_gcp_pubsub-0.2.7.dist-info/LICENSE' 2023-02-24T13:50:04,516 adding 'flask_gcp_pubsub-0.2.7.dist-info/METADATA' 2023-02-24T13:50:04,517 adding 'flask_gcp_pubsub-0.2.7.dist-info/WHEEL' 2023-02-24T13:50:04,518 adding 'flask_gcp_pubsub-0.2.7.dist-info/top_level.txt' 2023-02-24T13:50:04,519 adding 'flask_gcp_pubsub-0.2.7.dist-info/RECORD' 2023-02-24T13:50:04,521 removing build/bdist.linux-armv7l/wheel 2023-02-24T13:50:04,622 Building wheel for flask-gcp-pubsub (pyproject.toml): finished with status 'done' 2023-02-24T13:50:04,628 Created wheel for flask-gcp-pubsub: filename=flask_gcp_pubsub-0.2.7-py3-none-any.whl size=20278 sha256=325855185746d8883e00d83fbbc19e8c5b70cc6a5809153448a59e2d765f6e25 2023-02-24T13:50:04,629 Stored in directory: /tmp/pip-ephem-wheel-cache-haytg8y6/wheels/4a/54/d9/a99fa1301a22cd10181de5e8c6854bbdd8b3930de5b2beabb7 2023-02-24T13:50:04,642 Successfully built flask-gcp-pubsub 2023-02-24T13:50:04,645 Removed build tracker: '/tmp/pip-build-tracker-w5snexdm'