Coverage for polar/customer_portal/endpoints/organization.py: 89%

17 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 12:42 +0000

1from typing import Annotated 

2 

3from fastapi import Depends, Path 

4 

5from polar.exceptions import ResourceNotFound 

6from polar.openapi import APITag 

7from polar.postgres import AsyncSession, get_db_session 

8from polar.routing import APIRouter 

9 

10from ..schemas.organization import CustomerOrganizationData 

11from ..service.organization import ( 

12 customer_organization as customer_organization_service, 

13) 

14 

15router = APIRouter(prefix="/organizations", tags=["organizations", APITag.public]) 

16 

17OrganizationSlug = Annotated[str, Path(description="The organization slug.")] 

18OrganizationNotFound = { 

19 "description": "Organization not found.", 

20 "model": ResourceNotFound.schema(), 

21} 

22 

23 

24@router.get( 

25 "/{slug}", 

26 summary="Get Organization", 

27 response_model=CustomerOrganizationData, 

28 responses={404: OrganizationNotFound}, 

29) 

30async def get( 

31 slug: OrganizationSlug, 

32 session: AsyncSession = Depends(get_db_session), 

33) -> CustomerOrganizationData: 

34 """Get a customer portal's organization by slug.""" 

35 organization = await customer_organization_service.get_by_slug(session, slug) 

36 

37 if organization is None: 37 ↛ 38line 37 didn't jump to line 38 because the condition on line 37 was never true

38 raise ResourceNotFound() 

39 

40 return CustomerOrganizationData.model_validate( 

41 {"organization": organization, "products": organization.products} 

42 )