{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":371831333,"defaultBranch":"main","name":"OpenOversight","ownerLogin":"OrcaCollective","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2021-05-28T22:27:23.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/89438588?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1725860342.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"42a360d6e194f8591e31637ba16a4ff3e1019b58","ref":"refs/heads/bootstrap3-deprecation","pushedAt":"2024-09-09T05:39:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sea-kelp","name":"sea-kelp","path":"/sea-kelp","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66500457?s=80&v=4"},"commit":{"message":"Remove Bootstrap3 (#1123)\n\nMigrates off bootstrap3 and into bootstrap5. Thank you @psjalltheway !!!\n\nRemoves deprecated files which are causing conflicts for the new\nHTML/CSS which will come in a separate PR.\n\n- [x] This branch is up-to-date with the `develop` branch.\n- [x] `pytest` passes on my local development environment.\n- [x] `pre-commit` passes on my local development environment.\n\n---------\n\nCo-authored-by: psjalltheway \nCo-authored-by: sea-kelp <66500457+sea-kelp@users.noreply.github.com>","shortMessageHtmlLink":"Remove Bootstrap3 (lucyparsons#1123)"}},{"before":"daba1da75da90ab9c2f59cb41eb4b3b2ab0842cf","after":"380a73f89e3cb9dad0212e82040cd0b0c8d9a30d","ref":"refs/heads/dependabot/pip/boto3-1.35.10","pushedAt":"2024-09-03T04:34:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump boto3 from 1.34.140 to 1.35.10\n\nBumps [boto3](https://github.com/boto/boto3) from 1.34.140 to 1.35.10.\n- [Release notes](https://github.com/boto/boto3/releases)\n- [Commits](https://github.com/boto/boto3/compare/1.34.140...1.35.10)\n\n---\nupdated-dependencies:\n- dependency-name: boto3\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump boto3 from 1.34.140 to 1.35.10"}},{"before":"fa70a5156291667d61902d09b035b93c23f06a3c","after":"8bee9fbcc71197eace5d8274a87440e8e4c73dbf","ref":"refs/heads/gh-pages","pushedAt":"2024-09-03T04:33:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 64885c7167d8f48ea8be40abe291be01d147f12d","shortMessageHtmlLink":"deploy: 64885c7"}},{"before":"311056c2455e2773b43f7cef9d877df7a82fa48e","after":null,"ref":"refs/heads/dependabot/pip/faker-28.1.0","pushedAt":"2024-09-03T04:32:25.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"sea-kelp","name":"sea-kelp","path":"/sea-kelp","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66500457?s=80&v=4"}},{"before":"a509035709d23fd33eb26b35ce4c5a7a1eaad898","after":"64885c7167d8f48ea8be40abe291be01d147f12d","ref":"refs/heads/main","pushedAt":"2024-09-03T04:32:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sea-kelp","name":"sea-kelp","path":"/sea-kelp","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66500457?s=80&v=4"},"commit":{"message":"Bump faker from 26.3.0 to 28.1.0 (#499)\n\nBumps [faker](https://github.com/joke2k/faker) from 26.3.0 to 28.1.0.\r\n- [Release notes](https://github.com/joke2k/faker/releases)\r\n- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)\r\n- [Commits](https://github.com/joke2k/faker/compare/v26.3.0...v28.1.0)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: faker\r\n dependency-type: direct:development\r\n update-type: version-update:semver-major\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump faker from 26.3.0 to 28.1.0 (#499)"}},{"before":"c498bbcdec6c68445c943408da5439a85ac1b319","after":"daba1da75da90ab9c2f59cb41eb4b3b2ab0842cf","ref":"refs/heads/dependabot/pip/boto3-1.35.10","pushedAt":"2024-09-02T07:16:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump boto3 from 1.34.140 to 1.35.10\n\nBumps [boto3](https://github.com/boto/boto3) from 1.34.140 to 1.35.10.\n- [Release notes](https://github.com/boto/boto3/releases)\n- [Commits](https://github.com/boto/boto3/compare/1.34.140...1.35.10)\n\n---\nupdated-dependencies:\n- dependency-name: boto3\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump boto3 from 1.34.140 to 1.35.10"}},{"before":"46bcf82bb79235cb90751ee6f9eac54c6500a81b","after":"311056c2455e2773b43f7cef9d877df7a82fa48e","ref":"refs/heads/dependabot/pip/faker-28.1.0","pushedAt":"2024-09-02T07:16:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump faker from 26.3.0 to 28.1.0\n\nBumps [faker](https://github.com/joke2k/faker) from 26.3.0 to 28.1.0.\n- [Release notes](https://github.com/joke2k/faker/releases)\n- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/joke2k/faker/compare/v26.3.0...v28.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: faker\n dependency-type: direct:development\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump faker from 26.3.0 to 28.1.0"}},{"before":"9056820d3ee037ac19efc0956b89b7e5c3c5888c","after":"fa70a5156291667d61902d09b035b93c23f06a3c","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T07:15:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: a509035709d23fd33eb26b35ce4c5a7a1eaad898","shortMessageHtmlLink":"deploy: a509035"}},{"before":"70726009e850bb54d965be11285b47f660adbe98","after":null,"ref":"refs/heads/dependabot/pip/flake8-7.1.1","pushedAt":"2024-09-02T07:14:49.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"}},{"before":"ce361a2eeac3409aea84f880b2fcca7d1cb7e261","after":"a509035709d23fd33eb26b35ce4c5a7a1eaad898","ref":"refs/heads/main","pushedAt":"2024-09-02T07:14:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"},"commit":{"message":"Bump flake8 from 7.0.0 to 7.1.1 (#495)\n\nBumps [flake8](https://github.com/pycqa/flake8) from 7.0.0 to 7.1.1.\r\n- [Commits](https://github.com/pycqa/flake8/compare/7.0.0...7.1.1)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: flake8\r\n dependency-type: direct:development\r\n update-type: version-update:semver-minor\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump flake8 from 7.0.0 to 7.1.1 (#495)"}},{"before":"edcd4665f24b303ae3915fe7788b485bacae239a","after":"c498bbcdec6c68445c943408da5439a85ac1b319","ref":"refs/heads/dependabot/pip/boto3-1.35.10","pushedAt":"2024-09-02T07:05:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump boto3 from 1.34.140 to 1.35.10\n\nBumps [boto3](https://github.com/boto/boto3) from 1.34.140 to 1.35.10.\n- [Release notes](https://github.com/boto/boto3/releases)\n- [Commits](https://github.com/boto/boto3/compare/1.34.140...1.35.10)\n\n---\nupdated-dependencies:\n- dependency-name: boto3\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump boto3 from 1.34.140 to 1.35.10"}},{"before":"4242d60387048a92bd708d87674d9efc8e437899","after":"70726009e850bb54d965be11285b47f660adbe98","ref":"refs/heads/dependabot/pip/flake8-7.1.1","pushedAt":"2024-09-02T07:05:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump flake8 from 7.0.0 to 7.1.1\n\nBumps [flake8](https://github.com/pycqa/flake8) from 7.0.0 to 7.1.1.\n- [Commits](https://github.com/pycqa/flake8/compare/7.0.0...7.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: flake8\n dependency-type: direct:development\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump flake8 from 7.0.0 to 7.1.1"}},{"before":"ffb1995c880ecc04138e22fc44becc39edfa33bb","after":"46bcf82bb79235cb90751ee6f9eac54c6500a81b","ref":"refs/heads/dependabot/pip/faker-28.1.0","pushedAt":"2024-09-02T07:05:25.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump faker from 26.3.0 to 28.1.0\n\nBumps [faker](https://github.com/joke2k/faker) from 26.3.0 to 28.1.0.\n- [Release notes](https://github.com/joke2k/faker/releases)\n- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/joke2k/faker/compare/v26.3.0...v28.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: faker\n dependency-type: direct:development\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump faker from 26.3.0 to 28.1.0"}},{"before":"a99908d6fe673dd4cf3e13bf1ef7c4f35ae2ca3b","after":"9056820d3ee037ac19efc0956b89b7e5c3c5888c","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T07:04:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: ce361a2eeac3409aea84f880b2fcca7d1cb7e261","shortMessageHtmlLink":"deploy: ce361a2"}},{"before":"13bc5461e3cbf61b08c9f87adbd7ebc91dd2a350","after":null,"ref":"refs/heads/dependabot/pip/flask-3.0.3","pushedAt":"2024-09-02T07:03:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"}},{"before":"a67cb7b7c7c3daada8548e5db1e6ac0e45e093a0","after":"ce361a2eeac3409aea84f880b2fcca7d1cb7e261","ref":"refs/heads/main","pushedAt":"2024-09-02T07:03:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"},"commit":{"message":"Bump flask from 3.0.0 to 3.0.3 (#498)\n\nBumps [flask](https://github.com/pallets/flask) from 3.0.0 to 3.0.3.\r\n- [Release notes](https://github.com/pallets/flask/releases)\r\n- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)\r\n- [Commits](https://github.com/pallets/flask/compare/3.0.0...3.0.3)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: flask\r\n dependency-type: direct:production\r\n update-type: version-update:semver-patch\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump flask from 3.0.0 to 3.0.3 (#498)"}},{"before":"513cffd0d6831d782e8a3a863ac82e50cb40c86c","after":"a99908d6fe673dd4cf3e13bf1ef7c4f35ae2ca3b","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T07:01:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: a67cb7b7c7c3daada8548e5db1e6ac0e45e093a0","shortMessageHtmlLink":"deploy: a67cb7b"}},{"before":"36305f30c8054d6e4794f6e15f19f996613479e1","after":null,"ref":"refs/heads/dependabot/docker/python-3.12.5-slim","pushedAt":"2024-09-02T07:00:45.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"}},{"before":"e7e71d02e260a709c968eb967af7f59f80be04f2","after":"a67cb7b7c7c3daada8548e5db1e6ac0e45e093a0","ref":"refs/heads/main","pushedAt":"2024-09-02T07:00:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"},"commit":{"message":"Bump python from 3.12.4-slim to 3.12.5-slim (#494)\n\nBumps python from 3.12.4-slim to 3.12.5-slim.\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: python\r\n dependency-type: direct:production\r\n update-type: version-update:semver-patch\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump python from 3.12.4-slim to 3.12.5-slim (#494)"}},{"before":"d959d171b9e68e45ecec5bd5195ca04f8a05d8d1","after":"13bc5461e3cbf61b08c9f87adbd7ebc91dd2a350","ref":"refs/heads/dependabot/pip/flask-3.0.3","pushedAt":"2024-09-02T06:58:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump flask from 3.0.0 to 3.0.3\n\nBumps [flask](https://github.com/pallets/flask) from 3.0.0 to 3.0.3.\n- [Release notes](https://github.com/pallets/flask/releases)\n- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)\n- [Commits](https://github.com/pallets/flask/compare/3.0.0...3.0.3)\n\n---\nupdated-dependencies:\n- dependency-name: flask\n dependency-type: direct:production\n update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump flask from 3.0.0 to 3.0.3"}},{"before":"df5d0cff5fd1bfe2cce48c0794fb654f49620176","after":"ffb1995c880ecc04138e22fc44becc39edfa33bb","ref":"refs/heads/dependabot/pip/faker-28.1.0","pushedAt":"2024-09-02T06:58:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump faker from 26.3.0 to 28.1.0\n\nBumps [faker](https://github.com/joke2k/faker) from 26.3.0 to 28.1.0.\n- [Release notes](https://github.com/joke2k/faker/releases)\n- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/joke2k/faker/compare/v26.3.0...v28.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: faker\n dependency-type: direct:development\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump faker from 26.3.0 to 28.1.0"}},{"before":"422ee2ad1f4f9701223337c85eb9e4476912be13","after":"4242d60387048a92bd708d87674d9efc8e437899","ref":"refs/heads/dependabot/pip/flake8-7.1.1","pushedAt":"2024-09-02T06:58:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump flake8 from 7.0.0 to 7.1.1\n\nBumps [flake8](https://github.com/pycqa/flake8) from 7.0.0 to 7.1.1.\n- [Commits](https://github.com/pycqa/flake8/compare/7.0.0...7.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: flake8\n dependency-type: direct:development\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump flake8 from 7.0.0 to 7.1.1"}},{"before":"80fb4602e5fe6ba87268f07b0ef0868c3d3c086e","after":"edcd4665f24b303ae3915fe7788b485bacae239a","ref":"refs/heads/dependabot/pip/boto3-1.35.10","pushedAt":"2024-09-02T06:58:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump boto3 from 1.34.140 to 1.35.10\n\nBumps [boto3](https://github.com/boto/boto3) from 1.34.140 to 1.35.10.\n- [Release notes](https://github.com/boto/boto3/releases)\n- [Commits](https://github.com/boto/boto3/compare/1.34.140...1.35.10)\n\n---\nupdated-dependencies:\n- dependency-name: boto3\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump boto3 from 1.34.140 to 1.35.10"}},{"before":"08939f6eecbb7241d8da518d9ed26a5aacf8ba9b","after":"513cffd0d6831d782e8a3a863ac82e50cb40c86c","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T06:57:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: e7e71d02e260a709c968eb967af7f59f80be04f2","shortMessageHtmlLink":"deploy: e7e71d0"}},{"before":"3c7e115689ce25c1207dfee4b7d7d834c4a303f3","after":null,"ref":"refs/heads/dependabot/pip/python-dateutil-2.9.0.post0","pushedAt":"2024-09-02T06:56:48.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"}},{"before":"57167f26110eefe7d053277c5a1543dbef25f838","after":"e7e71d02e260a709c968eb967af7f59f80be04f2","ref":"refs/heads/main","pushedAt":"2024-09-02T06:56:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"},"commit":{"message":"Bump python-dateutil from 2.9.0 to 2.9.0.post0 (#496)\n\nBumps [python-dateutil](https://github.com/dateutil/dateutil) from 2.9.0 to 2.9.0.post0.\r\n- [Release notes](https://github.com/dateutil/dateutil/releases)\r\n- [Changelog](https://github.com/dateutil/dateutil/blob/master/NEWS)\r\n- [Commits](https://github.com/dateutil/dateutil/compare/2.9.0...2.9.0.post0)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: python-dateutil\r\n dependency-type: direct:production\r\n update-type: version-update:semver-patch\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump python-dateutil from 2.9.0 to 2.9.0.post0 (#496)"}},{"before":"89854ca3abc3834c23f62fe9fbd409352a17ac72","after":"08939f6eecbb7241d8da518d9ed26a5aacf8ba9b","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T05:59:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 57167f26110eefe7d053277c5a1543dbef25f838","shortMessageHtmlLink":"deploy: 57167f2"}},{"before":"fd2e7e65a30c0e64cde5391dd8ff81c633061625","after":null,"ref":"refs/heads/merge-from-upstream","pushedAt":"2024-09-02T05:58:34.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"}},{"before":"e660929cdedd99bd328c8c87084c2f241b5bd471","after":"57167f26110eefe7d053277c5a1543dbef25f838","ref":"refs/heads/main","pushedAt":"2024-09-02T05:58:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"AetherUnbound","name":"Madison Swain-Bowden","path":"/AetherUnbound","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10214785?s=80&v=4"},"commit":{"message":"Merge from upstream (#500)\n\n* Replace `flake8` with `ruff` (#1101)\r\n\r\nReplacing `flake8` with `ruff`, which has approximate parity and is more\r\nthan 10x faster:\r\nhttps://docs.astral.sh/ruff/faq/#how-does-ruffs-linter-compare-to-flake8\r\n\r\n - [x] This branch is up-to-date with the `develop` branch.\r\n - [x] `pytest` passes on my local development environment.\r\n - [x] `pre-commit` passes on my local development environment.\r\n\r\n* Remove `black` and use `ruff` formatter (#1106)\r\n\r\n* Address `SQLAlchemy` deprecation warnings (#1111)\r\n\r\nPart of https://github.com/lucyparsons/OpenOversight/issues/1054\r\n\r\nAddress warnings for for `RemovedIn20Warning` and `LegacyAPIWarning`\r\nwhile using the [`SQLALCHEMY_WARN_20`\r\nflag](https://docs.sqlalchemy.org/en/20/changelog/migration_14.html#sqlalchemy-2-0-deprecations-mode).\r\nIf you would like me to do any additional manual checks, etc. to verify\r\nthese changes, please don't hesitate to ask.\r\n\r\n
Unmodified warnings\r\n\r\n```console\r\n=============================================================================================== warnings summary ===============================================================================================\r\n../../local/lib/python3.11/site-packages/flask_wtf/recaptcha/widgets.py:2: 18 warnings\r\n /usr/local/lib/python3.11/site-packages/flask_wtf/recaptcha/widgets.py:2: DeprecationWarning: 'flask.Markup' is deprecated and will be removed in Flask 2.4. Import 'markupsafe.Markup' instead.\r\n from flask import Markup\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__success\r\nOpenOversight/tests/test_database_cache.py::test_get_database_cache_entry\r\nOpenOversight/tests/test_utils.py::test_department_filter\r\nOpenOversight/tests/test_models.py::test_department_repr\r\nOpenOversight/tests/test_alembic.py::test_alembic_has_single_head\r\nOpenOversight/tests/routes/test_image_tagging.py::test_routes_ok[/labels]\r\nOpenOversight/tests/test_email_client.py::test_smtp_email_provider_send_email\r\n /usr/src/app/OpenOversight/tests/conftest.py:678: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Location.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n Incident(\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__success\r\nOpenOversight/tests/test_database_cache.py::test_get_database_cache_entry\r\nOpenOversight/tests/test_utils.py::test_department_filter\r\nOpenOversight/tests/test_models.py::test_department_repr\r\nOpenOversight/tests/test_alembic.py::test_alembic_has_single_head\r\nOpenOversight/tests/routes/test_image_tagging.py::test_routes_ok[/labels]\r\nOpenOversight/tests/test_email_client.py::test_smtp_email_provider_send_email\r\n /usr/src/app/OpenOversight/tests/conftest.py:691: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Location.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n Incident(\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__success\r\nOpenOversight/tests/test_database_cache.py::test_get_database_cache_entry\r\nOpenOversight/tests/test_utils.py::test_department_filter\r\nOpenOversight/tests/test_models.py::test_department_repr\r\nOpenOversight/tests/test_alembic.py::test_alembic_has_single_head\r\nOpenOversight/tests/routes/test_image_tagging.py::test_routes_ok[/labels]\r\nOpenOversight/tests/test_email_client.py::test_smtp_email_provider_send_email\r\n /usr/src/app/OpenOversight/tests/conftest.py:704: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Location.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n Incident(\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__success\r\nOpenOversight/tests/test_database_cache.py::test_get_database_cache_entry\r\nOpenOversight/tests/test_utils.py::test_department_filter\r\nOpenOversight/tests/test_models.py::test_department_repr\r\nOpenOversight/tests/test_alembic.py::test_alembic_has_single_head\r\nOpenOversight/tests/routes/test_image_tagging.py::test_routes_ok[/labels]\r\nOpenOversight/tests/test_email_client.py::test_smtp_email_provider_send_email\r\n /usr/src/app/OpenOversight/tests/conftest.py:725: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n first_officer = Officer.query.get(1)\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__success\r\nOpenOversight/tests/test_database_cache.py::test_get_database_cache_entry\r\nOpenOversight/tests/test_utils.py::test_department_filter\r\nOpenOversight/tests/test_models.py::test_department_repr\r\nOpenOversight/tests/test_alembic.py::test_alembic_has_single_head\r\nOpenOversight/tests/routes/test_image_tagging.py::test_routes_ok[/labels]\r\nOpenOversight/tests/test_email_client.py::test_smtp_email_provider_send_email\r\n /usr/src/app/OpenOversight/tests/conftest.py:740: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n first_officer = Officer.query.get(1)\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__duplicate\r\nOpenOversight/tests/test_models.py::test__uuid_uniqueness_constraint\r\nOpenOversight/tests/routes/test_singular_redirects.py::test_redirect_add_salary\r\n /usr/src/app/OpenOversight/tests/conftest.py:325: SAWarning: transaction already deassociated from connection\r\n transaction.rollback()\r\n\r\nOpenOversight/tests/test_commands.py::test_add_job_title__success\r\nOpenOversight/tests/test_commands.py::test_add_job_title__different_departments\r\n /usr/src/app/OpenOversight/app/commands.py:645: RemovedIn20Warning: \"Job\" object is being merged into a Session along the backref cascade path for relationship \"Department.jobs\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n job = Job(\r\n\r\nOpenOversight/tests/test_utils.py::test_filters_do_not_exclude_officers_without_assignments\r\n /usr/src/app/OpenOversight/tests/test_utils.py:102: RemovedIn20Warning: \"Officer\" object is being merged into a Session along the backref cascade path for relationship \"Department.officers\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n officer = Officer(\r\n\r\nOpenOversight/tests/test_models.py::test_salary_repr\r\n /usr/src/app/OpenOversight/tests/test_models.py:170: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n salary = Salary.query.first()\r\n\r\nOpenOversight/tests/test_commands.py::test_csv_import_new\r\n /usr/src/app/OpenOversight/tests/conftest.py:855: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n if len(list(officer.salaries)) > 0:\r\n\r\nOpenOversight/tests/test_database_cache.py::test_documented_assignments\r\nOpenOversight/tests/routes/test_image_tagging.py::test_admin_can_delete_tag\r\nOpenOversight/tests/routes/test_descriptions.py::test_officer_descriptions_markdown\r\nOpenOversight/tests/routes/test_notes.py::test_officer_notes_markdown\r\n /usr/local/lib/python3.11/site-packages/jinja2/environment.py:487: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n return getattr(obj, attribute)\r\n\r\nOpenOversight/tests/test_database_cache.py: 1 warning\r\nOpenOversight/tests/routes/test_incidents.py: 9 warnings\r\nOpenOversight/tests/routes/test_officer_and_department.py: 1 warning\r\n /usr/src/app/OpenOversight/app/utils/forms.py:203: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Location.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n return Incident(\r\n\r\nOpenOversight/tests/test_database_cache.py: 2 warnings\r\nOpenOversight/tests/routes/test_descriptions.py: 29 warnings\r\nOpenOversight/tests/routes/test_incidents.py: 34 warnings\r\nOpenOversight/tests/routes/test_notes.py: 29 warnings\r\nOpenOversight/tests/routes/test_singular_redirects.py: 21 warnings\r\nOpenOversight/tests/routes/test_officer_and_department.py: 52 warnings\r\n /usr/local/lib/python3.11/site-packages/flask_sqlalchemy/query.py:30: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n rv = self.get(ident)\r\n\r\nOpenOversight/tests/test_database_cache.py: 1 warning\r\nOpenOversight/tests/routes/test_officer_and_department.py: 11 warnings\r\n /usr/src/app/OpenOversight/app/utils/forms.py:78: RemovedIn20Warning: \"Assignment\" object is being merged into a Session along the backref cascade path for relationship \"Officer.assignments\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assignment = Assignment(\r\n\r\nOpenOversight/tests/routes/test_image_tagging.py::test_ac_cannot_delete_tag_not_in_their_dept\r\n /usr/src/app/OpenOversight/tests/routes/test_image_tagging.py:126: RemovedIn20Warning: The ``aliased`` and ``from_joinpoint`` keyword arguments to Query.join() are deprecated and will be removed in SQLAlchemy 2.0. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n Face.query.join(Face.officer, aliased=True)\r\n\r\nOpenOversight/tests/routes/test_image_tagging.py::test_user_is_redirected_to_correct_department_after_tagging\r\n /usr/src/app/OpenOversight/tests/routes/test_image_tagging.py:285: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n department = Department.query.get(department_id)\r\n\r\nOpenOversight/tests/test_commands.py::test_csv_new_salary\r\n /usr/src/app/OpenOversight/tests/test_commands.py:463: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '123456.78' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\r\n df.loc[0, \"salary\"] = \"123456.78\"\r\n\r\nOpenOversight/tests/test_commands.py::test_bulk_add_officers__success\r\n /usr/src/app/OpenOversight/tests/test_commands.py:511: RemovedIn20Warning: \"Assignment\" object is being merged into a Session along the backref cascade path for relationship \"Officer.assignments\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assignment = Assignment(base_officer=first_officer, job_id=job.id)\r\n\r\nOpenOversight/tests/test_commands.py::test_bulk_add_officers__success\r\n /usr/src/app/OpenOversight/tests/test_commands.py:519: RemovedIn20Warning: \"Assignment\" object is being merged into a Session along the backref cascade path for relationship \"Officer.assignments\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assignment = Assignment(base_officer=different_officer, job=job, created_by=user.id)\r\n\r\nOpenOversight/tests/routes/test_incidents.py::test_admins_can_edit_incident_date_and_address\r\n /usr/src/app/OpenOversight/tests/routes/test_incidents.py:253: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n updated = Incident.query.get(inc_id)\r\n\r\nOpenOversight/tests/routes/test_descriptions.py::test_admins_can_delete_descriptions\r\n /usr/src/app/OpenOversight/tests/routes/test_descriptions.py:293: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Description.query.get(description_id)\r\n\r\nOpenOversight/tests/routes/test_image_tagging.py::test_ac_cannot_set_featured_tag_not_in_their_dept\r\n /usr/src/app/OpenOversight/tests/routes/test_image_tagging.py:326: RemovedIn20Warning: The ``aliased`` and ``from_joinpoint`` keyword arguments to Query.join() are deprecated and will be removed in SQLAlchemy 2.0. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n Face.query.join(Face.officer, aliased=True)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__success\r\n /usr/src/app/OpenOversight/tests/test_commands.py:889: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Officer.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n incident.officers = [officer]\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__success\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__success\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/app/models/database_imports.py:308: RemovedIn20Warning: \"Incident\" object is being merged into a Session along the backref cascade path for relationship \"Officer.incidents\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n incident.officers = data.get(\"officers\", [])\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__success\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1012: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n incident3 = Incident.query.get(123456)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__success\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1035: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n updated_link = Link.query.get(55051)\r\n\r\nOpenOversight/tests/routes/test_descriptions.py::test_acs_can_delete_their_descriptions_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_descriptions.py:322: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Description.query.get(description_id)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/app/csv_imports.py:560: RemovedIn20Warning: Using plain strings to indicate SQL statements without using the text() construct is deprecated and will be removed in version 2.0. Ensure plain SQL statements are passed using the text() construct. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n db.session.execute(raw_sql)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1160: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n cop1 = Officer.query.get(99001)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1163: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n cop2 = Officer.query.get(99002)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1165: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert cop2.assignments[0] == Assignment.query.get(98001)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1167: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n cop3 = Officer.query.get(99003)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1169: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert cop3.salaries[0] == Salary.query.get(77001)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1171: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n incident = Incident.query.get(66001)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__force_create\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1176: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n link = Link.query.get(55001)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__overwrite_assignments\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1279: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n cop1 = Officer.query.get(cop1_id)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__overwrite_assignments\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1283: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n cop2 = Officer.query.get(cop2_id)\r\n\r\nOpenOversight/tests/test_commands.py::test_advanced_csv_import__overwrite_assignments\r\n /usr/src/app/OpenOversight/tests/test_commands.py:1285: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert cop2.assignments[0] == Assignment.query.get(a2_id)\r\n\r\nOpenOversight/tests/routes/test_descriptions.py::test_acs_cannot_delete_descriptions_not_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_descriptions.py:354: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n not_deleted = Description.query.get(description_id)\r\n\r\nOpenOversight/tests/routes/test_incidents.py: 12 warnings\r\n /usr/src/app/OpenOversight/app/main/forms.py:505: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n officer = Officer.query.get(officer_id)\r\n\r\nOpenOversight/tests/routes/test_notes.py::test_admins_can_delete_notes\r\n /usr/src/app/OpenOversight/tests/routes/test_notes.py:263: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Note.query.get(note.id)\r\n\r\nOpenOversight/tests/routes/test_notes.py::test_acs_can_delete_their_notes_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_notes.py:288: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Note.query.get(note.id)\r\n\r\nOpenOversight/tests/routes/test_notes.py::test_acs_cannot_delete_notes_not_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_notes.py:317: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n not_deleted = Note.query.get(note.id)\r\n\r\nOpenOversight/tests/routes/test_incidents.py::test_admins_can_delete_incidents\r\n /usr/src/app/OpenOversight/tests/routes/test_incidents.py:683: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Incident.query.get(inc_id)\r\n\r\nOpenOversight/tests/routes/test_incidents.py::test_acs_can_delete_incidents_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_incidents.py:697: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n deleted = Incident.query.get(inc_id)\r\n\r\nOpenOversight/tests/routes/test_incidents.py::test_acs_cannot_delete_incidents_not_in_their_department\r\n /usr/src/app/OpenOversight/tests/routes/test_incidents.py:713: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n not_deleted = Incident.query.get(inc_id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py: 21 warnings\r\n /usr/src/app/OpenOversight/app/auth/views.py:295: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user_id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_delete_user\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_delete_user\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_cannot_delete_other_admin\r\n /usr/src/app/OpenOversight/app/auth/views.py:342: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user_id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_delete_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:137: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert not User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_cannot_delete_other_admin\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:153: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert User.query.get(user.id) is not None\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_disable_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:178: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_cannot_disable_self\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:201: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_enable_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:213: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_enable_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:229: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_approve_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:296: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_can_approve_user\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:312: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-False-True-True]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-False-False-False]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[True-False-True-False]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-True-True-False]\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:349: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-False-True-True]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-False-False-False]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[True-False-True-False]\r\nOpenOversight/tests/routes/test_user_api.py::test_admin_approval_sends_confirmation_email[False-True-True-False]\r\n /usr/src/app/OpenOversight/tests/routes/test_user_api.py:366: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n user = User.query.get(user.id)\r\n\r\nOpenOversight/tests/routes/test_officer_and_department.py::test_admin_can_add_new_officer\r\n /usr/src/app/OpenOversight/app/utils/forms.py:97: RemovedIn20Warning: \"Note\" object is being merged into a Session along the backref cascade path for relationship \"Officer.notes\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n new_note = Note(\r\n\r\nOpenOversight/tests/routes/test_officer_and_department.py::test_admin_can_add_new_officer\r\n /usr/src/app/OpenOversight/app/utils/forms.py:108: RemovedIn20Warning: \"Description\" object is being merged into a Session along the backref cascade path for relationship \"Officer.descriptions\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n new_description = Description(\r\n\r\nOpenOversight/tests/routes/test_officer_and_department.py::test_admin_can_add_new_officer\r\n /usr/src/app/OpenOversight/app/utils/forms.py:119: RemovedIn20Warning: \"Salary\" object is being merged into a Session along the backref cascade path for relationship \"Officer.salaries\"; in SQLAlchemy 2.0, this reverse cascade will not take place. Set cascade_backrefs to False in either the relationship() or backref() function for the 2.0 behavior; or to set globally for the whole Session, set the future=True flag (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n new_salary = Salary(\r\n\r\nOpenOversight/tests/routes/test_officer_and_department.py: 109 warnings\r\n /usr/src/app/OpenOversight/tests/routes/test_officer_and_department.py:1777: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 1.4) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)\r\n assert (\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n\r\n---------- coverage: platform linux, python 3.11.9-final-0 -----------\r\n```\r\n
\r\n\r\n - [x] This branch is up-to-date with the `develop` branch.\r\n - [x] `pytest` passes on my local development environment.\r\n - [x] `pre-commit` passes on my local development environment.\r\n\r\n* Address database warnings and deprecated syntax (#1115)\r\n\r\nhttps://github.com/lucyparsons/OpenOversight/issues/1054\r\n\r\nAddressed the following error in tests by modifying the `Salary` table\r\nand deprecated syntax throughout the application.\r\n\r\n```console\r\nFutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '123456.78' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\r\nSAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n```\r\n\r\n
Warnings before changes\r\n\r\n```console\r\n=============================================================================================== warnings summary ===============================================================================================\r\nOpenOversight/tests/test_models.py::test_salary_repr\r\n /usr/src/app/OpenOversight/tests/test_models.py:170: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n salary = Salary.query.first()\r\n\r\nOpenOversight/tests/test_commands.py::test_add_department__duplicate\r\nOpenOversight/tests/test_models.py::test__uuid_uniqueness_constraint\r\nOpenOversight/tests/routes/test_singular_redirects.py::test_redirect_add_salary\r\n /usr/src/app/OpenOversight/tests/conftest.py:325: SAWarning: transaction already deassociated from connection\r\n transaction.rollback()\r\n\r\nOpenOversight/tests/test_commands.py::test_csv_import_new\r\n /usr/src/app/OpenOversight/tests/conftest.py:855: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n if len(list(officer.salaries)) > 0:\r\n\r\nOpenOversight/tests/routes/test_image_tagging.py::test_admin_can_delete_tag\r\nOpenOversight/tests/routes/test_descriptions.py::test_officer_descriptions_markdown\r\nOpenOversight/tests/test_database_cache.py::test_documented_assignments\r\n /usr/local/lib/python3.11/site-packages/jinja2/environment.py:487: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.\r\n return getattr(obj, attribute)\r\n\r\nOpenOversight/tests/test_commands.py::test_csv_new_salary\r\n /usr/src/app/OpenOversight/tests/test_commands.py:463: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '123456.78' has dtype incompatible with float64, please explicitly cast to a compatible dtype first.\r\n df.loc[0, \"salary\"] = \"123456.78\"\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n\r\n---------- coverage: platform linux, python 3.11.9-final-0 -----------\r\n```\r\n
\r\n\r\n- [x] This branch is up-to-date with the `develop` branch.\r\n- [x] `pytest` passes on my local development environment.\r\n- [x] `pre-commit` passes on my local development environment.\r\n- [x] Validated warning is gone.\r\n\r\n```console\r\n=============================================================================================== warnings summary ===============================================================================================\r\nOpenOversight/tests/test_commands.py::test_add_department__duplicate\r\nOpenOversight/tests/test_models.py::test__uuid_uniqueness_constraint\r\nOpenOversight/tests/routes/test_singular_redirects.py::test_redirect_add_salary\r\n /usr/src/app/OpenOversight/tests/conftest.py:325: SAWarning: transaction already deassociated from connection\r\n transaction.rollback()\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n\r\n---------- coverage: platform linux, python 3.11.9-final-0 -----------\r\n```\r\n\r\n- [x] Validated data migration works.\r\n\r\n```console\r\nI have no name!@36326fd7801f:/usr/src/app$ flask db stamp head\r\n...\r\nINFO [alembic.runtime.migration] Will assume transactional DDL.\r\nI have no name!@36326fd7801f:/usr/src/app$ flask db upgrade\r\n...\r\nINFO [alembic.runtime.migration] Running upgrade 939ea0f2b26d -> 5865f488470c, change salary column types\r\nI have no name!@36326fd7801f:/usr/src/app$ flask db downgrade\r\n...\r\nINFO [alembic.runtime.migration] Running downgrade 5865f488470c -> 939ea0f2b26d, change salary column types\r\nI have no name!@36326fd7801f:/usr/src/app$ flask db upgrade\r\n...\r\nINFO [alembic.runtime.migration] Running upgrade 939ea0f2b26d -> 5865f488470c, change salary column types\r\nI have no name!@36326fd7801f:/usr/src/app$\r\n```\r\n\r\n* Remove `transaction.rollback()` and use `session` fixture (#1117)\r\n\r\nhttps://github.com/lucyparsons/OpenOversight/issues/1054\r\n- This is the last PR for this issue. ❗❗❗❗❗❗\r\n\r\nRemoved the redundant `transaction.rollback()` function call in the\r\n`session` fixture and changed all references to `db.session` to\r\n`session` so that tests are using the correct scoping.\r\n\r\nAddressed this warning:\r\n```console\r\n=============================================================================================== warnings summary ===============================================================================================\r\nOpenOversight/tests/test_commands.py::test_add_department__duplicate\r\nOpenOversight/tests/test_models.py::test__uuid_uniqueness_constraint\r\nOpenOversight/tests/routes/test_singular_redirects.py::test_redirect_add_salary\r\n /usr/src/app/OpenOversight/tests/conftest.py:325: SAWarning: transaction already deassociated from connection\r\n transaction.rollback()\r\n\r\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\r\n\r\n---------- coverage: platform linux, python 3.11.9-final-0 -----------\r\n```\r\n\r\n- [x] This branch is up-to-date with the `develop` branch.\r\n- [x] `pytest` passes on my local development environment.\r\n- [x] `pre-commit` passes on my local development environment.\r\n- [x] Validate that no more warnings show up in the `make test` command.\r\n\r\n```console\r\n---------- coverage: platform linux, python 3.11.9-final-0 -----------\r\nName Stmts Miss Cover\r\n--------------------------------------------------------------------------------------------------------------------------------\r\nOpenOversight/__init__.py 0 0 100%\r\nOpenOversight/app/__init__.py 74 1 99%\r\n```\r\n\r\n* Fix database fixture and password unit test (#1120)\r\n\r\n* Add user profile tests (#1119)\r\n\r\n## Fixes issue\r\nhttps://github.com/lucyparsons/OpenOversight/issues/436\r\n\r\n## Description of Changes\r\nAdded tests to validate `/user/` route logic and correct profile logic\r\nto match pre-specified tests.\r\n\r\n\"Screenshot\r\n\r\nThere is not a `/users/` route, so I marked it out.\r\n\r\n## Tests and Linting\r\n- [x] This branch is up-to-date with the `develop` branch.\r\n- [x] `pytest` passes on my local development environment.\r\n- [x] `pre-commit` passes on my local development environment.\r\n\r\n* Upgrade pre-commit libraries\r\n\r\n---------\r\n\r\nCo-authored-by: Michael Plunkett <5885605+michplunkett@users.noreply.github.com>","shortMessageHtmlLink":"Merge from upstream (#500)"}},{"before":"2e668880673545ef89c1b2cb4ebe499af416945c","after":"89854ca3abc3834c23f62fe9fbd409352a17ac72","ref":"refs/heads/gh-pages","pushedAt":"2024-09-02T05:46:50.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: e660929cdedd99bd328c8c87084c2f241b5bd471","shortMessageHtmlLink":"deploy: e660929"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wOVQwNTozOTowMi4wMDAwMDBazwAAAASwf7g6","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wMlQwNTo0Njo1MC4wMDAwMDBazwAAAASqOen6"}},"title":"Activity · OrcaCollective/OpenOversight"}