From 09558629731f6e8f2281dd593324f257bd0b7586 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Mon, 27 Apr 2026 11:32:44 +0000 Subject: [PATCH] working on integrating new EPC api into address2UPRN --- .github/workflows/deploy_fastapi_backend.yml | 5 ++++ .github/workflows/unit_tests.yml | 1 + .gitignore | 3 ++ backend/.env.example | 3 +- backend/address2UPRN/main.py | 29 +++++++++++--------- backend/address2UPRN/tests/test_csv.py | 1 - backend/app/config.py | 1 + conftest.py | 10 ++++--- 8 files changed, 34 insertions(+), 19 deletions(-) diff --git a/.github/workflows/deploy_fastapi_backend.yml b/.github/workflows/deploy_fastapi_backend.yml index 5ad4d6ac..cb861d31 100644 --- a/.github/workflows/deploy_fastapi_backend.yml +++ b/.github/workflows/deploy_fastapi_backend.yml @@ -51,6 +51,10 @@ jobs: id: set_auth_token run: echo "::set-output name=auth_token::${{ secrets[format('{0}_EPC_AUTH_TOKEN', github.ref_name)] }}" + - name: Set Open EPC API token + id: set_open_epc_token + run: echo "::set-output name=open_epc_token::${{ secrets[format('{0}_OPEN_EPC_API_TOKEN', github.ref_name)] }}" + # Store port, name and host in github secrets - name: Set DB credentials id: set_db_credentials @@ -127,6 +131,7 @@ jobs: GOOGLE_SOLAR_API_KEY: ${{ steps.set_api_secrets.outputs.google_solar_api_key }} DOMAIN_NAME: ${{ steps.set_domain.outputs.domain }} EPC_AUTH_TOKEN: ${{ steps.set_auth_token.outputs.auth_token }} + OPEN_EPC_API_TOKEN: ${{ steps.set_open_epc_token.outputs.open_epc_token }} DB_HOST: ${{ steps.set_db_credentials.outputs.db_host }} DB_PORT: ${{ steps.set_db_credentials.outputs.db_port }} DB_NAME: ${{ steps.set_db_credentials.outputs.db_name }} diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 436428f9..e1f4fb48 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -49,6 +49,7 @@ jobs: docker run --rm \ --network host \ -e EPC_AUTH_TOKEN=${{ secrets.DEV_EPC_AUTH_TOKEN }} \ + -e OPEN_EPC_API_TOKEN=${{ secrets.DEV_OPEN_EPC_API_TOKEN }} \ -e HUBSPOT_API_KEY=${{ secrets.HUBSPOT_API_KEY }} \ -e DB_HOST=localhost \ -e DB_NAME=test \ diff --git a/.gitignore b/.gitignore index d6d23313..888d527a 100644 --- a/.gitignore +++ b/.gitignore @@ -292,3 +292,6 @@ pyrightconfig.json # playwright output */pashub_fetcher/videos/* backlog/* + +# Local Claude config files +.claude/* \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example index 352192d0..04611719 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,4 +1,5 @@ API_KEY = example-api-key ENVIRONMENT = local SECRET_KEY = YOUR_SECRET_KEY -ALGORITHM = HS256 \ No newline at end of file +ALGORITHM = HS256 +OPEN_EPC_API_TOKEN = your_token_here \ No newline at end of file diff --git a/backend/address2UPRN/main.py b/backend/address2UPRN/main.py index bd562bc7..98f8c65b 100644 --- a/backend/address2UPRN/main.py +++ b/backend/address2UPRN/main.py @@ -14,27 +14,30 @@ from utils.s3 import ( ) from datetime import datetime -from backend.utils.addressMatch import AddressMatch, get_uprn_candidates, df_has_single_uprn, score_addresses +from backend.utils.addressMatch import ( + AddressMatch, + get_uprn_candidates, + df_has_single_uprn, + score_addresses, +) logger = setup_logger() -EPC_AUTH_TOKEN = os.getenv( - "EPC_AUTH_TOKEN", -) +OPEN_EPC_API_TOKEN = os.getenv("OPEN_EPC_API_TOKEN") -if EPC_AUTH_TOKEN is None: - raise RuntimeError("EPC_AUTH_TOKEN not defined in env") +if OPEN_EPC_API_TOKEN is None: + raise RuntimeError("OPEN_EPC_API_TOKEN not defined in env") def get_epc_data_with_postcode(postcode: str) -> pd.DataFrame: from backend.epc_client.client import EpcClientService - service = EpcClientService(auth_token=EPC_AUTH_TOKEN) + + service = EpcClientService(auth_token=OPEN_EPC_API_TOKEN) results = service.search_by_postcode(postcode) - return pd.DataFrame([ - {"address": r.address_line_1, "uprn": r.uprn} - for r in results - ]) + return pd.DataFrame( + [{"address": r.address_line_1, "uprn": r.uprn} for r in results] + ) def get_uprn_with_epc_df( @@ -58,8 +61,8 @@ def get_uprn_with_epc_df( best_score = scored_df.iloc[0]["lexiscore"] # # Return None if score is below threshold - # if best_score < 0.7: - # return None + if best_score < 0.7: + return None # All rank-1 rows (possible draw) top_rank_df = scored_df[scored_df["lexirank"] == 1] diff --git a/backend/address2UPRN/tests/test_csv.py b/backend/address2UPRN/tests/test_csv.py index 70e7a9f9..a8f0b1b4 100644 --- a/backend/address2UPRN/tests/test_csv.py +++ b/backend/address2UPRN/tests/test_csv.py @@ -31,7 +31,6 @@ def test_uprn_resolution_matches_manual( postcode: str, expected_uprn: str, ): - from utils.logger import setup_logger uprn = get_uprn(user_input, postcode) if uprn: diff --git a/backend/app/config.py b/backend/app/config.py index 70a6b50c..44826d24 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -44,6 +44,7 @@ class Settings(BaseSettings): # Third parties EPC_AUTH_TOKEN: str = "changeme" + OPEN_EPC_API_TOKEN: str = "changeme" GOOGLE_SOLAR_API_KEY: str = "changeme" # Database settings diff --git a/conftest.py b/conftest.py index 2ea20ebb..0689853b 100644 --- a/conftest.py +++ b/conftest.py @@ -1,11 +1,9 @@ import os +from pathlib import Path from backend.app.config import get_settings -import os from dotenv import load_dotenv -import os -# Load .env in conftest.py directory for local development -load_dotenv() +load_dotenv(Path(__file__).resolve().parent / "backend" / ".env") DEFAULT_ENV = { "API_KEY": "test", @@ -18,6 +16,10 @@ DEFAULT_ENV = { "EPC_AUTH_TOKEN", "test", ), # overridden in GitHub Actions + "OPEN_EPC_API_TOKEN": os.getenv( + "OPEN_EPC_API_TOKEN", + "test", + ), # overridden in GitHub Actions "GOOGLE_SOLAR_API_KEY": "test", "DB_HOST": "localhost", "DB_USERNAME": "test",