From 8e3444bd4618787d403c0b4dc44c706a0202edef Mon Sep 17 00:00:00 2001 From: Microsoft GitHub User Date: Fri, 31 Mar 2017 16:00:10 -0700 Subject: [PATCH 01/14] Initial commit --- .gitignore | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72364f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,89 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject From 5a598e2883a70dec290a481caa2386f4c9bb59c2 Mon Sep 17 00:00:00 2001 From: Microsoft Open Source Date: Fri, 31 Mar 2017 16:00:15 -0700 Subject: [PATCH 02/14] Initial commit --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4b1ad51 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE From 2796b0afed655e0e561befbdc5befa13e7dfda9a Mon Sep 17 00:00:00 2001 From: Microsoft Open Source Date: Fri, 31 Mar 2017 16:00:16 -0700 Subject: [PATCH 03/14] Initial commit --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8624b3d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Contributing + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. From 6834c159d2b0672f2a7f07b806c9a0ab0519b720 Mon Sep 17 00:00:00 2001 From: Bernd Verst Date: Tue, 18 Apr 2017 14:59:46 -0700 Subject: [PATCH 04/14] Basic Flask app. --- README.md | 8 ++++ main.py | 9 +++++ requirements.txt | 1 + virtualenv_proxy.py | 95 +++++++++++++++++++++++++++++++++++++++++++++ web.2.7.config | 9 +++++ web.3.4.config | 9 +++++ 6 files changed, 131 insertions(+) create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 virtualenv_proxy.py create mode 100644 web.2.7.config create mode 100644 web.3.4.config diff --git a/README.md b/README.md index 8624b3d..df93486 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +# Python Flask app on Azure App Service Web + +This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service Web. + +This repository can directly be deployed to Azure App Service. + +For more information, please see the [Python on App Service Quickstart docs](https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-get-started-python). + # Contributing This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/main.py b/main.py new file mode 100644 index 0000000..a1897c8 --- /dev/null +++ b/main.py @@ -0,0 +1,9 @@ +from flask import Flask +app = Flask(__name__) + +@app.route('/') +def hello_world(): + return 'Hello, World!' + +if __name__ == '__main__': + app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6aef94c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Flask==0.12.1 diff --git a/virtualenv_proxy.py b/virtualenv_proxy.py new file mode 100644 index 0000000..10d7af9 --- /dev/null +++ b/virtualenv_proxy.py @@ -0,0 +1,95 @@ +import datetime +import os +import sys +import traceback + +if sys.version_info[0] == 3: + def to_str(value): + return value.decode(sys.getfilesystemencoding()) + + def execfile(path, global_dict): + """Execute a file""" + with open(path, 'r') as f: + code = f.read() + code = code.replace('\r\n', '\n') + '\n' + exec(code, global_dict) +else: + def to_str(value): + return value.encode(sys.getfilesystemencoding()) + +def log(txt): + """Logs fatal errors to a log file if WSGI_LOG env var is defined""" + log_file = os.environ.get('WSGI_LOG') + if log_file: + f = open(log_file, 'a+') + try: + f.write('%s: %s' % (datetime.datetime.now(), txt)) + finally: + f.close() + +def get_wsgi_handler(handler_name): + if not handler_name: + raise Exception('WSGI_ALT_VIRTUALENV_HANDLER env var must be set') + + if not isinstance(handler_name, str): + handler_name = to_str(handler_name) + + module_name, _, callable_name = handler_name.rpartition('.') + should_call = callable_name.endswith('()') + callable_name = callable_name[:-2] if should_call else callable_name + name_list = [(callable_name, should_call)] + handler = None + last_tb = '' + + while module_name: + try: + handler = __import__(module_name, fromlist=[name_list[0][0]]) + last_tb = '' + for name, should_call in name_list: + handler = getattr(handler, name) + if should_call: + handler = handler() + break + except ImportError: + module_name, _, callable_name = module_name.rpartition('.') + should_call = callable_name.endswith('()') + callable_name = callable_name[:-2] if should_call else callable_name + name_list.insert(0, (callable_name, should_call)) + handler = None + last_tb = ': ' + traceback.format_exc() + + if handler is None: + raise ValueError('"%s" could not be imported%s' % (handler_name, last_tb)) + + return handler + +activate_this = os.getenv('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS') +if not activate_this: + raise Exception('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS is not set') + +def get_virtualenv_handler(): + log('Activating virtualenv with %s\n' % activate_this) + execfile(activate_this, dict(__file__=activate_this)) + + log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) + handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) + log('Got handler: %r\n' % handler) + return handler + +def get_venv_handler(): + log('Activating venv with executable at %s\n' % activate_this) + import site + sys.executable = activate_this + old_sys_path, sys.path = sys.path, [] + + site.main() + + sys.path.insert(0, '') + for item in old_sys_path: + if item not in sys.path: + sys.path.append(item) + + log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) + handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) + log('Got handler: %r\n' % handler) + return handler diff --git a/web.2.7.config b/web.2.7.config new file mode 100644 index 0000000..2888ec3 --- /dev/null +++ b/web.2.7.config @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/web.3.4.config b/web.3.4.config new file mode 100644 index 0000000..98f5477 --- /dev/null +++ b/web.3.4.config @@ -0,0 +1,9 @@ + + + + + + + + From 191bb3fba075f455f48e6d76ddb41616bc342176 Mon Sep 17 00:00:00 2001 From: Bernd Verst Date: Wed, 29 Nov 2017 14:00:04 -0800 Subject: [PATCH 05/14] Update IIS web config --- ...alenv_proxy.py => ptvs_virtualenv_proxy.py | 29 +++++++++++- web.2.7.config | 45 +++++++++++++++++-- web.3.4.config | 43 ++++++++++++++++-- 3 files changed, 108 insertions(+), 9 deletions(-) rename virtualenv_proxy.py => ptvs_virtualenv_proxy.py (74%) diff --git a/virtualenv_proxy.py b/ptvs_virtualenv_proxy.py similarity index 74% rename from virtualenv_proxy.py rename to ptvs_virtualenv_proxy.py index 10d7af9..a4a4129 100644 --- a/virtualenv_proxy.py +++ b/ptvs_virtualenv_proxy.py @@ -1,3 +1,17 @@ +# ############################################################################ + # + # Copyright (c) Microsoft Corporation. + # + # This source code is subject to terms and conditions of the Apache License, Version 2.0. A + # copy of the license can be found in the License.html file at the root of this distribution. If + # you cannot locate the Apache License, Version 2.0, please send an email to + # vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound + # by the terms of the Apache License, Version 2.0. + # + # You must not remove this notice, or any other, from this software. + # + # ########################################################################### + import datetime import os import sys @@ -27,6 +41,19 @@ def log(txt): finally: f.close() +ptvsd_secret = os.getenv('WSGI_PTVSD_SECRET') +if ptvsd_secret: + log('Enabling ptvsd ...\n') + try: + import ptvsd + try: + ptvsd.enable_attach(ptvsd_secret) + log('ptvsd enabled.\n') + except: + log('ptvsd.enable_attach failed\n') + except ImportError: + log('error importing ptvsd.\n') + def get_wsgi_handler(handler_name): if not handler_name: raise Exception('WSGI_ALT_VIRTUALENV_HANDLER env var must be set') @@ -92,4 +119,4 @@ def get_venv_handler(): log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) log('Got handler: %r\n' % handler) - return handler + return handler \ No newline at end of file diff --git a/web.2.7.config b/web.2.7.config index 2888ec3..306490d 100644 --- a/web.2.7.config +++ b/web.2.7.config @@ -1,9 +1,46 @@ + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web.3.4.config b/web.3.4.config index 98f5477..abcc620 100644 --- a/web.3.4.config +++ b/web.3.4.config @@ -1,9 +1,44 @@ + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 569ced6a96953772a67a4965e5beff80049d2060 Mon Sep 17 00:00:00 2001 From: Cephas Lin Date: Tue, 5 Dec 2017 12:09:14 +0100 Subject: [PATCH 06/14] Update web.2.7.config --- web.2.7.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web.2.7.config b/web.2.7.config index 306490d..909a6f6 100644 --- a/web.2.7.config +++ b/web.2.7.config @@ -1,7 +1,7 @@ - + - \ No newline at end of file + From 5664b62f2b4fc4543734c0d1a2540c15b0af5ed3 Mon Sep 17 00:00:00 2001 From: Cephas Lin Date: Tue, 5 Dec 2017 12:09:30 +0100 Subject: [PATCH 07/14] Update web.3.4.config --- web.3.4.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web.3.4.config b/web.3.4.config index abcc620..1552b7f 100644 --- a/web.3.4.config +++ b/web.3.4.config @@ -1,7 +1,7 @@ - + - \ No newline at end of file + From 40faec108acd9af66f5da8a568960ad4a628fa1f Mon Sep 17 00:00:00 2001 From: Cephas Lin Date: Fri, 13 Jul 2018 17:00:15 +0200 Subject: [PATCH 08/14] convert to container quickstart --- Dockerfile | 6 ++ README.md | 8 +-- main.py => app/main.py | 0 ptvs_virtualenv_proxy.py | 122 --------------------------------------- requirements.txt | 1 - web.2.7.config | 46 --------------- web.3.4.config | 44 -------------- 7 files changed, 9 insertions(+), 218 deletions(-) create mode 100644 Dockerfile rename main.py => app/main.py (100%) delete mode 100644 ptvs_virtualenv_proxy.py delete mode 100644 requirements.txt delete mode 100644 web.2.7.config delete mode 100644 web.3.4.config diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..87c51c9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 + +ENV LISTEN_PORT=8000 +EXPOSE 8000 + +COPY /app /app \ No newline at end of file diff --git a/README.md b/README.md index df93486..fb439ce 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ -# Python Flask app on Azure App Service Web +# Python Flask app on Azure Web App for Containers -This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service Web. +This is a minimal sample app that demonstrates how to run a Python Flask application on Azure Web App for Containers. -This repository can directly be deployed to Azure App Service. - -For more information, please see the [Python on App Service Quickstart docs](https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-get-started-python). +For more information, please see the [Python on App Service Quickstart docs](https://docs.microsoft.com/en-us/azure/app-service/containers/quickstart-python). # Contributing diff --git a/main.py b/app/main.py similarity index 100% rename from main.py rename to app/main.py diff --git a/ptvs_virtualenv_proxy.py b/ptvs_virtualenv_proxy.py deleted file mode 100644 index a4a4129..0000000 --- a/ptvs_virtualenv_proxy.py +++ /dev/null @@ -1,122 +0,0 @@ -# ############################################################################ - # - # Copyright (c) Microsoft Corporation. - # - # This source code is subject to terms and conditions of the Apache License, Version 2.0. A - # copy of the license can be found in the License.html file at the root of this distribution. If - # you cannot locate the Apache License, Version 2.0, please send an email to - # vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound - # by the terms of the Apache License, Version 2.0. - # - # You must not remove this notice, or any other, from this software. - # - # ########################################################################### - -import datetime -import os -import sys -import traceback - -if sys.version_info[0] == 3: - def to_str(value): - return value.decode(sys.getfilesystemencoding()) - - def execfile(path, global_dict): - """Execute a file""" - with open(path, 'r') as f: - code = f.read() - code = code.replace('\r\n', '\n') + '\n' - exec(code, global_dict) -else: - def to_str(value): - return value.encode(sys.getfilesystemencoding()) - -def log(txt): - """Logs fatal errors to a log file if WSGI_LOG env var is defined""" - log_file = os.environ.get('WSGI_LOG') - if log_file: - f = open(log_file, 'a+') - try: - f.write('%s: %s' % (datetime.datetime.now(), txt)) - finally: - f.close() - -ptvsd_secret = os.getenv('WSGI_PTVSD_SECRET') -if ptvsd_secret: - log('Enabling ptvsd ...\n') - try: - import ptvsd - try: - ptvsd.enable_attach(ptvsd_secret) - log('ptvsd enabled.\n') - except: - log('ptvsd.enable_attach failed\n') - except ImportError: - log('error importing ptvsd.\n') - -def get_wsgi_handler(handler_name): - if not handler_name: - raise Exception('WSGI_ALT_VIRTUALENV_HANDLER env var must be set') - - if not isinstance(handler_name, str): - handler_name = to_str(handler_name) - - module_name, _, callable_name = handler_name.rpartition('.') - should_call = callable_name.endswith('()') - callable_name = callable_name[:-2] if should_call else callable_name - name_list = [(callable_name, should_call)] - handler = None - last_tb = '' - - while module_name: - try: - handler = __import__(module_name, fromlist=[name_list[0][0]]) - last_tb = '' - for name, should_call in name_list: - handler = getattr(handler, name) - if should_call: - handler = handler() - break - except ImportError: - module_name, _, callable_name = module_name.rpartition('.') - should_call = callable_name.endswith('()') - callable_name = callable_name[:-2] if should_call else callable_name - name_list.insert(0, (callable_name, should_call)) - handler = None - last_tb = ': ' + traceback.format_exc() - - if handler is None: - raise ValueError('"%s" could not be imported%s' % (handler_name, last_tb)) - - return handler - -activate_this = os.getenv('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS') -if not activate_this: - raise Exception('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS is not set') - -def get_virtualenv_handler(): - log('Activating virtualenv with %s\n' % activate_this) - execfile(activate_this, dict(__file__=activate_this)) - - log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) - handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) - log('Got handler: %r\n' % handler) - return handler - -def get_venv_handler(): - log('Activating venv with executable at %s\n' % activate_this) - import site - sys.executable = activate_this - old_sys_path, sys.path = sys.path, [] - - site.main() - - sys.path.insert(0, '') - for item in old_sys_path: - if item not in sys.path: - sys.path.append(item) - - log('Getting handler %s\n' % os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) - handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) - log('Got handler: %r\n' % handler) - return handler \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6aef94c..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Flask==0.12.1 diff --git a/web.2.7.config b/web.2.7.config deleted file mode 100644 index 909a6f6..0000000 --- a/web.2.7.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web.3.4.config b/web.3.4.config deleted file mode 100644 index 1552b7f..0000000 --- a/web.3.4.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 3d19a6ee79327906728f66a71f620a6d1e78bfea Mon Sep 17 00:00:00 2001 From: Cephas Lin Date: Mon, 20 Aug 2018 12:40:08 +0200 Subject: [PATCH 09/14] built-in Linux image changes --- Dockerfile | 6 ------ README.md | 4 ++-- app/main.py | 9 --------- application.py | 6 ++++++ requirements.txt | 6 ++++++ 5 files changed, 14 insertions(+), 17 deletions(-) delete mode 100644 Dockerfile delete mode 100644 app/main.py create mode 100644 application.py create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 87c51c9..0000000 --- a/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 - -ENV LISTEN_PORT=8000 -EXPOSE 8000 - -COPY /app /app \ No newline at end of file diff --git a/README.md b/README.md index fb439ce..b38c45a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Python Flask app on Azure Web App for Containers -This is a minimal sample app that demonstrates how to run a Python Flask application on Azure Web App for Containers. +This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service on Linux. -For more information, please see the [Python on App Service Quickstart docs](https://docs.microsoft.com/en-us/azure/app-service/containers/quickstart-python). +For more information, please see the [Python on App Service quickstart](https://docs.microsoft.com/en-us/azure/app-service/containers/quickstart-python). # Contributing diff --git a/app/main.py b/app/main.py deleted file mode 100644 index a1897c8..0000000 --- a/app/main.py +++ /dev/null @@ -1,9 +0,0 @@ -from flask import Flask -app = Flask(__name__) - -@app.route('/') -def hello_world(): - return 'Hello, World!' - -if __name__ == '__main__': - app.run() diff --git a/application.py b/application.py new file mode 100644 index 0000000..a86beaa --- /dev/null +++ b/application.py @@ -0,0 +1,6 @@ +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello World!" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..404d3cf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +click==6.7 +Flask==1.0.2 +itsdangerous==0.24 +Jinja2==2.10 +MarkupSafe==1.0 +Werkzeug==0.14.1 \ No newline at end of file From e1abf8b7a3bc256bf20454f22a119808b4c7abe9 Mon Sep 17 00:00:00 2001 From: Cephas Lin Date: Mon, 8 Apr 2019 18:47:24 +0200 Subject: [PATCH 10/14] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b38c45a..d28e78d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,13 @@ -# Python Flask app on Azure Web App for Containers +--- +topic: Python Flask sample for Azure App Service (Linux) +languages: + - python +products: + - Azure App Service + - Azure Web Apps +--- + +# Python Flask sample for Azure App Service (Linux) This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service on Linux. From d43959675ea729f02aa340d52929158b6d0abbf9 Mon Sep 17 00:00:00 2001 From: "Den (Microsoft)" <33675759+dendeli-msft@users.noreply.github.com> Date: Wed, 17 Jul 2019 15:36:28 -0700 Subject: [PATCH 11/14] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d28e78d..d1ab922 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ --- -topic: Python Flask sample for Azure App Service (Linux) +page_type: sample +description: "This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service on Linux." languages: - - python +- python products: - - Azure App Service - - Azure Web Apps +- azure +- azure-app-service --- # Python Flask sample for Azure App Service (Linux) From 63e366cfeb32f9ce78fc403f632fcac67904b29a Mon Sep 17 00:00:00 2001 From: "Den (Microsoft)" <33675759+dendeli-msft@users.noreply.github.com> Date: Wed, 17 Jul 2019 15:37:09 -0700 Subject: [PATCH 12/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1ab922..8487a9c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ products: This is a minimal sample app that demonstrates how to run a Python Flask application on Azure App Service on Linux. -For more information, please see the [Python on App Service quickstart](https://docs.microsoft.com/en-us/azure/app-service/containers/quickstart-python). +For more information, please see the [Python on App Service quickstart](https://docs.microsoft.com/azure/app-service/containers/quickstart-python). # Contributing From f1583e8aaf085c72054a971af9d2bd42b7d030cb Mon Sep 17 00:00:00 2001 From: docs <33675759+docs-product@users.noreply.github.com> Date: Tue, 15 Oct 2019 15:27:47 -0700 Subject: [PATCH 13/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8487a9c..3f21465 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,6 @@ This is a minimal sample app that demonstrates how to run a Python Flask applica For more information, please see the [Python on App Service quickstart](https://docs.microsoft.com/azure/app-service/containers/quickstart-python). -# Contributing +## Contributing This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. From f68035d2c549351001333ab7c343d554bd170845 Mon Sep 17 00:00:00 2001 From: Subit Das Date: Fri, 8 Nov 2019 16:49:23 +0530 Subject: [PATCH 14/14] b1 --- application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application.py b/application.py index a86beaa..a0ebc71 100644 --- a/application.py +++ b/application.py @@ -3,4 +3,4 @@ @app.route("/") def hello(): - return "Hello World!" \ No newline at end of file + return "Hello azure!"