diff --git a/templates/django3/files/.platform.app.yaml b/templates/django3/files/.platform.app.yaml
index da8727104..107c50c98 100644
--- a/templates/django3/files/.platform.app.yaml
+++ b/templates/django3/files/.platform.app.yaml
@@ -30,7 +30,7 @@ web:
socket_family: unix
# Commands are run once after deployment to start the application process.
commands:
- start: "gunicorn -w 4 -b unix:$SOCKET myapp.wsgi:application"
+ start: "pipenv run gunicorn -w 4 -b unix:$SOCKET myapp.wsgi:application"
locations:
"/":
passthru: true
@@ -56,10 +56,10 @@ hooks:
pipenv install --system --deploy
mkdir logs
- python manage.py collectstatic
+ pipenv run python manage.py collectstatic
rm -rf logs
deploy: |
- python manage.py migrate
+ pipenv run python manage.py migrate
source:
operations:
diff --git a/templates/django3/files/myapp/settings.py b/templates/django3/files/myapp/settings.py
index 9fd148829..23d727a0e 100644
--- a/templates/django3/files/myapp/settings.py
+++ b/templates/django3/files/myapp/settings.py
@@ -25,7 +25,7 @@
SECRET_KEY = '5^#15wdl(qll2ue&&(-1ixwalo7%td1a(&x7abp(roabe_mk7w'
# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
+DEBUG = False
ALLOWED_HOSTS = ['*']
diff --git a/templates/fastapi/.platform.template.yaml b/templates/fastapi/.platform.template.yaml
index b25544d62..949c4ce90 100644
--- a/templates/fastapi/.platform.template.yaml
+++ b/templates/fastapi/.platform.template.yaml
@@ -37,7 +37,7 @@ info:
# Each note object is displayed as a small section heading with content below. Supports limited HTML.
notes:
- heading: "Features"
- content: "Python 3.9
MariaDB 10.4
Redis 5.0"
+ content: "Python 3.11
MariaDB 10.4
Redis 5.0"
# This key describes the initialization call made to the master environment at
# project creation time. This is part of the full v2 UI operation mode, which
diff --git a/templates/fastapi/files/.github/tests/vrt/template-paths.js b/templates/fastapi/files/.github/tests/vrt/template-paths.js
new file mode 100644
index 000000000..f73e2c07f
--- /dev/null
+++ b/templates/fastapi/files/.github/tests/vrt/template-paths.js
@@ -0,0 +1,38 @@
+/**
+ * This is the default scenarios collection that will be used if there is not a theme-specific scenarios file in place
+ * for a given theme. You can copy this file and then name it `template-paths.js`.
+ *
+ */
+
+/**
+ * Stores the scenarios for each page/endpoint that should be tested
+ * @type {{}}
+ */
+var scenarioPaths = {};
+
+/**
+ * For each page/endpoint you want to test, create a new array entry that contains at least the keys/properties `label`
+ * and `path`.
+ *
+ * additional properties you can set for each scenario are documented here: https://github.com/garris/BackstopJS#advanced-scenarios
+ *
+ * However, do NOT set `referenceUrl` or `url` as those will be overridden
+ *
+ * `path` should assume the URL ends in a trailing slash. For example, if the page you want to test against is
+ * https://master-7rqtwti-fqfjrmtjbjta4.eu-3.platformsh.site/a/path/to/foo/bar/
+ * Then for `path` it should be "a/path/to/foo/bar/"
+ *
+ * @type {{path: string, label: string}[]}
+ */
+scenarioPaths.paths = [
+ {
+ "label": "Home",
+ "delay": 2000,
+ },
+ {
+ "label": "Forced 404",
+ "delay": 2000,
+ },
+];
+
+module.exports = scenarioPaths;
diff --git a/templates/fastapi/files/.platform.app.yaml b/templates/fastapi/files/.platform.app.yaml
index 6ec3b8a7c..16422276e 100644
--- a/templates/fastapi/files/.platform.app.yaml
+++ b/templates/fastapi/files/.platform.app.yaml
@@ -1,26 +1,42 @@
-# This file describes an application. You can have multiple applications
-# in the same project.
-#
-# See https://docs.platform.sh/user_guide/reference/platform-app-yaml.html
+#########################
+# FastAPI using pip
+##########################
+# Container configuration.
-# The name of this app. Must be unique within a project.
-name: app
+# The name of this app. Must be unique within a project.
+name: 'app'
-# The runtime the application uses.
-type: "python:3.9"
+# The runtime the application uses.
+type: 'python:3.11'
-# The build-time dependencies of the app.
dependencies:
- python:
- pipenv: "2018.10.13"
+ python3:
+ pipenv: '2023.2.4'
+
+##########################
+# Builds and variables
-# The hooks executed at various points in the lifecycle of the application.
hooks:
build: |
- pipenv install --system --deploy
+ set -eu
+
+ # Download the latest version of pip
+ python3.11 -m pip install --upgrade pip
+
+ # Install dependencies
+ pipenv install --deploy
+
+##########################
+# Web configuration
+
+# The configuration of the application when it is exposed to the web.
+web:
+ commands:
+ start: "pipenv run python server.py"
+
+##########################
+# Services
-# The size of the persistent disk of the application (in MB).
-disk: 1024
# The relationships of the application with services or other applications.
#
# The left-hand side is the name of the relationship as it will be exposed
@@ -30,7 +46,17 @@ relationships:
database: "db:mysql"
rediscache: "cache:redis"
-# The configuration of app when it is exposed to the web.
-web:
- commands:
- start: python server.py
+##########################
+# Data and mounts
+
+# The size of the persistent disk of the application (in MB).
+disk: 1024
+
+##########################
+# Internal maintenance
+
+source:
+ operations:
+ auto-update:
+ command: |
+ curl -fsS https://raw.githubusercontent.com/platformsh/source-operations/main/setup.sh | { bash /dev/fd/3 sop-autoupdate; } 3<&0
diff --git a/templates/fastapi/files/Pipfile b/templates/fastapi/files/Pipfile
index 4d9984f33..3ed14d4e9 100644
--- a/templates/fastapi/files/Pipfile
+++ b/templates/fastapi/files/Pipfile
@@ -1,16 +1,14 @@
[[source]]
+name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
-name = "pypi"
+
+[dev-packages]
[packages]
-fastapi = ">=0.74.1"
+fastapi = "*"
uvicorn = "*"
-asyncmy = "*"
-aioredis = "==2.0.0a1"
-platformshconfig = "~=2.0"
-
-[dev-packages]
+click = "*"
[requires]
-python_version = "3.9"
+python_version = "3.11"
diff --git a/templates/fastapi/files/Pipfile.lock b/templates/fastapi/files/Pipfile.lock
index a3ee022a2..f8956ce3c 100644
--- a/templates/fastapi/files/Pipfile.lock
+++ b/templates/fastapi/files/Pipfile.lock
@@ -1,11 +1,11 @@
{
"_meta": {
"hash": {
- "sha256": "e559ce0d18efac73d36a125c79b9805343a98b4d519465955177e5ecd7032eba"
+ "sha256": "d55e9558977b45a880fc3c5f58930905a37c43d505b5201fd5040c9d46bfc799"
},
"pipfile-spec": 6,
"requires": {
- "python_version": "3.9"
+ "python_version": "3.11"
},
"sources": [
{
@@ -16,169 +16,119 @@
]
},
"default": {
- "aioredis": {
- "hashes": [
- "sha256:32d7910724282a475c91b8b34403867069a4f07bf0c5ad5fe66cd797322f9a0d",
- "sha256:5884f384b8ecb143bb73320a96e7c464fd38e117950a7d48340a35db8e35e7d2"
- ],
- "index": "pypi",
- "version": "==2.0.0a1"
- },
"anyio": {
"hashes": [
- "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6",
- "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"
+ "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421",
+ "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"
],
"markers": "python_full_version >= '3.6.2'",
- "version": "==3.5.0"
- },
- "asgiref": {
- "hashes": [
- "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0",
- "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.5.0"
- },
- "async-timeout": {
- "hashes": [
- "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15",
- "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==4.0.2"
- },
- "asyncmy": {
- "hashes": [
- "sha256:0c7db0d0b7c0f47fcb656c1db41f5845b3a5e7e83013264c83e943e53c4abb60",
- "sha256:22ab5de34356a7331443d0076c47c78aedd3b1c41e1b6baf4017b2f207fd39d4",
- "sha256:28a534ceab5fbc2e20a29b2167c05c94f2cc1e2735a96fcc24b684890bb1109a",
- "sha256:2b14ebd0c1e050a6ee0a314111527327fdb53fe490169af6ed9361a921fba2fa",
- "sha256:2b6dbfe7f4f7ffbcaa190f477f79361cbbc79248eeb05ee8c338b295b18a0119",
- "sha256:3167337d2e778b560fc109ec9d388562b4e9b0241e6d31ca2de15bf7437c781d",
- "sha256:38d6c2e658d13213ced685b5e41e35df1122174423b38f2bc27a6a4535de05b2",
- "sha256:4be0f01f79974adf7c064c3c23bd30cd24627c081a39a03461bd4fea0a59562b",
- "sha256:5577b695c38e01377e7ef4f5bd3877aada11d1174f80b6354be55a5447f9d1f8",
- "sha256:769f749d8b03b28a31b185b77c54e8f8f363ee8a3c3719bad8a71e4e9a0ce8a6",
- "sha256:804fda2c96e16de5b4a7740a49cf21207fe6b856875608f28a75a486e4903b3d",
- "sha256:c9dc38b56e3091d75ccda1ed598f90dac0489f4e6700bb3aae89b9a8b4635ad3",
- "sha256:ef785957e480902d9b1a34f23e29157de84606bf758ddbfbabc1afe93f91ece3"
- ],
- "index": "pypi",
- "version": "==0.2.3"
+ "version": "==3.6.2"
},
"click": {
"hashes": [
- "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1",
- "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"
+ "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
+ "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
],
- "markers": "python_version >= '3.6'",
- "version": "==8.0.4"
+ "index": "pypi",
+ "version": "==8.1.3"
},
"fastapi": {
"hashes": [
- "sha256:b58a2c46df14f62ebe6f24a9439927539ba1959b9be55ba0e2f516a683e5b9d4",
- "sha256:b8ec8400623ef0b2ff558ebe06753b349f8e3a5dd38afea650800f2644ddba34"
+ "sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de",
+ "sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf"
],
"index": "pypi",
- "version": "==0.74.1"
+ "version": "==0.92.0"
},
"h11": {
"hashes": [
- "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06",
- "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"
+ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d",
+ "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"
],
- "markers": "python_version >= '3.6'",
- "version": "==0.13.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==0.14.0"
},
"idna": {
"hashes": [
- "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
- "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"
+ "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4",
+ "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
],
"markers": "python_version >= '3.5'",
- "version": "==3.3"
- },
- "platformshconfig": {
- "hashes": [
- "sha256:3eb95a514de57ce3341690fd3e0a61e6fa8c858a0793810a29fcce40691254a2",
- "sha256:ff1e29719d2789f6d164e1abd42dbecec1c535e5e741161ba177cec34bfdd6de"
- ],
- "index": "pypi",
- "version": "==2.4.0"
+ "version": "==3.4"
},
"pydantic": {
"hashes": [
- "sha256:085ca1de245782e9b46cefcf99deecc67d418737a1fd3f6a4f511344b613a5b3",
- "sha256:086254884d10d3ba16da0588604ffdc5aab3f7f09557b998373e885c690dd398",
- "sha256:0b6037175234850ffd094ca77bf60fb54b08b5b22bc85865331dd3bda7a02fa1",
- "sha256:0fe476769acaa7fcddd17cadd172b156b53546ec3614a4d880e5d29ea5fbce65",
- "sha256:1d5278bd9f0eee04a44c712982343103bba63507480bfd2fc2790fa70cd64cf4",
- "sha256:2cc6a4cb8a118ffec2ca5fcb47afbacb4f16d0ab8b7350ddea5e8ef7bcc53a16",
- "sha256:2ee7e3209db1e468341ef41fe263eb655f67f5c5a76c924044314e139a1103a2",
- "sha256:3011b975c973819883842c5ab925a4e4298dffccf7782c55ec3580ed17dc464c",
- "sha256:3c3b035103bd4e2e4a28da9da7ef2fa47b00ee4a9cf4f1a735214c1bcd05e0f6",
- "sha256:4c68c3bc88dbda2a6805e9a142ce84782d3930f8fdd9655430d8576315ad97ce",
- "sha256:574936363cd4b9eed8acdd6b80d0143162f2eb654d96cb3a8ee91d3e64bf4cf9",
- "sha256:5a79330f8571faf71bf93667d3ee054609816f10a259a109a0738dac983b23c3",
- "sha256:5e48ef4a8b8c066c4a31409d91d7ca372a774d0212da2787c0d32f8045b1e034",
- "sha256:6c5b77947b9e85a54848343928b597b4f74fc364b70926b3c4441ff52620640c",
- "sha256:742645059757a56ecd886faf4ed2441b9c0cd406079c2b4bee51bcc3fbcd510a",
- "sha256:7bdfdadb5994b44bd5579cfa7c9b0e1b0e540c952d56f627eb227851cda9db77",
- "sha256:815ddebb2792efd4bba5488bc8fde09c29e8ca3227d27cf1c6990fc830fd292b",
- "sha256:8b5ac0f1c83d31b324e57a273da59197c83d1bb18171e512908fe5dc7278a1d6",
- "sha256:96f240bce182ca7fe045c76bcebfa0b0534a1bf402ed05914a6f1dadff91877f",
- "sha256:a733965f1a2b4090a5238d40d983dcd78f3ecea221c7af1497b845a9709c1721",
- "sha256:ab624700dc145aa809e6f3ec93fb8e7d0f99d9023b713f6a953637429b437d37",
- "sha256:b2571db88c636d862b35090ccf92bf24004393f85c8870a37f42d9f23d13e032",
- "sha256:bbbc94d0c94dd80b3340fc4f04fd4d701f4b038ebad72c39693c794fd3bc2d9d",
- "sha256:c0727bda6e38144d464daec31dff936a82917f431d9c39c39c60a26567eae3ed",
- "sha256:c556695b699f648c58373b542534308922c46a1cda06ea47bc9ca45ef5b39ae6",
- "sha256:c86229333cabaaa8c51cf971496f10318c4734cf7b641f08af0a6fbf17ca3054",
- "sha256:c8d7da6f1c1049eefb718d43d99ad73100c958a5367d30b9321b092771e96c25",
- "sha256:c8e9dcf1ac499679aceedac7e7ca6d8641f0193c591a2d090282aaf8e9445a46",
- "sha256:cb23bcc093697cdea2708baae4f9ba0e972960a835af22560f6ae4e7e47d33f5",
- "sha256:d1e4c28f30e767fd07f2ddc6f74f41f034d1dd6bc526cd59e63a82fe8bb9ef4c",
- "sha256:d9c9bdb3af48e242838f9f6e6127de9be7063aad17b32215ccc36a09c5cf1070",
- "sha256:dee5ef83a76ac31ab0c78c10bd7d5437bfdb6358c95b91f1ba7ff7b76f9996a1",
- "sha256:e0896200b6a40197405af18828da49f067c2fa1f821491bc8f5bde241ef3f7d7",
- "sha256:f5a64b64ddf4c99fe201ac2724daada8595ada0d102ab96d019c1555c2d6441d",
- "sha256:f947352c3434e8b937e3aa8f96f47bdfe6d92779e44bb3f41e4c213ba6a32145"
+ "sha256:05a81b006be15655b2a1bae5faa4280cf7c81d0e09fcb49b342ebf826abe5a72",
+ "sha256:0b53e1d41e97063d51a02821b80538053ee4608b9a181c1005441f1673c55423",
+ "sha256:2b3ce5f16deb45c472dde1a0ee05619298c864a20cded09c4edd820e1454129f",
+ "sha256:2e82a6d37a95e0b1b42b82ab340ada3963aea1317fd7f888bb6b9dfbf4fff57c",
+ "sha256:301d626a59edbe5dfb48fcae245896379a450d04baeed50ef40d8199f2733b06",
+ "sha256:39f4a73e5342b25c2959529f07f026ef58147249f9b7431e1ba8414a36761f53",
+ "sha256:4948f264678c703f3877d1c8877c4e3b2e12e549c57795107f08cf70c6ec7774",
+ "sha256:4b05697738e7d2040696b0a66d9f0a10bec0efa1883ca75ee9e55baf511909d6",
+ "sha256:51bdeb10d2db0f288e71d49c9cefa609bca271720ecd0c58009bd7504a0c464c",
+ "sha256:55b1625899acd33229c4352ce0ae54038529b412bd51c4915349b49ca575258f",
+ "sha256:572066051eeac73d23f95ba9a71349c42a3e05999d0ee1572b7860235b850cc6",
+ "sha256:6a05a9db1ef5be0fe63e988f9617ca2551013f55000289c671f71ec16f4985e3",
+ "sha256:6dc1cc241440ed7ca9ab59d9929075445da6b7c94ced281b3dd4cfe6c8cff817",
+ "sha256:6e7124d6855b2780611d9f5e1e145e86667eaa3bd9459192c8dc1a097f5e9903",
+ "sha256:75d52162fe6b2b55964fbb0af2ee58e99791a3138588c482572bb6087953113a",
+ "sha256:78cec42b95dbb500a1f7120bdf95c401f6abb616bbe8785ef09887306792e66e",
+ "sha256:7feb6a2d401f4d6863050f58325b8d99c1e56f4512d98b11ac64ad1751dc647d",
+ "sha256:8775d4ef5e7299a2f4699501077a0defdaac5b6c4321173bcb0f3c496fbadf85",
+ "sha256:887ca463c3bc47103c123bc06919c86720e80e1214aab79e9b779cda0ff92a00",
+ "sha256:9193d4f4ee8feca58bc56c8306bcb820f5c7905fd919e0750acdeeeef0615b28",
+ "sha256:983e720704431a6573d626b00662eb78a07148c9115129f9b4351091ec95ecc3",
+ "sha256:990406d226dea0e8f25f643b370224771878142155b879784ce89f633541a024",
+ "sha256:9cbdc268a62d9a98c56e2452d6c41c0263d64a2009aac69246486f01b4f594c4",
+ "sha256:a48f1953c4a1d9bd0b5167ac50da9a79f6072c63c4cef4cf2a3736994903583e",
+ "sha256:a9a6747cac06c2beb466064dda999a13176b23535e4c496c9d48e6406f92d42d",
+ "sha256:a9f2de23bec87ff306aef658384b02aa7c32389766af3c5dee9ce33e80222dfa",
+ "sha256:b5635de53e6686fe7a44b5cf25fcc419a0d5e5c1a1efe73d49d48fe7586db854",
+ "sha256:b6f9d649892a6f54a39ed56b8dfd5e08b5f3be5f893da430bed76975f3735d15",
+ "sha256:b9a3859f24eb4e097502a3be1fb4b2abb79b6103dd9e2e0edb70613a4459a648",
+ "sha256:cd8702c5142afda03dc2b1ee6bc358b62b3735b2cce53fc77b31ca9f728e4bc8",
+ "sha256:d7b5a3821225f5c43496c324b0d6875fde910a1c2933d726a743ce328fbb2a8c",
+ "sha256:d88c4c0e5c5dfd05092a4b271282ef0588e5f4aaf345778056fc5259ba098857",
+ "sha256:eb992a1ef739cc7b543576337bebfc62c0e6567434e522e97291b251a41dad7f",
+ "sha256:f2f7eb6273dd12472d7f218e1fef6f7c7c2f00ac2e1ecde4db8824c457300416",
+ "sha256:fdf88ab63c3ee282c76d652fc86518aacb737ff35796023fae56a65ced1a5978",
+ "sha256:fdf8d759ef326962b4678d89e275ffc55b7ce59d917d9f72233762061fd04a2d"
],
- "markers": "python_full_version >= '3.6.1'",
- "version": "==1.9.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==1.10.4"
},
"sniffio": {
"hashes": [
- "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663",
- "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"
+ "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101",
+ "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"
],
- "markers": "python_version >= '3.5'",
- "version": "==1.2.0"
+ "markers": "python_version >= '3.7'",
+ "version": "==1.3.0"
},
"starlette": {
"hashes": [
- "sha256:26a18cbda5e6b651c964c12c88b36d9898481cd428ed6e063f5f29c418f73050",
- "sha256:57eab3cc975a28af62f6faec94d355a410634940f10b30d68d31cb5ec1b44ae8"
+ "sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628",
+ "sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c"
],
- "markers": "python_version >= '3.6'",
- "version": "==0.17.1"
+ "markers": "python_version >= '3.7'",
+ "version": "==0.25.0"
},
"typing-extensions": {
"hashes": [
- "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42",
- "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"
+ "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb",
+ "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"
],
- "markers": "python_version >= '3.6'",
- "version": "==4.1.1"
+ "markers": "python_version >= '3.7'",
+ "version": "==4.5.0"
},
"uvicorn": {
"hashes": [
- "sha256:8adddf629b79857b48b999ae1b14d6c92c95d4d7840bd86461f09bee75f1653e",
- "sha256:c04a9c069111489c324f427501b3840d306c6b91a77b00affc136a840a3f45f1"
+ "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8",
+ "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"
],
"index": "pypi",
- "version": "==0.17.5"
+ "version": "==0.20.0"
}
},
"develop": {}
diff --git a/templates/fastapi/files/README.md b/templates/fastapi/files/README.md
index 3711614b1..d0e393b5a 100644
--- a/templates/fastapi/files/README.md
+++ b/templates/fastapi/files/README.md
@@ -12,7 +12,7 @@ FastAPI is a modern, fast (high-performance), web framework for building APIs wi
## Features
-* Python 3.9
+* Python 3.11
* MariaDB 10.4
* Redis 5.0
* Automatic TLS certificates
@@ -23,7 +23,6 @@ FastAPI is a modern, fast (high-performance), web framework for building APIs wi
The following files have been added to a basic FastAPI configuration. If using this project as a reference for your own existing project, replicate the changes below to your project.
* The `.platform.app.yaml`, `.platform/services.yaml`, and `.platform/routes.yaml` files have been added. These provide Platform.sh-specific configuration and are present in all projects on Platform.sh. You may customize them as you see fit.
-* An additional Pip library, [`platformshconfig`](https://github.com/platformsh/config-reader-python), has been added. It provides convenience wrappers for accessing the Platform.sh environment variables.
* A rudimentary application is included in `server.py` for demonstration purposes. It shows the basic process of starting the server and connecting to the MariaDB database. Modify and replace it as desired.
## References
diff --git a/templates/fastapi/files/index.html b/templates/fastapi/files/index.html
new file mode 100644
index 000000000..c9f57d4ad
--- /dev/null
+++ b/templates/fastapi/files/index.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Success!
+
You've just deployed the FastAPI starter project to Platform.sh!
+
From here you can use the same configuration files to migrate your own project.
+
+
+
+
+
+
diff --git a/templates/fastapi/files/server.py b/templates/fastapi/files/server.py
index 295688377..b08628bf9 100644
--- a/templates/fastapi/files/server.py
+++ b/templates/fastapi/files/server.py
@@ -1,70 +1,16 @@
-import traceback
-import uuid
-import sys
-
+import os
import uvicorn
from fastapi import FastAPI
-
-from asyncmy import connect
-from asyncmy.cursors import DictCursor
-
-import aioredis
-
-from platformshconfig import Config
+from fastapi.responses import HTMLResponse
app = FastAPI()
-config = Config()
-
-
-@app.get("/")
-async def root():
- tests = {
- "database": await wrap_test(test_mysql, config.credentials("database")),
- "redis": await wrap_test(test_redis, config.credentials("rediscache"))
- }
- return tests
-
-
-async def wrap_test(callback, *args, **kwargs):
- try:
- result = await callback(*args, **kwargs)
- return {
- "status": "OK",
- "return": result,
- }
- except Exception:
- return {
- "status": "ERROR",
- "error": traceback.format_exception(*sys.exc_info())
- }
-
-
-async def test_mysql(instance):
- connection = await connect(
- host=instance["host"],
- port=instance["port"],
- user=instance["username"],
- password=instance["password"],
- database=instance["path"],
- charset='utf8mb4',
- )
-
- async with connection.cursor(cursor=DictCursor) as cursor:
- await cursor.execute("SELECT 1")
-
-
-async def test_redis(instance):
- r = aioredis.from_url("redis://{}:{}".format(
- instance["host"],
- instance["port"],
- ))
-
- key_name = "foo-%s" + str(uuid.uuid4())
- value = b"bar"
-
- await r.set(key_name, "bar")
- assert value == await r.get(key_name)
+# Simple HTMLResponse for root.
+@app.api_route("/", response_class=HTMLResponse, status_code=200, methods=['GET', 'HEAD'])
+async def load_root():
+ with open("index.html", "r") as file:
+ return file.read()
if __name__ == "__main__":
- uvicorn.run(app, host="127.0.0.1", port=int(config.port))
+ port = os.getenv("PORT") or 8080
+ uvicorn.run(app, host="127.0.0.1", port=int(port))
diff --git a/templates/flask/.platform.template.yaml b/templates/flask/.platform.template.yaml
index 376141f4d..7e836fbf3 100644
--- a/templates/flask/.platform.template.yaml
+++ b/templates/flask/.platform.template.yaml
@@ -14,7 +14,7 @@ info:
notes:
- heading: "Features"
content: |
- Python 3.8
+ Python 3.9
MariaDB 10.4
Redis 5.0
Automatic TLS certificates
diff --git a/templates/flask/files/Pipfile b/templates/flask/files/Pipfile
deleted file mode 100644
index ba393f8b4..000000000
--- a/templates/flask/files/Pipfile
+++ /dev/null
@@ -1,16 +0,0 @@
-[[source]]
-url = "https://pypi.org/simple"
-verify_ssl = true
-name = "pypi"
-
-[packages]
-flask = ">=2.0.0"
-redis = "*"
-pymysql = "*"
-gevent = "*"
-platformshconfig = "~=2.0"
-
-[dev-packages]
-
-[requires]
-python_version == "3.9"
diff --git a/templates/flask/files/Pipfile.lock b/templates/flask/files/Pipfile.lock
deleted file mode 100644
index 4638d0423..000000000
--- a/templates/flask/files/Pipfile.lock
+++ /dev/null
@@ -1,421 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "eb0c616bd1d4acac11cc23c85cb009ac248209c5dba7f1087e22c6de6a0d5a92"
- },
- "pipfile-spec": 6,
- "requires": {
- "python_version": "3.7.0"
- },
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "async-timeout": {
- "hashes": [
- "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15",
- "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==4.0.2"
- },
- "click": {
- "hashes": [
- "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e",
- "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==8.1.2"
- },
- "deprecated": {
- "hashes": [
- "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d",
- "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==1.2.13"
- },
- "flask": {
- "hashes": [
- "sha256:8a4cf32d904cf5621db9f0c9fbcd7efabf3003f22a04e4d0ce790c7137ec5264",
- "sha256:a8c9bd3e558ec99646d177a9739c41df1ded0629480b4c8d2975412f3c9519c8"
- ],
- "index": "pypi",
- "version": "==2.1.1"
- },
- "gevent": {
- "hashes": [
- "sha256:0082d8a5d23c35812ce0e716a91ede597f6dd2c5ff508a02a998f73598c59397",
- "sha256:01928770972181ad8866ee37ea3504f1824587b188fcab782ef1619ce7538766",
- "sha256:05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692",
- "sha256:08b4c17064e28f4eb85604486abc89f442c7407d2aed249cf54544ce5c9baee6",
- "sha256:177f93a3a90f46a5009e0841fef561601e5c637ba4332ab8572edd96af650101",
- "sha256:22ce1f38fdfe2149ffe8ec2131ca45281791c1e464db34b3b4321ae9d8d2efbb",
- "sha256:24d3550fbaeef5fddd794819c2853bca45a86c3d64a056a2c268d981518220d1",
- "sha256:2afa3f3ad528155433f6ac8bd64fa5cc303855b97004416ec719a6b1ca179481",
- "sha256:2bcec9f80196c751fdcf389ca9f7141e7b0db960d8465ed79be5e685bfcad682",
- "sha256:2cfff82f05f14b7f5d9ed53ccb7a609ae8604df522bb05c971bca78ec9d8b2b9",
- "sha256:3baeeccc4791ba3f8db27179dff11855a8f9210ddd754f6c9b48e0d2561c2aea",
- "sha256:3c012c73e6c61f13c75e3a4869dbe6a2ffa025f103421a6de9c85e627e7477b1",
- "sha256:3dad62f55fad839d498c801e139481348991cee6e1c7706041b5fe096cb6a279",
- "sha256:542ae891e2aa217d2cf6d8446538fcd2f3263a40eec123b970b899bac391c47a",
- "sha256:6a02a88723ed3f0fd92cbf1df3c4cd2fbd87d82b0a4bac3e36a8875923115214",
- "sha256:74fc1ef16b86616cfddcc74f7292642b0f72dde4dd95aebf4c45bb236744be54",
- "sha256:7909780f0cf18a1fc32aafd8c8e130cdd93c6e285b11263f7f2d1a0f3678bc50",
- "sha256:7ccffcf708094564e442ac6fde46f0ae9e40015cb69d995f4b39cc29a7643881",
- "sha256:8c21cb5c9f4e14d75b3fe0b143ec875d7dbd1495fad6d49704b00e57e781ee0f",
- "sha256:973749bacb7bc4f4181a8fb2a7e0e2ff44038de56d08e856dd54a5ac1d7331b4",
- "sha256:9d86438ede1cbe0fde6ef4cc3f72bf2f1ecc9630d8b633ff344a3aeeca272cdd",
- "sha256:9f9652d1e4062d4b5b5a0a49ff679fa890430b5f76969d35dccb2df114c55e0f",
- "sha256:a5ad4ed8afa0a71e1927623589f06a9b5e8b5e77810be3125cb4d93050d3fd1f",
- "sha256:b7709c64afa8bb3000c28bb91ec42c79594a7cb0f322e20427d57f9762366a5b",
- "sha256:bb5cb8db753469c7a9a0b8a972d2660fe851aa06eee699a1ca42988afb0aaa02",
- "sha256:c43f081cbca41d27fd8fef9c6a32cf83cb979345b20abc07bf68df165cdadb24",
- "sha256:cc2fef0f98ee180704cf95ec84f2bc2d86c6c3711bb6b6740d74e0afe708b62c",
- "sha256:da8d2d51a49b2a5beb02ad619ca9ddbef806ef4870ba04e5ac7b8b41a5b61db3",
- "sha256:e1899b921219fc8959ff9afb94dae36be82e0769ed13d330a393594d478a0b3a",
- "sha256:eae3c46f9484eaacd67ffcdf4eaf6ca830f587edd543613b0f5c4eb3c11d052d",
- "sha256:ec21f9eaaa6a7b1e62da786132d6788675b314f25f98d9541f1bf00584ed4749",
- "sha256:f289fae643a3f1c3b909d6b033e6921b05234a4907e9c9c8c3f1fe403e6ac452",
- "sha256:f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e"
- ],
- "index": "pypi",
- "version": "==21.12.0"
- },
- "greenlet": {
- "hashes": [
- "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3",
- "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711",
- "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd",
- "sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073",
- "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708",
- "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67",
- "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23",
- "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1",
- "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08",
- "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd",
- "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2",
- "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa",
- "sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8",
- "sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40",
- "sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab",
- "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6",
- "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc",
- "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b",
- "sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e",
- "sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963",
- "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3",
- "sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d",
- "sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d",
- "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe",
- "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28",
- "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3",
- "sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e",
- "sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c",
- "sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d",
- "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0",
- "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497",
- "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee",
- "sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713",
- "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58",
- "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a",
- "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06",
- "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88",
- "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965",
- "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f",
- "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4",
- "sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5",
- "sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c",
- "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a",
- "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1",
- "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43",
- "sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627",
- "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b",
- "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168",
- "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d",
- "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5",
- "sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478",
- "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf",
- "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce",
- "sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c",
- "sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b"
- ],
- "markers": "platform_python_implementation == 'CPython'",
- "version": "==1.1.2"
- },
- "importlib-metadata": {
- "hashes": [
- "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6",
- "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"
- ],
- "markers": "python_version < '3.10'",
- "version": "==4.11.3"
- },
- "itsdangerous": {
- "hashes": [
- "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44",
- "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==2.1.2"
- },
- "jinja2": {
- "hashes": [
- "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119",
- "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.1.1"
- },
- "markupsafe": {
- "hashes": [
- "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003",
- "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88",
- "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5",
- "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7",
- "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a",
- "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603",
- "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1",
- "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135",
- "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247",
- "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6",
- "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601",
- "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77",
- "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02",
- "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e",
- "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63",
- "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f",
- "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980",
- "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b",
- "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812",
- "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff",
- "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96",
- "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1",
- "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925",
- "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a",
- "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6",
- "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e",
- "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f",
- "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4",
- "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f",
- "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3",
- "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c",
- "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a",
- "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417",
- "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a",
- "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a",
- "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37",
- "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452",
- "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933",
- "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
- "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==2.1.1"
- },
- "packaging": {
- "hashes": [
- "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
- "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"
- ],
- "markers": "python_version >= '3.6'",
- "version": "==21.3"
- },
- "platformshconfig": {
- "hashes": [
- "sha256:3eb95a514de57ce3341690fd3e0a61e6fa8c858a0793810a29fcce40691254a2",
- "sha256:ff1e29719d2789f6d164e1abd42dbecec1c535e5e741161ba177cec34bfdd6de"
- ],
- "index": "pypi",
- "version": "==2.4.0"
- },
- "pymysql": {
- "hashes": [
- "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641",
- "sha256:816927a350f38d56072aeca5dfb10221fe1dc653745853d30a216637f5d7ad36"
- ],
- "index": "pypi",
- "version": "==1.0.2"
- },
- "pyparsing": {
- "hashes": [
- "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954",
- "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"
- ],
- "markers": "python_full_version >= '3.6.8'",
- "version": "==3.0.8"
- },
- "redis": {
- "hashes": [
- "sha256:0107dc8e98a4f1d1d4aa00100e044287f77121a1e6d2085545c4b7fa94a7a27f",
- "sha256:4e95f4ec5f49e636efcf20061a5a9110c20852f607cfca6865c07aaa8a739ee2"
- ],
- "index": "pypi",
- "version": "==4.2.2"
- },
- "setuptools": {
- "hashes": [
- "sha256:26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8",
- "sha256:47c7b0c0f8fc10eec4cf1e71c6fdadf8decaa74ffa087e68cd1c20db7ad6a592"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==62.1.0"
- },
- "werkzeug": {
- "hashes": [
- "sha256:3c5493ece8268fecdcdc9c0b112211acd006354723b280d643ec732b6d4063d6",
- "sha256:f8e89a20aeabbe8a893c24a461d3ee5dad2123b05cc6abd73ceed01d39c3ae74"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==2.1.1"
- },
- "wrapt": {
- "hashes": [
- "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b",
- "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0",
- "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330",
- "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3",
- "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68",
- "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa",
- "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe",
- "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd",
- "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b",
- "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80",
- "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38",
- "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f",
- "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350",
- "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd",
- "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb",
- "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3",
- "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0",
- "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff",
- "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c",
- "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758",
- "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036",
- "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb",
- "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763",
- "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9",
- "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7",
- "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1",
- "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7",
- "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0",
- "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5",
- "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce",
- "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8",
- "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279",
- "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0",
- "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06",
- "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561",
- "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a",
- "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311",
- "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131",
- "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4",
- "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291",
- "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4",
- "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8",
- "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8",
- "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d",
- "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c",
- "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd",
- "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d",
- "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6",
- "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775",
- "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e",
- "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627",
- "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e",
- "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8",
- "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1",
- "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48",
- "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc",
- "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3",
- "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6",
- "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425",
- "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d",
- "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23",
- "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c",
- "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33",
- "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==1.14.0"
- },
- "zipp": {
- "hashes": [
- "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad",
- "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"
- ],
- "markers": "python_version >= '3.7'",
- "version": "==3.8.0"
- },
- "zope.event": {
- "hashes": [
- "sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42",
- "sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330"
- ],
- "version": "==4.5.0"
- },
- "zope.interface": {
- "hashes": [
- "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192",
- "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702",
- "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09",
- "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4",
- "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a",
- "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3",
- "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf",
- "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c",
- "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d",
- "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78",
- "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83",
- "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531",
- "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46",
- "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021",
- "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94",
- "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc",
- "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63",
- "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54",
- "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117",
- "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25",
- "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05",
- "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e",
- "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1",
- "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004",
- "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2",
- "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e",
- "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f",
- "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f",
- "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120",
- "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f",
- "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1",
- "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9",
- "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e",
- "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7",
- "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8",
- "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b",
- "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155",
- "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7",
- "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c",
- "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325",
- "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d",
- "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb",
- "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e",
- "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959",
- "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7",
- "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920",
- "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e",
- "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48",
- "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8",
- "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4",
- "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263"
- ],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
- "version": "==5.4.0"
- }
- },
- "develop": {}
-}
diff --git a/templates/flask/files/README.md b/templates/flask/files/README.md
index e54c091c2..255533e43 100644
--- a/templates/flask/files/README.md
+++ b/templates/flask/files/README.md
@@ -63,7 +63,7 @@ Flask is a lightweight web microframework for Python.
## Features
-- Python 3.7
+- Python 3.9
- Flask 2
- MariaDB 10.4
- Redis 5.0
diff --git a/templates/laravel/files/.github/tests/vrt/template-paths.js b/templates/laravel/files/.github/tests/vrt/template-paths.js
new file mode 100644
index 000000000..00c23821e
--- /dev/null
+++ b/templates/laravel/files/.github/tests/vrt/template-paths.js
@@ -0,0 +1,39 @@
+/**
+ * This is the default scenarios collection that will be used if there is not a theme-specific scenarios file in place
+ * for a given theme. You can copy this file and then name it `template-paths.js`.
+ *
+ */
+
+/**
+ * Stores the scenarios for each page/endpoint that should be tested
+ * @type {{}}
+ */
+var scenarioPaths = {};
+
+/**
+ * For each page/endpoint you want to test, create a new array entry that contains at least the keys/properties `label`
+ * and `path`.
+ *
+ * additional properties you can set for each scenario are documented here: https://github.com/garris/BackstopJS#advanced-scenarios
+ *
+ * However, do NOT set `referenceUrl` or `url` as those will be overridden
+ *
+ * `path` should assume the URL ends in a trailing slash. For example, if the page you want to test against is
+ * https://master-7rqtwti-fqfjrmtjbjta4.eu-3.platformsh.site/a/path/to/foo/bar/
+ * Then for `path` it should be "a/path/to/foo/bar/"
+ *
+ * @type {{path: string, label: string}[]}
+ */
+scenarioPaths.paths = [
+ {
+ "label": "Home",
+ "delay": 2000,
+ "hideSelectors": [".mt-4"],
+ },
+ {
+ "label": "Forced 404",
+ "delay": 2000,
+ },
+];
+
+module.exports = scenarioPaths;
diff --git a/templates/laravel/files/.platform.app.yaml b/templates/laravel/files/.platform.app.yaml
index f099d71cc..935fca787 100644
--- a/templates/laravel/files/.platform.app.yaml
+++ b/templates/laravel/files/.platform.app.yaml
@@ -17,7 +17,7 @@ runtime:
# - blackfire # https://docs.platform.sh/integrations/observability/blackfire.
build:
- flavor: none
+ flavor: composer
variables:
env:
@@ -27,7 +27,7 @@ variables:
hooks:
build: |
set -e
- composer --no-ansi --no-interaction install --no-progress --prefer-dist --optimize-autoloader --no-dev
+
# install a specific NodeJS version https://github.com/platformsh/snippets/
# -v requested version
# -y install Yarn
@@ -36,10 +36,12 @@ hooks:
# uncomment next line to build assets deploying
# npm install && npm run production
+
deploy: |
set -e
php artisan optimize:clear
-
+ php artisan optimize
+ php artisan view:cache
php artisan migrate --force
# The relationships of the application with services or other applications.
@@ -95,14 +97,14 @@ crons:
# Run Laravel's scheduler every 5 minutes, which is often as crons can run on Professional plans.
scheduler:
spec: '*/5 * * * *'
- commands: 'php artisan schedule:run'
+ cmd: 'php artisan schedule:run'
# Run Laravel's queue worker task every 9 minutes
queue:
spec: '*/9 * * * *'
# Allow the worker to run for up to 5 minutes. That prevents
# a long-running queue from blocking a deploy for more than 5
# minutes.
- commands: 'php artisan queue:work --max-time=300'
+ cmd: 'php artisan queue:work --max-time=300'
# If you have an especially large queue, you may be better off using a worker.
# If so, comment out the `queue` cron entry and uncomment this instead. Note that
diff --git a/templates/laravel/files/README.md b/templates/laravel/files/README.md
index d4270ce0a..e022b2e97 100644
--- a/templates/laravel/files/README.md
+++ b/templates/laravel/files/README.md
@@ -12,7 +12,7 @@ Laravel is an opinionated, integrated rapid-application-development framework fo
## Features
-* PHP 7.4
+* PHP 8.0
* MariaDB 10.4
* Redis 5.0
* Automatic TLS certificates
diff --git a/templates/wagtail/files/.platform.app.yaml b/templates/wagtail/files/.platform.app.yaml
index f17b10354..49be7aef2 100644
--- a/templates/wagtail/files/.platform.app.yaml
+++ b/templates/wagtail/files/.platform.app.yaml
@@ -30,7 +30,7 @@ web:
socket_family: unix
# Commands are run once after deployment to start the application process.
commands:
- start: "gunicorn -w 4 -b unix:$SOCKET myapp.wsgi:application"
+ start: "pipenv run gunicorn -w 4 -b unix:$SOCKET myapp.wsgi:application"
locations:
"/":
passthru: true
@@ -55,14 +55,13 @@ hooks:
build: |
pipenv install --system --deploy
mkdir logs
- python manage.py collectstatic
+ pipenv run python manage.py collectstatic
rm -rf logs
deploy: |
- python manage.py migrate
+ pipenv run python manage.py migrate
source:
operations:
auto-update:
command: |
curl -fsS https://raw.githubusercontent.com/platformsh/source-operations/main/setup.sh | { bash /dev/fd/3 sop-autoupdate; } 3<&0
-
diff --git a/templates/wagtail/files/myapp/settings.py b/templates/wagtail/files/myapp/settings.py
index 69110092c..0884f9526 100644
--- a/templates/wagtail/files/myapp/settings.py
+++ b/templates/wagtail/files/myapp/settings.py
@@ -27,7 +27,7 @@
SECRET_KEY = '5^#15wdl(qll2ue&&(-1ixwalo7%td1a(&x7abp(roabe_mk7w'
# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
+DEBUG = False
ALLOWED_HOSTS = ['*']