1818
1919from gateway_api .common .common import FlaskResponse
2020from gateway_api .pds_search import PdsClient , PdsSearchResults
21+ from gateway_api .sds_search import SdsClient , SdsSearchResults
2122
2223
2324@dataclass
@@ -44,62 +45,6 @@ def __str__(self) -> str:
4445 return self .message
4546
4647
47- @dataclass
48- class SdsSearchResults :
49- """
50- Stub SDS search results dataclass.
51-
52- Replace this with the real one once it's implemented.
53-
54- :param asid: Accredited System ID.
55- :param endpoint: Endpoint URL associated with the organisation, if applicable.
56- """
57-
58- asid : str
59- endpoint : str | None
60-
61-
62- class SdsClient :
63- """
64- Stub SDS client for obtaining ASID from ODS code.
65-
66- Replace this with the real one once it's implemented.
67- """
68-
69- SANDBOX_URL = "https://example.invalid/sds"
70-
71- def __init__ (
72- self ,
73- auth_token : str ,
74- base_url : str = SANDBOX_URL ,
75- timeout : int = 10 ,
76- ) -> None :
77- """
78- Create an SDS client.
79-
80- :param auth_token: Authentication token to present to SDS.
81- :param base_url: Base URL for SDS.
82- :param timeout: Timeout in seconds for SDS calls.
83- """
84- self .auth_token = auth_token
85- self .base_url = base_url
86- self .timeout = timeout
87-
88- def get_org_details (self , ods_code : str ) -> SdsSearchResults | None :
89- """
90- Retrieve SDS org details for a given ODS code.
91-
92- This is a placeholder implementation that always returns an ASID and endpoint.
93-
94- :param ods_code: ODS code to look up.
95- :returns: SDS search results or ``None`` if not found.
96- """
97- # Placeholder implementation
98- return SdsSearchResults (
99- asid = f"asid_{ ods_code } " , endpoint = "https://example-provider.org/endpoint"
100- )
101-
102-
10348class Controller :
10449 """
10550 Orchestrates calls to PDS -> SDS -> GP provider.
@@ -113,7 +58,7 @@ class Controller:
11358 def __init__ (
11459 self ,
11560 pds_base_url : str = PdsClient .SANDBOX_URL ,
116- sds_base_url : str = "https://example.invalid/sds" ,
61+ sds_base_url : str = SdsClient . SANDBOX_URL ,
11762 nhsd_session_urid : str | None = None ,
11863 timeout : int = 10 ,
11964 ) -> None :
@@ -159,7 +104,7 @@ def run(self, request: GetStructuredRecordRequest) -> FlaskResponse:
159104
160105 try :
161106 consumer_asid , provider_asid , provider_endpoint = self ._get_sds_details (
162- auth_token , request .ods_from .strip (), provider_ods
107+ request .ods_from .strip (), provider_ods
163108 )
164109 except RequestError as err :
165110 return FlaskResponse (status_code = err .status_code , data = str (err ))
@@ -243,7 +188,7 @@ def _get_pds_details(
243188 return provider_ods_code
244189
245190 def _get_sds_details (
246- self , auth_token : str , consumer_ods : str , provider_ods : str
191+ self , consumer_ods : str , provider_ods : str
247192 ) -> tuple [str , str , str ]:
248193 """
249194 Call SDS to obtain consumer ASID, provider ASID, and provider endpoint.
@@ -252,20 +197,20 @@ def _get_sds_details(
252197 - provider details (ASID + endpoint)
253198 - consumer details (ASID)
254199
255- :param auth_token: Authorization token to use for SDS.
256200 :param consumer_ods: Consumer organisation ODS code (from request headers).
257201 :param provider_ods: Provider organisation ODS code (from PDS).
258202 :returns: Tuple of (consumer_asid, provider_asid, provider_endpoint).
259203 :raises RequestError: If SDS data is missing or incomplete for provider/consumer
260204 """
261205 # SDS: Get provider details (ASID + endpoint) for provider ODS
262206 sds = SdsClient (
263- auth_token = auth_token ,
264207 base_url = self .sds_base_url ,
265208 timeout = self .timeout ,
266209 )
267210
268- provider_details : SdsSearchResults | None = sds .get_org_details (provider_ods )
211+ provider_details : SdsSearchResults | None = sds .get_org_details (
212+ provider_ods , get_endpoint = True
213+ )
269214 if provider_details is None :
270215 raise RequestError (
271216 status_code = 404 ,
@@ -293,7 +238,9 @@ def _get_sds_details(
293238 )
294239
295240 # SDS: Get consumer details (ASID) for consumer ODS
296- consumer_details : SdsSearchResults | None = sds .get_org_details (consumer_ods )
241+ consumer_details : SdsSearchResults | None = sds .get_org_details (
242+ consumer_ods , get_endpoint = False
243+ )
297244 if consumer_details is None :
298245 raise RequestError (
299246 status_code = 404 ,
0 commit comments