diff --git a/lib/plugins/create/templates/azure-python/README.md b/lib/plugins/create/templates/azure-python/README.md new file mode 100644 index 000000000..e84c02686 --- /dev/null +++ b/lib/plugins/create/templates/azure-python/README.md @@ -0,0 +1,3 @@ +# Azure Functions + +Refer to [Serverless docs](https://serverless.com/framework/docs/providers/azure/guide/intro/) for more information. diff --git a/lib/plugins/create/templates/azure-python/gitignore b/lib/plugins/create/templates/azure-python/gitignore new file mode 100644 index 000000000..99640c2dc --- /dev/null +++ b/lib/plugins/create/templates/azure-python/gitignore @@ -0,0 +1,103 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TypeScript output +dist +out + +# Azure Functions artifacts +bin +obj +appsettings.json +local.settings.json +.python_packages/ + +# Python +__pycache__/ + +# Virtual Environments +env/ +.env/ +.venv/ \ No newline at end of file diff --git a/lib/plugins/create/templates/azure-python/host.json b/lib/plugins/create/templates/azure-python/host.json new file mode 100644 index 000000000..d2059a46b --- /dev/null +++ b/lib/plugins/create/templates/azure-python/host.json @@ -0,0 +1,3 @@ +{ + "version": "2.0" +} diff --git a/lib/plugins/create/templates/azure-python/requirements.txt b/lib/plugins/create/templates/azure-python/requirements.txt new file mode 100644 index 000000000..96c8a9b74 --- /dev/null +++ b/lib/plugins/create/templates/azure-python/requirements.txt @@ -0,0 +1,2 @@ +azure.functions +azure-functions-worker \ No newline at end of file diff --git a/lib/plugins/create/templates/azure-python/serverless.yml b/lib/plugins/create/templates/azure-python/serverless.yml new file mode 100644 index 000000000..62ba24a42 --- /dev/null +++ b/lib/plugins/create/templates/azure-python/serverless.yml @@ -0,0 +1,148 @@ +# Welcome to Serverless! +# +# This file is the main config file for your service. +# It's very minimal at this point and uses default values. +# You can always add more config options for more control. +# We've included some commented out config examples here. +# Just uncomment any of them to get that config option. +# +# For full config options, check the docs: +# docs.serverless.com +# +# Happy Coding! + +service: tabarlow-azure-python # NOTE: update this with your service name + +# You can pin your service to only deploy with a specific Serverless version +# Check out our docs for more details +# frameworkVersion: "=X.X.X" + +provider: + name: azure + region: West Europe + runtime: python3.6 + # prefix: "sample" # prefix of generated resource name + # subscriptionId: A356AC8C-E310-44F4-BF85-C7F29044AF99 + # stage: dev + # type: premium # premium azure functions + + environment: # these will be created as application settings + VARIABLE_FOO: 'foo' + + # you can define apim configuration here + # apim: + # apis: + # - name: v1 + # subscriptionRequired: false # if true must provide an api key + # displayName: v1 + # description: V1 sample app APIs + # protocols: + # - https + # path: v1 + # tags: + # - tag1 + # - tag2 + # authorization: none + # cors: + # allowCredentials: false + # allowedOrigins: + # - "*" + # allowedMethods: + # - GET + # - POST + # - PUT + # - DELETE + # - PATCH + # allowedHeaders: + # - "*" + # exposeHeaders: + # - "*" + +plugins: # look for additional plugins in the community plugins repo: https://github.com/serverless/plugins + - serverless-azure-functions + +# you can add packaging information here +package: + # include: + # - include-me.py + # - include-me-dir/** + exclude: + - env/** + - .env/** + # # - exclude-me.py + # # - exclude-me-dir/** + # - local.settings.json + # - .vscode/** + # - node_modules/** + # - .gitignore + # - .git/** + # - env/** + # - package.json + # - package-lock.json + +functions: + hello: + handler: src/handlers/hello.main + events: + - http: true + x-azure-settings: + methods: + - GET + authLevel: anonymous + + goodbye: + handler: src/handlers/goodbye.main + events: + - http: true + x-azure-settings: + methods: + - GET + authLevel: anonymous + # The following are a few examples of other events you can configure: + # storageBlob: + # handler: src/handlers/storageBlob + # events: + # - blob: + # x-azure-settings: + # name: blob # Specifies which name is available on `context` + # path: blob-sample/{blobName} + # connection: AzureWebJobsStorage # App Setting/environment variable which contains Storage Account Connection String + # storageQueue: + # handler: src/handlers/storageQueue + # events: + # - queue: queue-sample + # x-azure-settings: + # name: message # Specifies which naem is available on `context` + # connection: AzureWebJobsStorage + # timer: + # handler: src/handlers/timer + # events: + # - timer: + # x-azure-settings: + # schedule: '*/10 * * * * *' + # eventhub: + # handler: src/handlers/eventHub + # events: + # - eventHub: + # x-azure-settings: + # name: eventHubMessages # Specifies which name it's available on `context` + # eventHubName: sample-hub # Specifies the Name of the Event Hub + # consumerGroup: $Default # Specifies the consumerGroup to listen with + # connection: EVENT_HUBS_CONNECTION # App Setting/environment variable which contains Event Hubs Namespace Connection String + # serviceBusQueue: + # handler: src/handlers/serviceBusQueue + # events: + # - serviceBus: + # x-azure-settings: + # name: message # Specifies which name is available on `context` + # queueName: sample-queue # Name of the service bus queue to consume + # connection: SERVICE_BUS_CONNECTION # App Setting/environment variable variable which contains Service Bus Namespace Connection String + # serviceBusTopic: + # handler: src/handlers/serviceBusTopic + # events: + # - serviceBus: + # x-azure-settings: + # name: message # Specifies which name it's available on `context` + # topicName: sample-topic # Name of the service bus topic to consume + # subscriptionName: sample-subscription # Name of the topic subscription to retrieve from + # connection: SERVICE_BUS_CONNECTION # App Setting/environment variable variable which contains Service Bus Namespace Connection String diff --git a/lib/plugins/create/templates/azure-python/src/handlers/__init__.py b/lib/plugins/create/templates/azure-python/src/handlers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/lib/plugins/create/templates/azure-python/src/handlers/goodbye.py b/lib/plugins/create/templates/azure-python/src/handlers/goodbye.py new file mode 100644 index 000000000..1fe195c4e --- /dev/null +++ b/lib/plugins/create/templates/azure-python/src/handlers/goodbye.py @@ -0,0 +1,24 @@ +import logging + +import azure.functions as func + + +def main(req: func.HttpRequest) -> func.HttpResponse: + logging.info('Python HTTP trigger function processed a request.') + + name = req.params.get('name') + if not name: + try: + req_body = req.get_json() + except ValueError: + pass + else: + name = req_body.get('name') + + if name: + return func.HttpResponse(f'Goodbye {name}!') + else: + return func.HttpResponse( + "Please pass a name on the query string or in the request body", + status_code=400 + ) diff --git a/lib/plugins/create/templates/azure-python/src/handlers/hello.py b/lib/plugins/create/templates/azure-python/src/handlers/hello.py new file mode 100644 index 000000000..9d479d972 --- /dev/null +++ b/lib/plugins/create/templates/azure-python/src/handlers/hello.py @@ -0,0 +1,24 @@ +import logging + +import azure.functions as func + + +def main(req: func.HttpRequest) -> func.HttpResponse: + logging.info('Python HTTP trigger function processed a request.') + + name = req.params.get('name') + if not name: + try: + req_body = req.get_json() + except ValueError: + pass + else: + name = req_body.get('name') + + if name: + return func.HttpResponse(f"Hello {name}!") + else: + return func.HttpResponse( + "Please pass a name on the query string or in the request body", + status_code=400 + )