Merge pull request #42 from grillazz/onboard-alembic😉

Onboard alembic😉
This commit is contained in:
Jakub Miazek 2022-06-03 19:54:33 +02:00 committed by GitHub
commit cbc5436987
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 227 additions and 248 deletions

View File

@ -25,7 +25,7 @@ jobs:
steps:
- name: Create database schema
run: PGPASSWORD=secret psql -h 127.0.0.1 -d testdb -U user -c "CREATE SCHEMA shakespeare; CREATE SCHEMA the_others;"
run: PGPASSWORD=secret psql -h 127.0.0.1 -d testdb -U user -c "CREATE SCHEMA shakespeare_i_like; CREATE SCHEMA happy_hog;"
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2

View File

@ -11,8 +11,18 @@ up: ## Run project with compose
docker-compose up --remove-orphans
.PHONY: clean
clean: ## Clean Reset project containers with compose
docker-compose down -v --remove-orphans
clean: ## Clean Reset project containers and volumes with compose
docker-compose down -v --remove-orphans | true
docker-compose rm -f | true
docker volume rm fastapi_postgres_data | true
.PHONY: migrate-apply
migrate-apply: ## apply alembic migrations to database/schema
docker-compose run --rm app alembic upgrade head
.PHONY: migrate-create
migrate-create: ## create new alembic migration
docker-compose run --rm app alembic revision --autogenerate
.PHONY: requirements
requirements: ## Refresh requirements.txt from pipfile.lock
@ -37,9 +47,13 @@ lint: ## Lint project code.
mypy the_app tests
black the_app tests --line-length=120 --check --diff
.PHONY: format
format: ## Format project code.
isort the_app tests
autoflake --remove-all-unused-imports --recursive --remove-unused-variables --in-place the_app tests --exclude=__init__.py
black the_app tests --line-length=120
.PHONY: slim-build
slim-build: ## with power of docker-slim build smaller and safer images
docker-slim build --compose-file docker-compose.yml --target-compose-svc app --dep-include-target-compose-svc-deps true --http-probe-exec app fastapi-sqlalchemy-asyncpg_app:latest

View File

@ -15,8 +15,6 @@ sqlalchemy = {extras = ["asyncio"], version = "*"}
alembic = "*"
eventlet = "*"
rich = "*"
pytest-cov = "*"
pytest-asyncio = "*"
[dev-packages]
devtools = {extras = ["pygments"], version = "*"}
@ -29,6 +27,8 @@ autoflake = "*"
pyupgrade = "*"
ipython = "*"
pylint = "*"
pytest-cov = "*"
pytest-asyncio = "*"
[requires]
python_version = "3.10"

296
Pipfile.lock generated
View File

