From 33187428cf68c207e9101c8edad438ff97a2b2d4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Sep 2024 11:36:00 +0000 Subject: [PATCH 1/8] Update dependency flask-sqlalchemy to v3 --- Pipfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 6a2ef37..4a9d402 100644 --- a/Pipfile +++ b/Pipfile @@ -11,7 +11,7 @@ name = "pypi" flask = "==2.3.3" python-dotenv = "==1.0.1" flask-migrate = "==4.0.7" -flask-sqlalchemy = "==2.5.1" +flask-sqlalchemy = "==3.1.1" sqlalchemy = "==1.4.54" waitress = "==2.1.2" pyyaml = "==6.0.2" -- 2.30.2 From 146eb995a8ca0aef938f51574853fe276f694a16 Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 13:42:12 +0200 Subject: [PATCH 2/8] Update SQLAlchemy to v2 --- Pipfile | 2 +- Pipfile.lock | 179 ++++++++++++++++----------------------------------- 2 files changed, 57 insertions(+), 124 deletions(-) diff --git a/Pipfile b/Pipfile index 4a9d402..e239d3f 100644 --- a/Pipfile +++ b/Pipfile @@ -12,7 +12,7 @@ flask = "==2.3.3" python-dotenv = "==1.0.1" flask-migrate = "==4.0.7" flask-sqlalchemy = "==3.1.1" -sqlalchemy = "==1.4.54" +sqlalchemy = "==2.0.34" waitress = "==2.1.2" pyyaml = "==6.0.2" flask-cors = "==5.0.0" diff --git a/Pipfile.lock b/Pipfile.lock index 2c5254b..2b75f09 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c99f25fb2e022052be3e6fecf72c39fe3d6e4817b7f0608a094a3262fd1cc34b" + "sha256": "ac7fa43860ec02cfc3b312b32f550fe4f4f3632ab485cd31465e0f6a655567fb" }, "pipfile-spec": 6, "requires": { @@ -68,84 +68,12 @@ }, "flask-sqlalchemy": { "hashes": [ - "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912", - "sha256:f12c3d4cc5cc7fdcc148b9527ea05671718c3ea45d50c7e732cceb33f574b390" + "sha256:4ba4be7f419dc72f4efd8802d69974803c37259dd42f3913b0dcf75c9447e0a0", + "sha256:e4b68bb881802dda1a7d878b2fc84c06d1ee57fb40b874d3dc97dabfa36b8312" ], "index": "pypi", - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.5.1" - }, - "greenlet": { - "hashes": [ - "sha256:01059afb9b178606b4b6e92c3e710ea1635597c3537e44da69f4531e111dd5e9", - "sha256:037d9ac99540ace9424cb9ea89f0accfaff4316f149520b4ae293eebc5bded17", - "sha256:0e49a65d25d7350cca2da15aac31b6f67a43d867448babf997fe83c7505f57bc", - "sha256:13ff8c8e54a10472ce3b2a2da007f915175192f18e6495bad50486e87c7f6637", - "sha256:1544b8dd090b494c55e60c4ff46e238be44fdc472d2589e943c241e0169bcea2", - "sha256:184258372ae9e1e9bddce6f187967f2e08ecd16906557c4320e3ba88a93438c3", - "sha256:1ddc7bcedeb47187be74208bc652d63d6b20cb24f4e596bd356092d8000da6d6", - "sha256:221169d31cada333a0c7fd087b957c8f431c1dba202c3a58cf5a3583ed973e9b", - "sha256:243a223c96a4246f8a30ea470c440fe9db1f5e444941ee3c3cd79df119b8eebf", - "sha256:24fc216ec7c8be9becba8b64a98a78f9cd057fd2dc75ae952ca94ed8a893bf27", - "sha256:2651dfb006f391bcb240635079a68a261b227a10a08af6349cba834a2141efa1", - "sha256:26811df4dc81271033a7836bc20d12cd30938e6bd2e9437f56fa03da81b0f8fc", - "sha256:26d9c1c4f1748ccac0bae1dbb465fb1a795a75aba8af8ca871503019f4285e2a", - "sha256:28fe80a3eb673b2d5cc3b12eea468a5e5f4603c26aa34d88bf61bba82ceb2f9b", - "sha256:2cd8518eade968bc52262d8c46727cfc0826ff4d552cf0430b8d65aaf50bb91d", - "sha256:2d004db911ed7b6218ec5c5bfe4cf70ae8aa2223dffbb5b3c69e342bb253cb28", - "sha256:3d07c28b85b350564bdff9f51c1c5007dfb2f389385d1bc23288de51134ca303", - "sha256:3e7e6ef1737a819819b1163116ad4b48d06cfdd40352d813bb14436024fcda99", - "sha256:44151d7b81b9391ed759a2f2865bbe623ef00d648fed59363be2bbbd5154656f", - "sha256:44cd313629ded43bb3b98737bba2f3e2c2c8679b55ea29ed73daea6b755fe8e7", - "sha256:4a3dae7492d16e85ea6045fd11cb8e782b63eac8c8d520c3a92c02ac4573b0a6", - "sha256:4b5ea3664eed571779403858d7cd0a9b0ebf50d57d2cdeafc7748e09ef8cd81a", - "sha256:4c3446937be153718250fe421da548f973124189f18fe4575a0510b5c928f0cc", - "sha256:5415b9494ff6240b09af06b91a375731febe0090218e2898d2b85f9b92abcda0", - "sha256:5fd6e94593f6f9714dbad1aaba734b5ec04593374fa6638df61592055868f8b8", - "sha256:619935a44f414274a2c08c9e74611965650b730eb4efe4b2270f91df5e4adf9a", - "sha256:655b21ffd37a96b1e78cc48bf254f5ea4b5b85efaf9e9e2a526b3c9309d660ca", - "sha256:665b21e95bc0fce5cab03b2e1d90ba9c66c510f1bb5fdc864f3a377d0f553f6b", - "sha256:6a4bf607f690f7987ab3291406e012cd8591a4f77aa54f29b890f9c331e84989", - "sha256:6cea1cca3be76c9483282dc7760ea1cc08a6ecec1f0b6ca0a94ea0d17432da19", - "sha256:713d450cf8e61854de9420fb7eea8ad228df4e27e7d4ed465de98c955d2b3fa6", - "sha256:726377bd60081172685c0ff46afbc600d064f01053190e4450857483c4d44484", - "sha256:76b3e3976d2a452cba7aa9e453498ac72240d43030fdc6d538a72b87eaff52fd", - "sha256:76dc19e660baea5c38e949455c1181bc018893f25372d10ffe24b3ed7341fb25", - "sha256:76e5064fd8e94c3f74d9fd69b02d99e3cdb8fc286ed49a1f10b256e59d0d3a0b", - "sha256:7f346d24d74c00b6730440f5eb8ec3fe5774ca8d1c9574e8e57c8671bb51b910", - "sha256:81eeec4403a7d7684b5812a8aaa626fa23b7d0848edb3a28d2eb3220daddcbd0", - "sha256:90b5bbf05fe3d3ef697103850c2ce3374558f6fe40fd57c9fac1bf14903f50a5", - "sha256:9730929375021ec90f6447bff4f7f5508faef1c02f399a1953870cdb78e0c345", - "sha256:9eb4a1d7399b9f3c7ac68ae6baa6be5f9195d1d08c9ddc45ad559aa6b556bce6", - "sha256:a0409bc18a9f85321399c29baf93545152d74a49d92f2f55302f122007cfda00", - "sha256:a22f4e26400f7f48faef2d69c20dc055a1f3043d330923f9abe08ea0aecc44df", - "sha256:a53dfe8f82b715319e9953330fa5c8708b610d48b5c59f1316337302af5c0811", - "sha256:a771dc64fa44ebe58d65768d869fcfb9060169d203446c1d446e844b62bdfdca", - "sha256:a814dc3100e8a046ff48faeaa909e80cdb358411a3d6dd5293158425c684eda8", - "sha256:a8870983af660798dc1b529e1fd6f1cefd94e45135a32e58bd70edd694540f33", - "sha256:ac0adfdb3a21dc2a24ed728b61e72440d297d0fd3a577389df566651fcd08f97", - "sha256:b395121e9bbe8d02a750886f108d540abe66075e61e22f7353d9acb0b81be0f0", - "sha256:b9505a0c8579899057cbefd4ec34d865ab99852baf1ff33a9481eb3924e2da0b", - "sha256:c0a5b1c22c82831f56f2f7ad9bbe4948879762fe0d59833a4a71f16e5fa0f682", - "sha256:c3967dcc1cd2ea61b08b0b276659242cbce5caca39e7cbc02408222fb9e6ff39", - "sha256:c6f4c2027689093775fd58ca2388d58789009116844432d920e9147f91acbe64", - "sha256:c9d86401550b09a55410f32ceb5fe7efcd998bd2dad9e82521713cb148a4a15f", - "sha256:cd468ec62257bb4544989402b19d795d2305eccb06cde5da0eb739b63dc04665", - "sha256:cfcfb73aed40f550a57ea904629bdaf2e562c68fa1164fa4588e752af6efdc3f", - "sha256:d0dd943282231480aad5f50f89bdf26690c995e8ff555f26d8a5b9887b559bcc", - "sha256:d3c59a06c2c28a81a026ff11fbf012081ea34fb9b7052f2ed0366e14896f0a1d", - "sha256:d45b75b0f3fd8d99f62eb7908cfa6d727b7ed190737dec7fe46d993da550b81a", - "sha256:d46d5069e2eeda111d6f71970e341f4bd9aeeee92074e649ae263b834286ecc0", - "sha256:d58ec349e0c2c0bc6669bf2cd4982d2f93bf067860d23a0ea1fe677b0f0b1e09", - "sha256:db1b3ccb93488328c74e97ff888604a8b95ae4f35f4f56677ca57a4fc3a4220b", - "sha256:dd65695a8df1233309b701dec2539cc4b11e97d4fcc0f4185b4a12ce54db0491", - "sha256:f9482c2ed414781c0af0b35d9d575226da6b728bd1a720668fa05837184965b7", - "sha256:f9671e7282d8c6fcabc32c0fb8d7c0ea8894ae85cee89c9aadc2d7129e1a9954", - "sha256:fad7a051e07f64e297e6e8399b4d6a3bdcad3d7297409e9a06ef8cbccff4f501", - "sha256:ffb08f2a1e59d38c7b8b9ac8083c9c8b9875f0955b1e9b9b9a965607a51f8e54" - ], - "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')))))", - "version": "==3.1.0" + "markers": "python_version >= '3.8'", + "version": "==3.1.1" }, "importlib-metadata": { "hashes": [ @@ -352,54 +280,59 @@ }, "sqlalchemy": { "hashes": [ - "sha256:02d2ecb9508f16ab9c5af466dfe5a88e26adf2e1a8d1c56eb616396ccae2c186", - "sha256:0b76bbb1cbae618d10679be8966f6d66c94f301cfc15cb49e2f2382563fb6efb", - "sha256:0de620f978ca273ce027769dc8db7e6ee72631796187adc8471b3c76091b809e", - "sha256:1183599e25fa38a1a322294b949da02b4f0da13dbc2688ef9dbe746df573f8a6", - "sha256:12bc0141b245918b80d9d17eca94663dbd3f5266ac77a0be60750f36102bbb0f", - "sha256:1390ca2d301a2708fd4425c6d75528d22f26b8f5cbc9faba1ddca136671432bc", - "sha256:13e91d6892b5fcb94a36ba061fb7a1f03d0185ed9d8a77c84ba389e5bb05e936", - "sha256:14b3f4783275339170984cadda66e3ec011cce87b405968dc8d51cf0f9997b0d", - "sha256:1576fba3616f79496e2f067262200dbf4aab1bb727cd7e4e006076686413c80c", - "sha256:1990d5a6a5dc358a0894c8ca02043fb9a5ad9538422001fb2826e91c50f1d539", - "sha256:1d83cd1cc03c22d922ec94d0d5f7b7c96b1332f5e122e81b1a61fb22da77879a", - "sha256:1e8c1b9ecaf9f2590337d5622189aeb2f0dbc54ba0232fa0856cf390957584a9", - "sha256:26e78444bc77d089e62874dc74df05a5c71f01ac598010a327881a48408d0064", - "sha256:2b37931eac4b837c45e2522066bda221ac6d80e78922fb77c75eb12e4dbcdee5", - "sha256:3112de9e11ff1957148c6de1df2bc5cc1440ee36783412e5eedc6f53638a577d", - "sha256:394b0135900b62dbf63e4809cdc8ac923182af2816d06ea61cd6763943c2cc05", - "sha256:3f01c2629a7d6b30d8afe0326b8c649b74825a0e1ebdcb01e8ffd1c920deb07d", - "sha256:41cffc63c7c83dfc30c4cab5b4308ba74440a9633c4509c51a0c52431fb0f8ab", - "sha256:4470fbed088c35dc20b78a39aaf4ae54fe81790c783b3264872a0224f437c31a", - "sha256:5ed3576675c187e3baa80b02c4c9d0edfab78eff4e89dd9da736b921333a2432", - "sha256:6b24364150738ce488333b3fb48bfa14c189a66de41cd632796fbcacb26b4585", - "sha256:6da60fb24577f989535b8fc8b2ddc4212204aaf02e53c4c7ac94ac364150ed08", - "sha256:76c2ba7b5a09863d0a8166fbc753af96d561818c572dbaf697c52095938e7be4", - "sha256:954816850777ac234a4e32b8c88ac1f7847088a6e90cfb8f0e127a1bf3feddff", - "sha256:9c24dd161c06992ed16c5e528a75878edbaeced5660c3db88c820f1f0d3fe1f4", - "sha256:a01bc25eb7a5688656c8770f931d5cb4a44c7de1b3cec69b84cc9745d1e4cc10", - "sha256:a19f816f4702d7b1951d7576026c7124b9bfb64a9543e571774cf517b7a50b29", - "sha256:a41611835010ed4ea4c7aed1da5b58aac78ee7e70932a91ed2705a7b38e40f52", - "sha256:a49730afb716f3f675755afec109895cab95bc9875db7ffe2e42c1b1c6279482", - "sha256:a86b0e4be775902a5496af4fb1b60d8a2a457d78f531458d294360b8637bb014", - "sha256:a8a72259a1652f192c68377be7011eac3c463e9892ef2948828c7d58e4829988", - "sha256:af00236fe21c4d4f4c227b6ccc19b44c594160cc3ff28d104cdce85855369277", - "sha256:b05e0626ec1c391432eabb47a8abd3bf199fb74bfde7cc44a26d2b1b352c2c6e", - "sha256:b5933c45d11cbd9694b1540aa9076816cc7406964c7b16a380fd84d3a5fe3241", - "sha256:b5e0d47d619c739bdc636bbe007da4519fc953393304a5943e0b5aec96c9877c", - "sha256:b67589f7955924865344e6eacfdcf70675e64f36800a576aa5e961f0008cde2a", - "sha256:c5a2530400a6e7e68fd1552a55515de6a4559122e495f73554a51cedafc11669", - "sha256:cafe0ba3a96d0845121433cffa2b9232844a2609fce694fcc02f3f31214ece28", - "sha256:cdb2886c0be2c6c54d0651d5a61c29ef347e8eec81fd83afebbf7b59b80b7393", - "sha256:d0cf7076c8578b3de4e43a046cc7a1af8466e1c3f5e64167189fe8958a4f9c02", - "sha256:f1e1b92ee4ee9ffc68624ace218b89ca5ca667607ccee4541a90cc44999b9aea", - "sha256:f941aaf15f47f316123e1933f9ea91a6efda73a161a6ab6046d1cde37be62c88", - "sha256:fb59a11689ff3c58e7652260127f9e34f7f45478a2f3ef831ab6db7bcd72108f", - "sha256:fc9ffd9a38e21fad3e8c5a88926d57f94a32546e937e0be46142b2702003eba7" + "sha256:10d8f36990dd929690666679b0f42235c159a7051534adb135728ee52828dd22", + "sha256:13be2cc683b76977a700948411a94c67ad8faf542fa7da2a4b167f2244781cf3", + "sha256:165bbe0b376541092bf49542bd9827b048357f4623486096fc9aaa6d4e7c59a2", + "sha256:173f5f122d2e1bff8fbd9f7811b7942bead1f5e9f371cdf9e670b327e6703ebd", + "sha256:196958cde924a00488e3e83ff917be3b73cd4ed8352bbc0f2989333176d1c54d", + "sha256:203d46bddeaa7982f9c3cc693e5bc93db476ab5de9d4b4640d5c99ff219bee8c", + "sha256:220574e78ad986aea8e81ac68821e47ea9202b7e44f251b7ed8c66d9ae3f4278", + "sha256:243f92596f4fd4c8bd30ab8e8dd5965afe226363d75cab2468f2c707f64cd83b", + "sha256:24af3dc43568f3780b7e1e57c49b41d98b2d940c1fd2e62d65d3928b6f95f021", + "sha256:25691f4adfb9d5e796fd48bf1432272f95f4bbe5f89c475a788f31232ea6afba", + "sha256:2e6965346fc1491a566e019a4a1d3dfc081ce7ac1a736536367ca305da6472a8", + "sha256:3166dfff2d16fe9be3241ee60ece6fcb01cf8e74dd7c5e0b64f8e19fab44911b", + "sha256:413c85cd0177c23e32dee6898c67a5f49296640041d98fddb2c40888fe4daa2e", + "sha256:430093fce0efc7941d911d34f75a70084f12f6ca5c15d19595c18753edb7c33b", + "sha256:43f28005141165edd11fbbf1541c920bd29e167b8bbc1fb410d4fe2269c1667a", + "sha256:526ce723265643dbc4c7efb54f56648cc30e7abe20f387d763364b3ce7506c82", + "sha256:53e68b091492c8ed2bd0141e00ad3089bcc6bf0e6ec4142ad6505b4afe64163e", + "sha256:5bc08e75ed11693ecb648b7a0a4ed80da6d10845e44be0c98c03f2f880b68ff4", + "sha256:6831a78bbd3c40f909b3e5233f87341f12d0b34a58f14115c9e94b4cdaf726d3", + "sha256:6a1e03db964e9d32f112bae36f0cc1dcd1988d096cfd75d6a588a3c3def9ab2b", + "sha256:6daeb8382d0df526372abd9cb795c992e18eed25ef2c43afe518c73f8cccb721", + "sha256:6e7cde3a2221aa89247944cafb1b26616380e30c63e37ed19ff0bba5e968688d", + "sha256:707c8f44931a4facd4149b52b75b80544a8d824162602b8cd2fe788207307f9a", + "sha256:7286c353ee6475613d8beff83167374006c6b3e3f0e6491bfe8ca610eb1dec0f", + "sha256:79cb400c360c7c210097b147c16a9e4c14688a6402445ac848f296ade6283bbc", + "sha256:7cee4c6917857fd6121ed84f56d1dc78eb1d0e87f845ab5a568aba73e78adf83", + "sha256:80bd73ea335203b125cf1d8e50fef06be709619eb6ab9e7b891ea34b5baa2287", + "sha256:895184dfef8708e15f7516bd930bda7e50ead069280d2ce09ba11781b630a434", + "sha256:8fddde2368e777ea2a4891a3fb4341e910a056be0bb15303bf1b92f073b80c02", + "sha256:95d0b2cf8791ab5fb9e3aa3d9a79a0d5d51f55b6357eecf532a120ba3b5524db", + "sha256:9661268415f450c95f72f0ac1217cc6f10256f860eed85c2ae32e75b60278ad8", + "sha256:97b850f73f8abbffb66ccbab6e55a195a0eb655e5dc74624d15cff4bfb35bd74", + "sha256:9ea54f7300553af0a2a7235e9b85f4204e1fc21848f917a3213b0e0818de9a24", + "sha256:9ebc11c54c6ecdd07bb4efbfa1554538982f5432dfb8456958b6d46b9f834bb7", + "sha256:a17d8fac6df9835d8e2b4c5523666e7051d0897a93756518a1fe101c7f47f2f0", + "sha256:ae92bebca3b1e6bd203494e5ef919a60fb6dfe4d9a47ed2453211d3bd451b9f5", + "sha256:b68094b165a9e930aedef90725a8fcfafe9ef95370cbb54abc0464062dbf808f", + "sha256:b75b00083e7fe6621ce13cfce9d4469c4774e55e8e9d38c305b37f13cf1e874c", + "sha256:bcd18441a49499bf5528deaa9dee1f5c01ca491fc2791b13604e8f972877f812", + "sha256:bd90c221ed4e60ac9d476db967f436cfcecbd4ef744537c0f2d5291439848768", + "sha256:c29d03e0adf3cc1a8c3ec62d176824972ae29b67a66cbb18daff3062acc6faa8", + "sha256:c3330415cd387d2b88600e8e26b510d0370db9b7eaf984354a43e19c40df2e2b", + "sha256:c7db3db284a0edaebe87f8f6642c2b2c27ed85c3e70064b84d1c9e4ec06d5d84", + "sha256:ce119fc4ce0d64124d37f66a6f2a584fddc3c5001755f8a49f1ca0a177ef9796", + "sha256:dbcdf987f3aceef9763b6d7b1fd3e4ee210ddd26cac421d78b3c206d07b2700b", + "sha256:e54ef33ea80d464c3dcfe881eb00ad5921b60f8115ea1a30d781653edc2fd6a2", + "sha256:e60ed6ef0a35c6b76b7640fe452d0e47acc832ccbb8475de549a5cc5f90c2c06", + "sha256:fb1b30f31a36c7f3fee848391ff77eebdd3af5750bf95fbf9b8b5323edfdb4ec", + "sha256:fbb034f565ecbe6c530dff948239377ba859420d146d5f62f0271407ffb8c580" ], "index": "pypi", - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.4.54" + "markers": "python_version >= '3.7'", + "version": "==2.0.34" }, "typing-extensions": { "hashes": [ -- 2.30.2 From 2ff958c55f3fd0b38173d787e1a2b55e3454fbec Mon Sep 17 00:00:00 2001 From: Bene <64bit@posteo.de> Date: Thu, 11 Jan 2024 20:48:13 +0100 Subject: [PATCH 3/8] Rewrite sqlachemy code for 1.4 to 2.x migration --- app.py | 2 +- ki/actions/seed.py | 6 +++--- ki/handlers/update_profile.py | 6 +++--- ki/routes.py | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index cd61a68..cb3ffc4 100644 --- a/app.py +++ b/app.py @@ -38,7 +38,7 @@ app.config["KI_LDAP_AUTH_PASSWORD"] = os.getenv("KI_LDAP_AUTH_PASSWORD") app.config["KI_LDAP_BASE_DN"] = os.getenv("KI_LDAP_BASE_DN") CORS(app) -db = SQLAlchemy(app) +db = SQLAlchemy(app, session_options={"future": True}) migrate = Migrate(app, db, compare_type=True) app.logger.info("Hello from KI") diff --git a/ki/actions/seed.py b/ki/actions/seed.py index eeafdb1..9edf8e9 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -19,7 +19,7 @@ def seed_contacttypes(): for contacttype in csv_reader: id = int(contacttype["id"]) - db_contacttype = ContactType.query.get(id) + db_contacttype = db.session.get(ContactType, id) if db_contacttype is None: db.session.add(ContactType(id=int(contacttype["id"]), name=contacttype["name"])) @@ -99,7 +99,7 @@ def seed(dev: bool): for skill in skills_csv_reader: id = int(skill["id"]) - db_skill = Skill.query.get(id) + db_skill = db.session.get(Skill, id) if db_skill is None: db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) @@ -113,7 +113,7 @@ def seed(dev: bool): for iso in iso_csv_reader: id = iso["639-1"] - db_language = Language.query.get(id) + db_language = db.session.get(Language, id) if db_language is None: db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 377b4c5..2e97526 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -33,7 +33,7 @@ def update_languages(profile, languages_data): if "id" not in language_data["language"]: continue - language = Language.query.get(language_data["language"]["id"]) + language = db.session.get(Language, language_data["language"]["id"]) profile_language = ProfileLanguage.query.filter(ProfileLanguage.profile == profile, ProfileLanguage.language == language).first() @@ -110,7 +110,7 @@ def update_contacts(profile, contacts_data): if "id" in contact_data: contact_id = int(contact_data["id"]) contact_ids_to_be_deleted.remove(contact_id) - contact = Contact.query.get(contact_id) + contact = db.session.get(Contact, contact_id) else: contact = Contact(profile=profile, contacttype=contacttype) db.session.add(contact) @@ -122,7 +122,7 @@ def update_contacts(profile, contacts_data): def update_profile(user_id: int): - user = User.query.get(user_id) + user = db.session.get(User, user_id) if user is None: return make_response({}, 404) diff --git a/ki/routes.py b/ki/routes.py index 946e624..4bb73e1 100644 --- a/ki/routes.py +++ b/ki/routes.py @@ -10,7 +10,7 @@ from ki.auth import auth from ki.handlers import find_profiles as find_profiles_handler from ki.handlers import update_profile as update_profile_handler from ki.models import ContactType, Language, Skill, Token, User -from app import app +from app import app, db content_type_svg = "image/svg+xml" content_type_png = "image/png" @@ -66,7 +66,7 @@ def handle_completion_request(model, key): def handle_icon_request(model, id, path): - object = model.query.get(id) + object = db.session.get(model, id) if object is None: return make_response({}, 404) -- 2.30.2 From 60c906cb5cbeeb6c5ecd44b188460bdcc57f8e39 Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 14:02:54 +0200 Subject: [PATCH 4/8] Fix 'unclosed file' warnings in tests see https://github.com/pallets/flask/issues/2468#issuecomment-517797518 --- ki/test/test_languages_endpoint.py | 1 + ki/test/test_skills_endpoint.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ki/test/test_languages_endpoint.py b/ki/test/test_languages_endpoint.py index c872ba8..7982ba5 100644 --- a/ki/test/test_languages_endpoint.py +++ b/ki/test/test_languages_endpoint.py @@ -33,6 +33,7 @@ class TestLanguagesEndpoint(ApiTest): self.assertEqual(response.status_code, 200) self.assertIn("Content-Type", response.headers) self.assertEqual(response.headers["Content-Type"], "image/svg+xml; charset=utf-8") + response.close() if __name__ == "main": diff --git a/ki/test/test_skills_endpoint.py b/ki/test/test_skills_endpoint.py index 60acf21..01dd117 100644 --- a/ki/test/test_skills_endpoint.py +++ b/ki/test/test_skills_endpoint.py @@ -41,12 +41,14 @@ class TestSkillsEndpoint(ApiTest): self.assertEqual(response.status_code, 200) self.assertIn("Content-Type", response.headers) self.assertEqual(response.headers["Content-Type"], "image/svg+xml; charset=utf-8") + response.close() def test_get_fallback_skill_icon(self): response = self.client.get("/skills/2/icon") self.assertEqual(response.status_code, 200) self.assertIn("Content-Type", response.headers) self.assertEqual(response.headers["Content-Type"], "image/svg+xml; charset=utf-8") + response.close() if __name__ == "main": -- 2.30.2 From b0652add433729ec930dc7152b0e5d84216e7a40 Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 15:25:04 +0200 Subject: [PATCH 5/8] Replaced deprecated method see https://flask-sqlalchemy.palletsprojects.com/en/3.1.x/api/#flask_sqlalchemy.SQLAlchemy.get_engine --- migrations/env.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/migrations/env.py b/migrations/env.py index 67e5d0f..c4c0190 100644 --- a/migrations/env.py +++ b/migrations/env.py @@ -19,7 +19,7 @@ logger = logging.getLogger('alembic.env') # target_metadata = mymodel.Base.metadata config.set_main_option( 'sqlalchemy.url', - str(current_app.extensions['migrate'].db.get_engine().url).replace( + str(current_app.extensions['migrate'].db.engine.url).replace( '%', '%%')) target_metadata = current_app.extensions['migrate'].db.metadata @@ -68,7 +68,7 @@ def run_migrations_online(): directives[:] = [] logger.info('No changes in schema detected.') - connectable = current_app.extensions['migrate'].db.get_engine() + connectable = current_app.extensions['migrate'].db.engine with connectable.connect() as connection: context.configure( -- 2.30.2 From 8478e8d76e931be0abe4028bb241bdebb237d13b Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 15:38:56 +0200 Subject: [PATCH 6/8] Fix test errors --- ki/actions/seed.py | 104 ++++++++++++++++--------------- ki/test/ApiTest.py | 11 ++-- ki/test/test_profile_endpoint.py | 36 ++++++----- 3 files changed, 79 insertions(+), 72 deletions(-) diff --git a/ki/actions/seed.py b/ki/actions/seed.py index 9edf8e9..08052cf 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -88,71 +88,73 @@ def seed_user(auth_id, def seed(dev: bool): - seed_contacttypes() + with app.app_context(): + seed_contacttypes() - skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" + skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" - app.logger.info("importing skills") + app.logger.info("importing skills") - with open(skill_seed_file_path) as skills_file: - skills_csv_reader = csv.DictReader(skills_file) + with open(skill_seed_file_path) as skills_file: + skills_csv_reader = csv.DictReader(skills_file) - for skill in skills_csv_reader: - id = int(skill["id"]) - db_skill = db.session.get(Skill, id) + for skill in skills_csv_reader: + id = int(skill["id"]) + db_skill = db.session.get(Skill, id) - if db_skill is None: - db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) + if db_skill is None: + db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) - app.logger.info("importing languages") + app.logger.info("importing languages") - iso_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/iso_639_1.csv" + iso_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/iso_639_1.csv" - with open(iso_seed_file_path) as iso_file: - iso_csv_reader = csv.DictReader(iso_file) + with open(iso_seed_file_path) as iso_file: + iso_csv_reader = csv.DictReader(iso_file) - for iso in iso_csv_reader: - id = iso["639-1"] - db_language = db.session.get(Language, id) + for iso in iso_csv_reader: + id = iso["639-1"] + db_language = db.session.get(Language, id) - if db_language is None: - db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) + if db_language is None: + db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) - if dev: - seed_user("klaus", visible=False) + if dev: + seed_user("klaus", visible=False) - for i in range(1, 20): - seed_user(f"babsi{i}") + for i in range(1, 20): + seed_user(f"babsi{i}") - seed_user("peter", - nickname="peternichtlustig", - visible=False, - pronouns="Herr Dr. Dr.", - volunteerwork="Gartenverein", - availability_status=True, - availability_hours_per_week=42, - availability_text="Immer", - freetext="Ich mag Kaffee", - skills=[(3, 3), (1, 5)], - searchtopics=[3, 1], - languages=[("de", 5), ("fr", 3)], - address=("Peter Nichtlustig", "Waldweg", "23i", "Hinterhaus", "13337", "Bielefeld", "Deutschland"), - contacts=[(4, "@peter:wtf-eg.de"), (1, "peter@wtf-eg.de")]) + seed_user("peter", + nickname="peternichtlustig", + visible=False, + pronouns="Herr Dr. Dr.", + volunteerwork="Gartenverein", + availability_status=True, + availability_hours_per_week=42, + availability_text="Immer", + freetext="Ich mag Kaffee", + skills=[(3, 3), (1, 5)], + searchtopics=[3, 1], + languages=[("de", 5), ("fr", 3)], + address=("Peter Nichtlustig", "Waldweg", "23i", "Hinterhaus", "13337", "Bielefeld", + "Deutschland"), + contacts=[(4, "@peter:wtf-eg.de"), (1, "peter@wtf-eg.de")]) - seed_user("dirtydieter", - volunteerwork="Müll sammeln", - availability_status=True, - availability_hours_per_week=24, - availability_text="Nur Nachts!", - freetext="1001010010111!!!", - skills=[(1, 5)], - address=("Friedrich Witzig", "", "", "", "", "", "")) + seed_user("dirtydieter", + volunteerwork="Müll sammeln", + availability_status=True, + availability_hours_per_week=24, + availability_text="Nur Nachts!", + freetext="1001010010111!!!", + skills=[(1, 5)], + address=("Friedrich Witzig", "", "", "", "", "", "")) - all_skills = [(skill.id, 3) for skill in Skill.query.all()] - seed_user("jutta", languages=[("fr", 5)], skills=all_skills) + all_skills = [(skill.id, 3) for skill in Skill.query.all()] + seed_user("jutta", languages=[("fr", 5)], skills=all_skills) - seed_user("giesela", skills=[(9, 3), (10, 5)]) - seed_user("bertha", visible=False, skills=[(11, 3), (10, 5)]) - seed_user("monique", languages=[("fr", 4)]) + seed_user("giesela", skills=[(9, 3), (10, 5)]) + seed_user("bertha", visible=False, skills=[(11, 3), (10, 5)]) + seed_user("monique", languages=[("fr", 4)]) - db.session.commit() + db.session.commit() diff --git a/ki/test/ApiTest.py b/ki/test/ApiTest.py index 72e9873..5995010 100644 --- a/ki/test/ApiTest.py +++ b/ki/test/ApiTest.py @@ -26,13 +26,14 @@ class ApiTest(unittest.TestCase): config = migrate.get_config() command.upgrade(config, "head") - seed(True) - max_skill = Skill.query.order_by(Skill.id.desc()).first() - self.max_skill_id = max_skill.id + seed(True) + max_skill = Skill.query.order_by(Skill.id.desc()).first() + self.max_skill_id = max_skill.id def tearDown(self): - db.drop_all() - db.engine.dispose() + with app.app_context(): + db.drop_all() + db.engine.dispose() def login(self, username, password): login_data = {"username": username, "password": password} diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index 61f247d..cf564a9 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -20,11 +20,12 @@ class TestProfileEndpoint(ApiTest): self.assertEqual(login_response.status_code, 200) self.assertIn("token", login_response.json) - babsi = User.query.filter(User.auth_id == "babsi1").first() - response = self.client.post(f"/users/{babsi.id}/profile", - data=json.dumps({}), - content_type="application/json", - headers={"Authorization": "Bearer " + login_response.json["token"]}) + with app.app_context(): + babsi = User.query.filter(User.auth_id == "babsi1").first() + response = self.client.post(f"/users/{babsi.id}/profile", + data=json.dumps({}), + content_type="application/json", + headers={"Authorization": "Bearer " + login_response.json["token"]}) self.assertEqual(response.status_code, 403) @@ -103,11 +104,12 @@ class TestProfileEndpoint(ApiTest): "level": 2 }] } - peter = User.query.filter(User.auth_id == "peter").first() - response = self.client.post(f"/users/{peter.id}/profile", - data=json.dumps(data), - content_type="application/json", - headers={"Authorization": "Bearer " + token}) + with app.app_context(): + peter = User.query.filter(User.auth_id == "peter").first() + response = self.client.post(f"/users/{peter.id}/profile", + data=json.dumps(data), + content_type="application/json", + headers={"Authorization": "Bearer " + token}) self.assertEqual(response.status_code, 200) with app.app_context(): @@ -185,8 +187,9 @@ class TestProfileEndpoint(ApiTest): def test_get_visible_proifle(self): token = self.login("peter", "geheim")["token"] - babsi = User.query.filter(User.auth_id == "babsi1").first() - response = self.client.get(f"/users/{babsi.id}/profile", headers={"Authorization": f"Bearer {token}"}) + with app.app_context(): + babsi = User.query.filter(User.auth_id == "babsi1").first() + response = self.client.get(f"/users/{babsi.id}/profile", headers={"Authorization": f"Bearer {token}"}) self.assertEqual(response.status_code, 200) @@ -197,10 +200,11 @@ class TestProfileEndpoint(ApiTest): self.assertEqual(login_response.status_code, 200) self.assertIn("token", login_response.json) - peter = User.query.filter(User.auth_id == "peter").first() - response = self.client.get(f"/users/{peter.id}/profile", - headers={"Authorization": "Bearer " + login_response.json["token"]}) - profile_id = peter.profile.id + with app.app_context(): + peter = User.query.filter(User.auth_id == "peter").first() + response = self.client.get(f"/users/{peter.id}/profile", + headers={"Authorization": "Bearer " + login_response.json["token"]}) + profile_id = peter.profile.id self.assertEqual(response.status_code, 200) self.assertDictEqual( response.json, { -- 2.30.2 From 862bd9f7a3e195abbf38eb61474f442c80f9214a Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 15:43:09 +0200 Subject: [PATCH 7/8] Explicitly set SQLALCHEMY_DATABASE_URI for tests --- .drone.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.drone.yml b/.drone.yml index b123536..cfb089a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -19,6 +19,7 @@ steps: env: PYROOT: '/pyroot' PYTHONUSERBASE: '/pyroot' + SQLALCHEMY_DATABASE_URI: 'sqlite://' commands: - apk add --no-cache gcc g++ musl-dev python3-dev - pip3 install pipenv @@ -108,6 +109,7 @@ steps: env: PYROOT: '/pyroot' PYTHONUSERBASE: '/pyroot' + SQLALCHEMY_DATABASE_URI: 'sqlite://' commands: - apk add --no-cache gcc g++ musl-dev python3-dev - pip3 install pipenv -- 2.30.2 From 5f27eaa9a14a6a25dfdf8da392e31a1fa0e99754 Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 13 Sep 2024 15:49:24 +0200 Subject: [PATCH 8/8] Set the SQLALCHEMY_DATABASE_URI env differently --- .drone.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index cfb089a..822dec5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -19,7 +19,6 @@ steps: env: PYROOT: '/pyroot' PYTHONUSERBASE: '/pyroot' - SQLALCHEMY_DATABASE_URI: 'sqlite://' commands: - apk add --no-cache gcc g++ musl-dev python3-dev - pip3 install pipenv @@ -27,7 +26,7 @@ steps: - pipenv install --dev - pipenv run flake8 - pipenv run reuse lint - - pipenv run python -m unittest discover ki + - SQLALCHEMY_DATABASE_URI=sqlite:// pipenv run python -m unittest discover ki - name: docker-dry-run image: plugins/docker:20.18.4@sha256:a8d3d86853c721492213264815f1d00d3ed13f42f5c1855a02f47fa4d5f1e042 settings: @@ -109,14 +108,13 @@ steps: env: PYROOT: '/pyroot' PYTHONUSERBASE: '/pyroot' - SQLALCHEMY_DATABASE_URI: 'sqlite://' commands: - apk add --no-cache gcc g++ musl-dev python3-dev - pip3 install pipenv - pipenv install --dev - pipenv run flake8 - pipenv run reuse lint - - pipenv run python -m unittest discover ki + - SQLALCHEMY_DATABASE_URI=sqlite:// pipenv run python -m unittest discover ki - name: docker-publish image: plugins/docker:20.18.4@sha256:a8d3d86853c721492213264815f1d00d3ed13f42f5c1855a02f47fa4d5f1e042 settings: -- 2.30.2