From cebf08537c39ad67fb54a722db690c96a6f1a9b8 Mon Sep 17 00:00:00 2001 From: Max Chis Date: Mon, 13 Oct 2025 18:58:41 -0400 Subject: [PATCH] Begin draft --- pyproject.toml | 2 +- src/external/pdap/client.py | 9 ++++++++- src/external/pdap/impl/follows/__init__.py | 0 src/external/pdap/impl/follows/core.py | 20 +++++++++++++++++++ src/external/pdap/impl/follows/response.py | 11 ++++++++++ src/security/manager.py | 5 ----- .../manual/external/pdap/test_get_follows.py | 7 +++++++ .../manual/external/pdap/test_match_agency.py | 1 + uv.lock | 8 ++++---- 9 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 src/external/pdap/impl/follows/__init__.py create mode 100644 src/external/pdap/impl/follows/core.py create mode 100644 src/external/pdap/impl/follows/response.py create mode 100644 tests/manual/external/pdap/test_get_follows.py diff --git a/pyproject.toml b/pyproject.toml index 70f54673..0094d983 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ dependencies = [ "lxml~=5.1.0", "marshmallow~=3.23.2", "openai~=1.60.1", - "pdap-access-manager==0.3.6", + "pdap-access-manager==0.4.2", "pillow>=11.3.0", "pip>=25.2", "playwright~=1.49.1", diff --git a/src/external/pdap/client.py b/src/external/pdap/client.py index 1c950ad3..63a19fdd 100644 --- a/src/external/pdap/client.py +++ b/src/external/pdap/client.py @@ -7,6 +7,8 @@ from src.external.pdap.dtos.match_agency.response import MatchAgencyResponse from src.external.pdap.dtos.unique_url_duplicate import UniqueURLDuplicateInfo from src.external.pdap.enums import MatchAgencyResponseStatus +from src.external.pdap.impl.follows.core import get_user_followed_locations +from src.external.pdap.impl.follows.response import GetFollowsResponse from src.external.pdap.impl.meta_urls.core import submit_meta_urls from src.external.pdap.impl.meta_urls.request import SubmitMetaURLsRequest @@ -156,4 +158,9 @@ async def submit_meta_urls( return await submit_meta_urls( self.access_manager, requests=requests - ) \ No newline at end of file + ) + + async def get_user_followed_locations(self) -> GetFollowsResponse: + return await get_user_followed_locations( + access_manager=self.access_manager + ) diff --git a/src/external/pdap/impl/follows/__init__.py b/src/external/pdap/impl/follows/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/external/pdap/impl/follows/core.py b/src/external/pdap/impl/follows/core.py new file mode 100644 index 00000000..97281395 --- /dev/null +++ b/src/external/pdap/impl/follows/core.py @@ -0,0 +1,20 @@ +from pdap_access_manager import AccessManager, DataSourcesNamespaces, RequestInfo, RequestType, ResponseInfo + +from src.external.pdap.impl.follows.response import GetFollowsResponse, LinkUserFollow + + +async def get_user_followed_locations( + access_manager: AccessManager, +) -> GetFollowsResponse: + + url: str = f"{access_manager.data_sources_url}/v3/v2/source-collector/follows" + headers: dict[str, str] = await access_manager.jwt_header() + request_info = RequestInfo( + type_=RequestType.GET, + url=url, + headers=headers + ) + response_info: ResponseInfo = await access_manager.make_request(request_info) + return GetFollowsResponse( + **response_info.data + ) \ No newline at end of file diff --git a/src/external/pdap/impl/follows/response.py b/src/external/pdap/impl/follows/response.py new file mode 100644 index 00000000..a37894f5 --- /dev/null +++ b/src/external/pdap/impl/follows/response.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel + + +class LinkUserFollow(BaseModel): + user_id: int + location_id: int + + +class GetFollowsResponse(BaseModel): + follows: list[LinkUserFollow] + diff --git a/src/security/manager.py b/src/security/manager.py index 16f0519e..2a84f046 100644 --- a/src/security/manager.py +++ b/src/security/manager.py @@ -68,8 +68,3 @@ def get_access_info( token: Annotated[str, Depends(oauth2_scheme)] ) -> AccessInfo: return SecurityManager().check_access(token, Permissions.SOURCE_COLLECTOR) - -def require_permission(permission: Permissions): - def dependency(token: Annotated[str, Depends(oauth2_scheme)]) -> AccessInfo: - return SecurityManager().check_access(token, permission=permission) - return dependency \ No newline at end of file diff --git a/tests/manual/external/pdap/test_get_follows.py b/tests/manual/external/pdap/test_get_follows.py new file mode 100644 index 00000000..08247277 --- /dev/null +++ b/tests/manual/external/pdap/test_get_follows.py @@ -0,0 +1,7 @@ +import pytest + + +@pytest.mark.asyncio +async def test_get_user_followed_locations(pdap_client_dev): + response = await pdap_client_dev.get_user_followed_locations() + print(response) \ No newline at end of file diff --git a/tests/manual/external/pdap/test_match_agency.py b/tests/manual/external/pdap/test_match_agency.py index a637dad0..8bc8d924 100644 --- a/tests/manual/external/pdap/test_match_agency.py +++ b/tests/manual/external/pdap/test_match_agency.py @@ -4,3 +4,4 @@ @pytest.mark.asyncio async def test_match_agency(pdap_client): response = await pdap_client.match_agency(name="police") + print(response) diff --git a/uv.lock b/uv.lock index e7f52cfd..0c85cca9 100644 --- a/uv.lock +++ b/uv.lock @@ -560,7 +560,7 @@ requires-dist = [ { name = "lxml", specifier = "~=5.1.0" }, { name = "marshmallow", specifier = "~=3.23.2" }, { name = "openai", specifier = "~=1.60.1" }, - { name = "pdap-access-manager", specifier = "==0.3.6" }, + { name = "pdap-access-manager", specifier = "==0.4.2" }, { name = "pillow", specifier = ">=11.3.0" }, { name = "pip", specifier = ">=25.2" }, { name = "playwright", specifier = "~=1.49.1" }, @@ -1591,7 +1591,7 @@ wheels = [ [[package]] name = "pdap-access-manager" -version = "0.3.6" +version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -1599,9 +1599,9 @@ dependencies = [ { name = "pydantic" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a4/14/d910483f08a0203a20fc2839738d9e27c83a66849fed422c3d4e804e15f5/pdap_access_manager-0.3.6.tar.gz", hash = "sha256:15c04f704e22116cd56b459e8a9d7f8514c75c36ca2c8a889b9ce2a308d88f6c", size = 4169, upload_time = "2025-06-12T20:14:55.942Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/48/c5567f65038c4c914cfc85a2772f66e5fae9c97076de4b12905266236650/pdap_access_manager-0.4.2.tar.gz", hash = "sha256:37a958689daf6a285c4ac989108b8e3c7c7f226032f6e684d1878648e86bd9c2", size = 5674, upload_time = "2025-10-13T21:47:53.861Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/81/76803339fd732cd3eda7458d48e67487d9377197f9ea7d4583df098823b2/pdap_access_manager-0.3.6-py3-none-any.whl", hash = "sha256:a5910068f642f7548d037bcb98657ca1945997fae4e89dc4e1d47283da485b91", size = 5034, upload_time = "2025-06-12T20:14:48.452Z" }, + { url = "https://files.pythonhosted.org/packages/cf/b0/ebca0ee05b13a47ce094c3a6a4fc5e0b148baa6ee89519722a46bcc27db9/pdap_access_manager-0.4.2-py3-none-any.whl", hash = "sha256:97d74575a4949b1aa6cd3265e4dd74a0014e451b95d0619c327e43b123bacf8b", size = 10742, upload_time = "2025-10-13T21:47:53.024Z" }, ] [[package]]