@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "f9a5eb2c04f8e18e17fc3028c403bff1c94c5456011ec8fac8d9890b2e8dadd9"
"sha256": "efc7ea209aa33e4e8b971f9aa1653abe3d430af5bc013055b4dcab2a08cb3078"
},
"pipfile-spec": 6,
"requires": {
@ -72,14 +72,6 @@
"index": "pypi",
"version": "==0.25.0"
},
"attrs": {
"hashes": [
"sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
"sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==21.4.0"
},
"certifi": {
"hashes": [
"sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7",
@ -111,56 +103,6 @@
],
"version": "==0.9.1"
},
"coverage": {
"extras": [
"toml"
],
"hashes": [
"sha256:06f54765cdbce99901871d50fe9f41d58213f18e98b170a30ca34f47de7dd5e8",
"sha256:114944e6061b68a801c5da5427b9173a0dd9d32cd5fcc18a13de90352843737d",
"sha256:1414e8b124611bf4df8d77215bd32cba6e3425da8ce9c1f1046149615e3a9a31",
"sha256:2781c43bffbbec2b8867376d4d61916f5e9c4cc168232528562a61d1b4b01879",
"sha256:2ab88a01cd180b5640ccc9c47232e31924d5f9967ab7edd7e5c91c68eee47a69",
"sha256:338c417613f15596af9eb7a39353b60abec9d8ce1080aedba5ecee6a5d85f8d3",
"sha256:3401b0d2ed9f726fadbfa35102e00d1b3547b73772a1de5508ef3bdbcb36afe7",
"sha256:462105283de203df8de58a68c1bb4ba2a8a164097c2379f664fa81d6baf94b81",
"sha256:4cd696aa712e6cd16898d63cf66139dc70d998f8121ab558f0e1936396dbc579",
"sha256:4d06380e777dd6b35ee936f333d55b53dc4a8271036ff884c909cf6e94be8b6c",
"sha256:61f4fbf3633cb0713437291b8848634ea97f89c7e849c2be17a665611e433f53",
"sha256:6d4a6f30f611e657495cc81a07ff7aa8cd949144e7667c5d3e680d73ba7a70e4",
"sha256:6f5fee77ec3384b934797f1873758f796dfb4f167e1296dc00f8b2e023ce6ee9",
"sha256:75b5dbffc334e0beb4f6c503fb95e6d422770fd2d1b40a64898ea26d6c02742d",
"sha256:7835f76a081787f0ca62a53504361b3869840a1620049b56d803a8cb3a9eeea3",
"sha256:79bf405432428e989cad7b8bc60581963238f7645ae8a404f5dce90236cc0293",
"sha256:8329635c0781927a2c6ae068461e19674c564e05b86736ab8eb29c420ee7dc20",
"sha256:8586b177b4407f988731eb7f41967415b2197f35e2a6ee1a9b9b561f6323c8e9",
"sha256:892e7fe32191960da559a14536768a62e83e87bbb867e1b9c643e7e0fbce2579",
"sha256:91502bf27cbd5c83c95cfea291ef387469f2387508645602e1ca0fd8a4ba7548",
"sha256:93b16b08f94c92cab88073ffd185070cdcb29f1b98df8b28e6649145b7f2c90d",
"sha256:9c9441d57b0963cf8340268ad62fc83de61f1613034b79c2b1053046af0c5284",
"sha256:ad8f9068f5972a46d50fe5f32c09d6ee11da69c560fcb1b4c3baea246ca4109b",
"sha256:afb03f981fadb5aed1ac6e3dd34f0488e1a0875623d557b6fad09b97a942b38a",
"sha256:b5ba058610e8289a07db2a57bce45a1793ec0d3d11db28c047aae2aa1a832572",
"sha256:baa8be8aba3dd1e976e68677be68a960a633a6d44c325757aefaa4d66175050f",
"sha256:c06455121a089252b5943ea682187a4e0a5cf0a3fb980eb8e7ce394b144430a9",
"sha256:c1a9942e282cc9d3ed522cd3e3cab081149b27ea3bda72d6f61f84eaf88c1a63",
"sha256:c488db059848702aff30aa1d90ef87928d4e72e4f00717343800546fdbff0a94",
"sha256:cb5311d6ccbd22578c80028c5e292a7ab9adb91bd62c1982087fad75abe2e63d",
"sha256:cbe91bc84be4e5ef0b1480d15c7b18e29c73bdfa33e07d3725da7d18e1b0aff2",
"sha256:cc692c9ee18f0dd3214843779ba6b275ee4bb9b9a5745ba64265bce911aefd1a",
"sha256:cc972d829ad5ef4d4c5fcabd2bbe2add84ce8236f64ba1c0c72185da3a273130",
"sha256:ceb6534fcdfb5c503affb6b1130db7b5bfc8a0f77fa34880146f7a5c117987d0",
"sha256:d522f1dc49127eab0bfbba4e90fa068ecff0899bbf61bf4065c790ddd6c177fe",
"sha256:db094a6a4ae6329ed322a8973f83630b12715654c197dd392410400a5bfa1a73",
"sha256:df32ee0f4935a101e4b9a5f07b617d884a531ed5666671ff6ac66d2e8e8246d8",
"sha256:e5af1feee71099ae2e3b086ec04f57f9950e1be9ecf6c420696fea7977b84738",
"sha256:e814a4a5a1d95223b08cdb0f4f57029e8eab22ffdbae2f97107aeef28554517e",
"sha256:f8cabc5fd0091976ab7b020f5708335033e422de25e20ddf9416bdce2b7e07d8",
"sha256:fbc86ae8cc129c801e7baaafe3addf3c8d49c9c1597c44bdf2d78139707c3c62"
],
"markers": "python_version >= '3.7'",
"version": "==6.3.3"
},
"dnspython": {
"hashes": [
"sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e",
@ -242,7 +184,7 @@
"sha256:f27f0875e0873f6bf5df09a456bfcac0667824cabac4cad30b43f36e0382ffe7",
"sha256:fcd4a6d04995f1d66bc78b503e4e59ae72fd32aaec4f661657fe5ae5c1aa4ce3"
],
"markers": "python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))",
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==2.0.0a2"
},
"h11": {
@ -317,13 +259,6 @@
"markers": "python_full_version >= '3.5.0'",
"version": "==3.3"
},
"iniconfig": {
"hashes": [
"sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
"sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"
],
"version": "==1.1.1"
},
"mako": {
"hashes": [
"sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba",
@ -378,30 +313,6 @@
"markers": "python_version >= '3.7'",
"version": "==2.1.1"
},
"packaging": {
"hashes": [
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
"sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"
],
"markers": "python_version >= '3.6'",
"version": "==21.3"
},
"pluggy": {
"hashes": [
"sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159",
"sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"
],
"markers": "python_version >= '3.6'",
"version": "==1.0.0"
},
"py": {
"hashes": [
"sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719",
"sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==1.11.0"
},
"pydantic": {
"hashes": [
"sha256:02eefd7087268b711a3ff4db528e9916ac9aa18616da7bca69c1871d0b7a091f",
@ -451,39 +362,6 @@
"markers": "python_version >= '3.6'",
"version": "==2.12.0"
},
"pyparsing": {
"hashes": [
"sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb",
"sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"
],
"markers": "python_full_version >= '3.6.8'",
"version": "==3.0.9"
},
"pytest": {
"hashes": [
"sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c",
"sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"
],
"markers": "python_version >= '3.7'",
"version": "==7.1.2"
},
"pytest-asyncio": {
"hashes": [
"sha256:16cf40bdf2b4fb7fc8e4b82bd05ce3fbcd454cbf7b92afc445fe299dabb88213",
"sha256:7659bdb0a9eb9c6e3ef992eef11a2b3e69697800ad02fb06374a210d85b29f91",
"sha256:8fafa6c52161addfd41ee7ab35f11836c5a16ec208f93ee388f752bea3493a84"
],
"index": "pypi",
"version": "==0.18.3"
},
"pytest-cov": {
"hashes": [
"sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6",
"sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"
],
"index": "pypi",
"version": "==3.0.0"
},
"rfc3986": {
"extras": [
"idna2008"
@ -496,11 +374,11 @@
},
"rich": {
"hashes": [
"sha256:d13c6c90c42e24eb7ce660db397e8c398edd58acb7f92a2a88a95572b838aaa4",
"sha256:d239001c0fb7de985e21ec9a4bb542b5150350330bbc1849f835b9cbc8923b91"
"sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2",
"sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"
],
"index": "pypi",
"version": "==12.4.1"
"version": "==12.4.4"
},
"six": {
"hashes": [
@ -571,13 +449,6 @@
"markers": "python_version >= '3.6'",
"version": "==0.19.1"
},
"tomli": {
"hashes": [
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"version": "==2.0.1"
},
"typing-extensions": {
"hashes": [
"sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708",
@ -641,6 +512,14 @@
],
"version": "==2.0.5"
},
"attrs": {
"hashes": [
"sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
"sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==21.4.0"
},
"autoflake": {
"hashes": [
"sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"
@ -708,6 +587,56 @@
"markers": "python_version >= '3.7'",
"version": "==8.1.3"
},
"coverage": {
"extras": [
"toml"
],
"hashes": [
"sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a",
"sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6",
"sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383",
"sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f",
"sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f",
"sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f",
"sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c",
"sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018",
"sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720",
"sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3",
"sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf",
"sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211",
"sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39",
"sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95",
"sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41",
"sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c",
"sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166",
"sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49",
"sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce",
"sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088",
"sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6",
"sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426",
"sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df",
"sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632",
"sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3",
"sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08",
"sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65",
"sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea",
"sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701",
"sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5",
"sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311",
"sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7",
"sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d",
"sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61",
"sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c",
"sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a",
"sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055",
"sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740",
"sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45",
"sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052",
"sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f"
],
"markers": "python_version >= '3.7'",
"version": "==6.4"
},
"decorator": {
"hashes": [
"sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
@ -758,6 +687,13 @@
"markers": "python_full_version >= '3.5.0'",
"version": "==3.3"
},
"iniconfig": {
"hashes": [
"sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
"sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"
],
"version": "==1.1.1"
},
"ipython": {
"hashes": [
"sha256:341456643a764c28f670409bbd5d2518f9b82c013441084ff2c2fc999698f83b",
@ -842,32 +778,32 @@
},
"mypy": {
"hashes": [
"sha256:0112752a6ff07230f9ec2f71b0d3d4e088a910fdce454fdb6553e83ed0eced7d",
"sha256:0384d9f3af49837baa92f559d3fa673e6d2652a16550a9ee07fc08c736f5e6f8",
"sha256:1b333cfbca1762ff15808a0ef4f71b5d3eed8528b23ea1c3fb50543c867d68de",
"sha256:1fdeb0a0f64f2a874a4c1f5271f06e40e1e9779bf55f9567f149466fc7a55038",
"sha256:4c653e4846f287051599ed8f4b3c044b80e540e88feec76b11044ddc5612ffed",
"sha256:563514c7dc504698fb66bb1cf897657a173a496406f1866afae73ab5b3cdb334",
"sha256:5b231afd6a6e951381b9ef09a1223b1feabe13625388db48a8690f8daa9b71ff",
"sha256:5ce6a09042b6da16d773d2110e44f169683d8cc8687e79ec6d1181a72cb028d2",
"sha256:5e7647df0f8fc947388e6251d728189cfadb3b1e558407f93254e35abc026e22",
"sha256:6003de687c13196e8a1243a5e4bcce617d79b88f83ee6625437e335d89dfebe2",
"sha256:61504b9a5ae166ba5ecfed9e93357fd51aa693d3d434b582a925338a2ff57fd2",
"sha256:77423570c04aca807508a492037abbd72b12a1fb25a385847d191cd50b2c9605",
"sha256:a4d9898f46446bfb6405383b57b96737dcfd0a7f25b748e78ef3e8c576bba3cb",
"sha256:a952b8bc0ae278fc6316e6384f67bb9a396eb30aced6ad034d3a76120ebcc519",
"sha256:b5b5bd0ffb11b4aba2bb6d31b8643902c48f990cc92fda4e21afac658044f0c0",
"sha256:ca75ecf2783395ca3016a5e455cb322ba26b6d33b4b413fcdedfc632e67941dc",
"sha256:cf9c261958a769a3bd38c3e133801ebcd284ffb734ea12d01457cb09eacf7d7b",
"sha256:dd4d670eee9610bf61c25c940e9ade2d0ed05eb44227275cce88701fee014b1f",
"sha256:e19736af56947addedce4674c0971e5dceef1b5ec7d667fe86bcd2b07f8f9075",
"sha256:eaea21d150fb26d7b4856766e7addcf929119dd19fc832b22e71d942835201ef",
"sha256:eaff8156016487c1af5ffa5304c3e3fd183edcb412f3e9c72db349faf3f6e0eb",
"sha256:ee0a36edd332ed2c5208565ae6e3a7afc0eabb53f5327e281f2ef03a6bc7687a",
"sha256:ef7beb2a3582eb7a9f37beaf38a28acfd801988cde688760aea9e6cc4832b10b"
"sha256:0ebfb3f414204b98c06791af37a3a96772203da60636e2897408517fcfeee7a8",
"sha256:239d6b2242d6c7f5822163ee082ef7a28ee02e7ac86c35593ef923796826a385",
"sha256:29dc94d9215c3eb80ac3c2ad29d0c22628accfb060348fd23d73abe3ace6c10d",
"sha256:2c7f8bb9619290836a4e167e2ef1f2cf14d70e0bc36c04441e41487456561409",
"sha256:33d53a232bb79057f33332dbbb6393e68acbcb776d2f571ba4b1d50a2c8ba873",
"sha256:3a3e525cd76c2c4f90f1449fd034ba21fcca68050ff7c8397bb7dd25dd8b8248",
"sha256:3eabcbd2525f295da322dff8175258f3fc4c3eb53f6d1929644ef4d99b92e72d",
"sha256:481f98c6b24383188c928f33dd2f0776690807e12e9989dd0419edd5c74aa53b",
"sha256:7a76dc4f91e92db119b1be293892df8379b08fd31795bb44e0ff84256d34c251",
"sha256:7d390248ec07fa344b9f365e6ed9d205bd0205e485c555bed37c4235c868e9d5",
"sha256:826a2917c275e2ee05b7c7b736c1e6549a35b7ea5a198ca457f8c2ebea2cbecf",
"sha256:85cf2b14d32b61db24ade8ac9ae7691bdfc572a403e3cb8537da936e74713275",
"sha256:8d645e9e7f7a5da3ec3bbcc314ebb9bb22c7ce39e70367830eb3c08d0140b9ce",
"sha256:925aa84369a07846b7f3b8556ccade1f371aa554f2bd4fb31cb97a24b73b036e",
"sha256:a85a20b43fa69efc0b955eba1db435e2ffecb1ca695fe359768e0503b91ea89f",
"sha256:bfd4f6536bd384c27c392a8b8f790fd0ed5c0cf2f63fc2fed7bce56751d53026",
"sha256:cb7752b24528c118a7403ee955b6a578bfcf5879d5ee91790667c8ea511d2085",
"sha256:cc537885891382e08129d9862553b3d00d4be3eb15b8cae9e2466452f52b0117",
"sha256:d4fccf04c1acf750babd74252e0f2db6bd2ac3aa8fe960797d9f3ef41cf2bfd4",
"sha256:f1ba54d440d4feee49d8768ea952137316d454b15301c44403db3f2cb51af024",
"sha256:f47322796c412271f5aea48381a528a613f33e0a115452d03ae35d673e6064f8",
"sha256:fbfb873cf2b8d8c3c513367febde932e061a5f73f762896826ba06391d932b2a",
"sha256:ffdad80a92c100d1b0fe3d3cf1a4724136029a29afe8566404c0146747114382"
],
"index": "pypi",
"version": "==0.950"
"version": "==0.960"
},
"mypy-extensions": {
"hashes": [
@ -922,6 +858,14 @@
"markers": "python_version >= '3.7'",
"version": "==2.5.2"
},
"pluggy": {
"hashes": [
"sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159",
"sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"
],
"markers": "python_version >= '3.6'",
"version": "==1.0.0"
},
"prompt-toolkit": {
"hashes": [
"sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752",
@ -944,6 +888,14 @@
],
"version": "==0.2.2"
},
"py": {
"hashes": [
"sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719",
"sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==1.11.0"
},
"pycodestyle": {
"hashes": [
"sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20",
@ -984,6 +936,31 @@
"markers": "python_full_version >= '3.6.8'",
"version": "==3.0.9"
},
"pytest": {
"hashes": [
"sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c",
"sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"
],
"markers": "python_version >= '3.7'",
"version": "==7.1.2"
},
"pytest-asyncio": {
"hashes": [
"sha256:16cf40bdf2b4fb7fc8e4b82bd05ce3fbcd454cbf7b92afc445fe299dabb88213",
"sha256:7659bdb0a9eb9c6e3ef992eef11a2b3e69697800ad02fb06374a210d85b29f91",
"sha256:8fafa6c52161addfd41ee7ab35f11836c5a16ec208f93ee388f752bea3493a84"
],
"index": "pypi",
"version": "==0.18.3"
},
"pytest-cov": {
"hashes": [
"sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6",
"sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"
],
"index": "pypi",
"version": "==3.0.0"
},
"pyupgrade": {
"hashes": [
"sha256:11e2c3e4e2e53a61b2d8852ed154ea5683887b6ac42561622ca8d89c94fd951a",
@ -1130,6 +1107,7 @@
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"markers": "python_version < '3.11'",
"version": "==2.0.1"
},
"traitlets": {
@ -1153,7 +1131,7 @@
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'",
"version": "==1.26.9"
},
"wcwidth": {

View File

@ -1,11 +1,11 @@
DROP DATABASE IF EXISTS devdb;
CREATE DATABASE devdb;
\connect devdb;
CREATE SCHEMA shakespeare;
CREATE SCHEMA the_others;
CREATE SCHEMA shakespeare_i_like;
CREATE SCHEMA happy_hog;
DROP DATABASE IF EXISTS testdb;
CREATE DATABASE testdb;
\connect testdb;
CREATE SCHEMA shakespeare;
CREATE SCHEMA the_others;
CREATE SCHEMA shakespeare_i_like;
CREATE SCHEMA happy_hog;

View File

@ -2,6 +2,7 @@ version: '3'
services:
app:
image: fastapi-sqlalchemy-asyncpg_app
build: .
env_file:
- .env
@ -20,11 +21,12 @@ services:
- db
db:
image: fastapi-sqlalchemy-asyncpg_db
build:
context: ./db
dockerfile: Dockerfile
volumes:
- postgres_data:/var/lib/postgresql/data
- fastapi_postgres_data:/var/lib/postgresql/data
env_file:
- .env
- .secrets
@ -42,4 +44,4 @@ services:
retries: 5
volumes:
postgres_data:
fastapi_postgres_data:

View File

@ -1,95 +1,83 @@
#
# These requirements were autogenerated by pipenv
# To regenerate from the project's Pipfile, run:
#
# pipenv lock --requirements --dev
#
# Note: in pipenv 2020.x, "--dev" changed to emit both default and development
# requirements. To emit only development requirements, pass "--dev-only".
-i https://pypi.org/simple
alembic==1.7.7
anyio==3.6.1; python_full_version >= '3.6.2'
appnope==0.1.3; sys_platform == 'darwin'
asgiref==3.5.2; python_version >= '3.7'
astroid==2.6.6; python_version ~= '3.6'
anyio==3.6.1
appnope==0.1.3
asgiref==3.5.2
astroid==2.6.6
asttokens==2.0.5
asyncpg==0.25.0
attrs==21.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
attrs==21.4.0
autoflake==1.4
backcall==0.2.0
black==22.3.0
certifi==2022.5.18.1; python_version >= '3.6'
charset-normalizer==2.0.12; python_full_version >= '3.5.0'
click==8.1.3; python_version >= '3.7'
certifi==2022.5.18.1
charset-normalizer==2.0.12
click==8.1.3
commonmark==0.9.1
coverage[toml]==6.3.3; python_version >= '3.7'
decorator==5.1.1; python_version >= '3.5'
devtools[pygments]==0.8.0
dnspython==2.2.1; python_version >= '3.6' and python_full_version < '4.0.0'
dparse==0.5.1; python_version >= '3.5'
coverage==6.4
decorator==5.1.1
devtools==0.8.0
dnspython==2.2.1
dparse==0.5.1
eventlet==0.33.1
executing==0.8.3
fastapi==0.78.0
flake8==4.0.1
greenlet==2.0.0a2; python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))
h11==0.12.0; python_version >= '3.6'
httpcore==0.13.7; python_version >= '3.6'
greenlet==2.0.0a2
h11==0.12.0
httpcore==0.13.7
httptools==0.4.0
httpx==1.0.0b0
idna==3.3; python_full_version >= '3.5.0'
idna==3.3
iniconfig==1.1.1
ipython==8.3.0
isort==5.10.1
jedi==0.18.1; python_version >= '3.6'
lazy-object-proxy==1.7.1; python_version >= '3.6'
mako==1.2.0; python_version >= '3.7'
markupsafe==2.1.1; python_version >= '3.7'
matplotlib-inline==0.1.3; python_version >= '3.5'
jedi==0.18.1
lazy-object-proxy==1.7.1
Mako==1.2.0
MarkupSafe==2.1.1
matplotlib-inline==0.1.3
mccabe==0.6.1
mypy==0.960
mypy-extensions==0.4.3
mypy==0.950
packaging==21.3; python_version >= '3.6'
parso==0.8.3; python_version >= '3.6'
packaging==21.3
parso==0.8.3
pathspec==0.9.0
pexpect==4.8.0; sys_platform != 'win32'
pexpect==4.8.0
pickleshare==0.7.5
platformdirs==2.5.2; python_version >= '3.7'
pluggy==1.0.0; python_version >= '3.6'
prompt-toolkit==3.0.29; python_full_version >= '3.6.2'
platformdirs==2.5.2
pluggy==1.0.0
prompt-toolkit==3.0.29
ptyprocess==0.7.0
pure-eval==0.2.2
py==1.11.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
pycodestyle==2.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
py==1.11.0
pycodestyle==2.8.0
pydantic==1.9.1
pyflakes==2.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pygments==2.12.0; python_version >= '3.6'
pyflakes==2.4.0
Pygments==2.12.0
pylint==3.0.0a4
pyparsing==3.0.9; python_full_version >= '3.6.8'
pyparsing==3.0.9
pytest==7.1.2
pytest-asyncio==0.18.3
pytest-cov==3.0.0
pytest==7.1.2; python_version >= '3.7'
pyupgrade==2.32.1
pyyaml==6.0; python_version >= '3.6'
requests==2.27.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
rfc3986[idna2008]==1.5.0
rich==12.4.1
ruamel.yaml.clib==0.2.6; python_version < '3.11' and platform_python_implementation == 'CPython'
ruamel.yaml==0.17.21; python_version >= '3'
PyYAML==6.0
requests==2.27.1
rfc3986==1.5.0
rich==12.4.4
ruamel.yaml==0.17.21
ruamel.yaml.clib==0.2.6
safety==2.0b1
setuptools==62.3.2; python_version >= '3.7'
six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sniffio==1.2.0; python_full_version >= '3.5.0'
sqlalchemy[asyncio]==1.4.36
six==1.16.0
sniffio==1.2.0
SQLAlchemy==1.4.36
stack-data==0.2.0
starlette==0.19.1; python_version >= '3.6'
tokenize-rt==4.2.1; python_full_version >= '3.6.1'
toml==0.10.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'
starlette==0.19.1
tokenize-rt==4.2.1
toml==0.10.2
tomli==2.0.1
traitlets==5.2.1.post0; python_version >= '3.7'
typing-extensions==4.2.0; python_version >= '3.7'
urllib3==1.26.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'
traitlets==5.2.1.post0
typing_extensions==4.2.0
urllib3==1.26.9
uvicorn==0.17.6
uvloop==0.16.0
wcwidth==0.2.5

View File

@ -14,16 +14,16 @@ app.include_router(stuff_router)
app.include_router(nonsense_router)
# async def start_db():
# async with engine.begin() as conn:
# await conn.run_sync(Base.metadata.create_all)
# await engine.dispose()
async def start_db():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
await engine.dispose()
@app.on_event("startup")
async def startup_event():
logger.info("Starting up...")
# await start_db()
await start_db()
@app.on_event("shutdown")

View File

@ -1,3 +0,0 @@
from the_app.models.nonsense import Nonsense # noqa
from the_app.models.shakespeare import Character # noqa
from the_app.models.stuff import Stuff # noqa

View File

@ -11,7 +11,7 @@ from the_app.models.base import Base
class Nonsense(Base):
__tablename__ = "nonsense"
__table_args__ = (
{"schema": "the_others"},
{"schema": "happy_hog"},
)
id = Column(UUID(as_uuid=True), unique=True, default=uuid.uuid4, autoincrement=True)
name = Column(String, nullable=False, primary_key=True, unique=True)

View File

@ -18,7 +18,7 @@ metadata = Base.metadata
class Character(Base):
__tablename__ = "character"
__table_args__ = (PrimaryKeyConstraint("id", name="character_pkey"), {"schema": "shakespeare"})
__table_args__ = (PrimaryKeyConstraint("id", name="character_pkey"), {"schema": "shakespeare_i_like"})
id = Column(String(32))
name = Column(String(64), nullable=False)
@ -32,7 +32,7 @@ class Character(Base):
class Wordform(Base):
__tablename__ = "wordform"
__table_args__ = (PrimaryKeyConstraint("id", name="wordform_pkey"), {"schema": "shakespeare"})
__table_args__ = (PrimaryKeyConstraint("id", name="wordform_pkey"), {"schema": "shakespeare_i_like"})
id = Column(Integer)
plain_text = Column(String(64), nullable=False)
@ -43,7 +43,7 @@ class Wordform(Base):
class Work(Base):
__tablename__ = "work"
__table_args__ = (PrimaryKeyConstraint("id", name="work_pkey"), {"schema": "shakespeare"})
__table_args__ = (PrimaryKeyConstraint("id", name="work_pkey"), {"schema": "shakespeare_i_like"})
id = Column(String(32))
title = Column(String(32), nullable=False)
@ -68,7 +68,7 @@ class Chapter(Base):
UniqueConstraint(
"work_id", "section_number", "chapter_number", name="chapter_work_id_section_number_chapter_number_key"
),
{"schema": "shakespeare"},
{"schema": "shakespeare_i_like"},
)
id = Column(Integer)
@ -104,7 +104,7 @@ class Paragraph(Base):
),
ForeignKeyConstraint(["work_id"], ["shakespeare.work.id"], name="paragraph_work_id_fkey"),
PrimaryKeyConstraint("id", name="paragraph_pkey"),
{"schema": "shakespeare"},
{"schema": "shakespeare_i_like"},
)
id = Column(Integer)

View File

@ -11,7 +11,7 @@ from the_app.models.base import Base
class Stuff(Base):
__tablename__ = "stuff"
__table_args__ = (
{"schema": "the_others"},
{"schema": "happy_hog"},
)
id = Column(UUID(as_uuid=True), unique=True, default=uuid.uuid4, autoincrement=True)
name = Column(String, nullable=False, primary_key=True, unique=True)