@@ -36,10 +36,74 @@ def to_dataclass(self) -> typing.Any:
3636ResponseT = typing .TypeVar ("ResponseT" , bound = BaseResponse )
3737
3838
39+ @dataclasses .dataclass
40+ class GetRepositoriesRequest (BaseRequest ):
41+ owner : str
42+ limit : int = 100
43+ after : str | None = None
44+
45+ document : graphql .DocumentNode = gql .gql (
46+ """
47+ query myOrgRepos($query: String!, $limit: Int!, $after: String) {
48+ search(query: $query, type: REPOSITORY, first: $limit, after: $after) {
49+ nodes {
50+ ... on Repository {
51+ name
52+ owner {
53+ login
54+ }
55+ }
56+ }
57+ pageInfo {
58+ endCursor
59+ hasNextPage
60+ }
61+ }
62+ }
63+ """
64+ )
65+
66+ @property
67+ def params (self ) -> dict [str , typing .Any ]:
68+ return {
69+ "query" : f"org:{ self .owner } " ,
70+ "limit" : self .limit ,
71+ "after" : self .after ,
72+ }
73+
74+
75+ class GetRepositoriesResponse (BaseResponse ):
76+ class Search (BaseModel ):
77+ class Repository (BaseModel ):
78+ class Owner (BaseModel ):
79+ login : str
80+
81+ name : str
82+ owner : Owner
83+
84+ class PageInfo (BaseModel ):
85+ end_cursor : str
86+ has_next_page : bool
87+
88+ nodes : list [Repository ]
89+ page_info : PageInfo
90+
91+ search : Search
92+
93+ def to_dataclass (self ) -> list [github_models .Repository ]:
94+ return [
95+ github_models .Repository (
96+ name = repository .name ,
97+ owner = repository .owner .login ,
98+ )
99+ for repository in self .search .nodes
100+ ]
101+
102+
39103@dataclasses .dataclass
40104class GetRepositoryIssuesRequest (BaseRequest ):
41105 owner : str
42- repo : str
106+ repository : str
43107 created_after : datetime .datetime
44108 limit : int = 100
45109
@@ -67,7 +131,7 @@ class GetRepositoryIssuesRequest(BaseRequest):
67131 @property
68132 def params (self ) -> dict [str , typing .Any ]:
69133 query = [
70- f"repo:{ self .owner } /{ self .repo } " ,
134+ f"repo:{ self .owner } /{ self .repository } " ,
71135 "is:issue" ,
72136 f"created:>{ self .created_after .isoformat ()} " ,
73137 "sort:created-asc" ,
@@ -112,7 +176,7 @@ def to_dataclass(self) -> list[github_models.Issue]:
112176@dataclasses .dataclass
113177class GetRepositoryPRsRequest (BaseRequest ):
114178 owner : str
115- repo : str
179+ repository : str
116180 created_after : datetime .datetime
117181 limit : int = 100
118182
@@ -140,7 +204,7 @@ class GetRepositoryPRsRequest(BaseRequest):
140204 @property
141205 def params (self ) -> dict [str , typing .Any ]:
142206 query = [
143- f"repo:{ self .owner } /{ self .repo } " ,
207+ f"repo:{ self .owner } /{ self .repository } " ,
144208 "is:pr" ,
145209 f"created:>{ self .created_after .isoformat ()} " ,
146210 "sort:created-asc" ,
@@ -212,6 +276,20 @@ async def _request(self, request: BaseRequest, response_model: type[ResponseT])
212276
213277 return parsed_response
214278
279+ async def get_repositories (
280+ self ,
281+ request : GetRepositoriesRequest ,
282+ ) -> list [github_models .Repository ]:
283+ result : list [github_models .Repository ] = []
284+ while True :
285+ response = await self ._request (request , GetRepositoriesResponse )
286+ result .extend (response .to_dataclass ())
287+ if not response .search .page_info .has_next_page :
288+ break
289+ request .after = response .search .page_info .end_cursor
290+
291+ return result
292+
215293 async def get_repository_issues (
216294 self ,
217295 request : GetRepositoryIssuesRequest ,
@@ -228,6 +306,7 @@ async def get_repository_pull_requests(
228306
229307
230308__all__ = [
309+ "GetRepositoriesRequest" ,
231310 "GetRepositoryIssuesRequest" ,
232311 "GetRepositoryPRsRequest" ,
233312 "GqlGithubClient" ,
0 commit comments