11from __future__ import annotations
22
33import logging
4- from typing import Any
54
65from discord import Interaction
76from discord .app_commands import Transform , Transformer
1918logger = logging .getLogger (__name__ )
2019
2120
22- class RepositoryNameTransformer (Transformer ):
23- async def transform (self , interaction : Interaction , value : str ) -> Any :
24- return RepositoryName .parse (value )
21+ class RepositoryTransformer (Transformer ):
22+ async def transform (self , interaction : Interaction , value : str ) -> FullRepository :
23+ repo = RepositoryName .parse (value )
24+ async with GHUtilsBot .github_app_of (interaction ) as (github , _ ):
25+ try :
26+ return await gh_request (
27+ github .rest .repos .async_get (repo .owner , repo .repo )
28+ )
29+ except GitHubException as e :
30+ match e :
31+ case RequestFailed (response = Response (status_code = 404 )):
32+ raise ValueError ("Repository not found" )
33+ case _:
34+ logger .warning (e )
35+ raise ValueError (f"Failed to get repository: { e } " )
2536
2637 async def autocomplete ( # pyright: ignore[reportIncompatibleMethodOverride]
2738 self ,
@@ -64,25 +75,12 @@ async def autocomplete( # pyright: ignore[reportIncompatibleMethodOverride]
6475 ]
6576
6677
67- class FullRepositoryTransformer (RepositoryNameTransformer ):
68- async def transform (self , interaction : Interaction , value : str ):
69- repo = RepositoryName .parse (value )
70- async with GHUtilsBot .github_app_of (interaction ) as (github , _ ):
71- try :
72- return await gh_request (
73- github .rest .repos .async_get (repo .owner , repo .repo )
74- )
75- except GitHubException as e :
76- match e :
77- case RequestFailed (response = Response (status_code = 404 )):
78- raise ValueError ("Repository not found" )
79- case _:
80- logger .warning (e )
81- raise ValueError (f"Failed to get repository: { e } " )
82-
83-
8478class UserTransformer (Transformer ):
85- async def transform (self , interaction : Interaction , value : str ):
79+ async def transform (
80+ self ,
81+ interaction : Interaction ,
82+ value : str ,
83+ ) -> PrivateUser | PublicUser :
8684 async with GHUtilsBot .github_app_of (interaction ) as (github , _ ):
8785 try :
8886 return await gh_request (github .rest .users .async_get_by_username (value ))
@@ -95,7 +93,9 @@ async def transform(self, interaction: Interaction, value: str):
9593 raise ValueError (f"Failed to get user: { e } " )
9694
9795 async def autocomplete ( # pyright: ignore[reportIncompatibleMethodOverride]
98- self , interaction : Interaction , value : str
96+ self ,
97+ interaction : Interaction ,
98+ value : str ,
9999 ) -> list [Choice [str ]]:
100100 async with GHUtilsBot .github_app_of (interaction ) as (github , state ):
101101 if state != LoginState .LOGGED_IN :
@@ -122,8 +122,6 @@ async def autocomplete( # pyright: ignore[reportIncompatibleMethodOverride]
122122 return [Choice (name = user .login , value = user .login ) for user in result .items ]
123123
124124
125- UserOption = Transform [PrivateUser | PublicUser , UserTransformer ]
126-
127- RepositoryNameOption = Transform [RepositoryName , RepositoryNameTransformer ]
125+ RepositoryOption = Transform [FullRepository , RepositoryTransformer ]
128126
129- FullRepositoryOption = Transform [FullRepository , FullRepositoryTransformer ]
127+ UserOption = Transform [PrivateUser | PublicUser , UserTransformer ]
0 commit comments