From c25c8a893b56a076c38ecf7c22c4349fd5d351b3 Mon Sep 17 00:00:00 2001 From: Sam <78538841+spwoodcock@users.noreply.github.com> Date: Mon, 16 Sep 2024 23:26:25 +0100 Subject: [PATCH] refactor(backend): rename public beta org to `hotosm` (#1784) * build: update osm-fieldwork --> v0.16.1 for xlsform updates * build: add migration for renaming fmtm-public-beta --> hotosm * build: rename fmtm-public-beta --> hotosm in all code --- src/backend/app/auth/roles.py | 6 +++--- .../app/organisations/organisation_crud.py | 10 +++++----- src/backend/migrations/005-rename-public-beta.sql | 15 +++++++++++++++ src/backend/pdm.lock | 8 ++++---- src/backend/pyproject.toml | 2 +- src/backend/tests/conftest.py | 6 +----- src/frontend/e2e/01-create-new-project.spec.ts | 2 +- 7 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 src/backend/migrations/005-rename-public-beta.sql diff --git a/src/backend/app/auth/roles.py b/src/backend/app/auth/roles.py index 5da2934df6..b05e90a438 100644 --- a/src/backend/app/auth/roles.py +++ b/src/backend/app/auth/roles.py @@ -65,7 +65,7 @@ async def check_access( Access is determined based on the user's role and permissions: - If the user has an 'ADMIN' role, access is granted. - If the user has a 'READ_ONLY' role, access is denied. - - If the organisation is the public beta, then grant access. + - If the organisation is HOTOSM, then grant access. - For other roles, access is granted if the user is an organisation manager for the specified organisation (org_id) or has the specified role in the specified project (project_id). @@ -95,13 +95,13 @@ async def check_access( SELECT 1 FROM organisations WHERE (organisations.id = :org_id - AND organisations.slug = 'fmtm-public-beta') + AND organisations.slug = 'hotosm') OR EXISTS ( SELECT 1 FROM projects JOIN organisations AS org ON projects.organisation_id = org.id - WHERE org.slug = 'fmtm-public-beta' + WHERE org.slug = 'hotosm' AND projects.id = :project_id ) ) THEN true diff --git a/src/backend/app/organisations/organisation_crud.py b/src/backend/app/organisations/organisation_crud.py index 3c07871776..796c5e17b1 100644 --- a/src/backend/app/organisations/organisation_crud.py +++ b/src/backend/app/organisations/organisation_crud.py @@ -44,7 +44,7 @@ async def init_admin_org(db: Session): -- Start a transaction BEGIN; - -- Insert FMTM Public Beta organisation + -- Insert HOTOSM organisation INSERT INTO public.organisations ( name, slug, @@ -58,10 +58,10 @@ async def init_admin_org(db: Session): odk_central_password ) VALUES ( - 'FMTM Public Beta', - 'fmtm-public-beta', + 'HOTOSM', + 'hotosm', 'https://avatars.githubusercontent.com/u/458752?s=280&v=4', - 'HOTOSM Public Beta for FMTM.', + 'Humanitarian OpenStreetMap Team.', 'https://hotosm.org', 'FREE', true, @@ -106,7 +106,7 @@ async def init_admin_org(db: Session): -- Set localadmin user as org admin WITH org_cte AS ( SELECT id FROM public.organisations - WHERE name = 'FMTM Public Beta' + WHERE name = 'HOTOSM' ) INSERT INTO public.organisation_managers (organisation_id, user_id) SELECT (SELECT id FROM org_cte), :admin_user_id diff --git a/src/backend/migrations/005-rename-public-beta.sql b/src/backend/migrations/005-rename-public-beta.sql new file mode 100644 index 0000000000..feeaa305ef --- /dev/null +++ b/src/backend/migrations/005-rename-public-beta.sql @@ -0,0 +1,15 @@ +-- ## Migration to: +-- * Rename FMTM Public Beta org --> HOTOSM + +-- Start a transaction +BEGIN; + +UPDATE public.organisations +SET + name = 'HOTOSM', + slug = 'hotosm', + description = 'Humanitarian OpenStreetMap Team' +WHERE slug = 'fmtm-public-beta'; + +-- Commit the transaction +COMMIT; diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 9ebb3d7083..08536721c6 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "debug", "dev", "docs", "test", "monitoring"] strategy = ["cross_platform"] lock_version = "4.4.1" -content_hash = "sha256:93891510bf2629cff6e0cd56c022b832de117be958b7349236095548ccdc90f3" +content_hash = "sha256:59cb0981444a4053919d7682227b194b657ff2e806e8d5079ac9af25fe6c5e30" [[package]] name = "aiohttp" @@ -1579,7 +1579,7 @@ files = [ [[package]] name = "osm-fieldwork" -version = "0.16.0" +version = "0.16.1" requires_python = ">=3.10" summary = "Processing field data from ODK to OpenStreetMap format." dependencies = [ @@ -1605,8 +1605,8 @@ dependencies = [ "xmltodict>=0.13.0", ] files = [ - {file = "osm-fieldwork-0.16.0.tar.gz", hash = "sha256:da125269caf64caced40bead2f060dd035561aacb0650793edca01adcf3c172c"}, - {file = "osm_fieldwork-0.16.0-py3-none-any.whl", hash = "sha256:dba09f395cf9bcdfdfbe63c504ef9b3e2775a63e4e869bd19a5080942f8cf638"}, + {file = "osm-fieldwork-0.16.1.tar.gz", hash = "sha256:c724c6a8650c1eb62a059317bad46d2f08f612feb4d0ce76dfc2faae90410f13"}, + {file = "osm_fieldwork-0.16.1-py3-none-any.whl", hash = "sha256:c9dbdec0c29747797c63874208fa014a37071b3e663ea63dfd0d3f8ebbe00f69"}, ] [[package]] diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 8fb47feb10..fe93499f28 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "pyjwt>=2.8.0", "async-lru>=2.0.4", "osm-login-python==2.0.0", - "osm-fieldwork==0.16.0", + "osm-fieldwork==0.16.1", "osm-rawdata==0.3.2", "fmtm-splitter==1.3.0", ] diff --git a/src/backend/tests/conftest.py b/src/backend/tests/conftest.py index 34070ff5d6..dacecd0aa5 100644 --- a/src/backend/tests/conftest.py +++ b/src/backend/tests/conftest.py @@ -116,11 +116,7 @@ async def admin_user(db): @pytest.fixture(scope="function") def organisation(db): """A test organisation.""" - return ( - db.query(DbOrganisation) - .filter(DbOrganisation.name == "FMTM Public Beta") - .first() - ) + return db.query(DbOrganisation).filter(DbOrganisation.name == "HOTOSM").first() @pytest.fixture(scope="function") diff --git a/src/frontend/e2e/01-create-new-project.spec.ts b/src/frontend/e2e/01-create-new-project.spec.ts index bdd03a8f96..96395ff6b6 100644 --- a/src/frontend/e2e/01-create-new-project.spec.ts +++ b/src/frontend/e2e/01-create-new-project.spec.ts @@ -30,7 +30,7 @@ test('create new project', async ({ browserName, page }) => { await page.locator('#description').click(); await page.locator('#description').fill('desc'); await page.getByRole('combobox').click(); - await page.getByLabel('FMTM Public Beta').click(); + await page.getByLabel('HOTOSM').click(); await page.getByRole('button', { name: 'NEXT' }).click(); // 2. Upload Area Step