@@ -699,29 +699,39 @@ def get_organization(self, org: str) -> Organization:
699
699
)
700
700
701
701
def get_organization_members (self , org : str ) -> Iterable [OrganizationMember ]:
702
- # Collect the members into a list first, so we can show an accurate
703
- # progress meter later.
704
- members = list (self ._http_get_json_paginated (f"/orgs/{ org } /members" ))
705
- for i , member in enumerate (members ):
706
- username : str = member ["login" ]
707
- print_status_stderr (
708
- f"[{ i + 1 } / { len (members )} ] Retrieving membership: { username } " ,
709
- )
710
- membership : Dict [str , Any ] = self ._http_get_json (
711
- f"/orgs/{ org } /memberships/{ username } "
712
- )
702
+ query = """
703
+ query($org: String!) {
704
+ organization(login: $org) {
705
+ membersWithRole(first:100) {
706
+ edges {
707
+ node {
708
+ login
709
+ databaseId
710
+ }
711
+ role
712
+ }
713
+ pageInfo {
714
+ hasNextPage
715
+ }
716
+ }
717
+ }
718
+ }
719
+ """
720
+ variables = { "org" : org }
721
+ response = self ._http_graphql (query , variables )
722
+
723
+ members_with_role = response ['organization' ]['membersWithRole' ]
724
+ # TODO: Support more than 100 team members
725
+ assert (members_with_role ['pageInfo' ]['hasNextPage' ] == False )
726
+
727
+ for edge in members_with_role ['edges' ]:
728
+ node = edge ['node' ]
713
729
yield OrganizationMember (
714
- user_name = username ,
715
- user_id = member [ "id" ],
716
- role = OrganizationRole (membership [ " role" ] ),
730
+ user_name = node [ 'login' ] ,
731
+ user_id = node [ 'databaseId' ],
732
+ role = OrganizationRole (edge [ ' role' ]. lower () ),
717
733
)
718
734
719
- # After the final status update, clear the line again, so the final
720
- # output is not mixed with status updates. (They go separately to stdout
721
- # and stderr anyway, but in a terminal you don’t want interleaved
722
- # output.)
723
- print_status_stderr ("" )
724
-
725
735
def get_organization_teams (self , org : str ) -> Iterable [Team ]:
726
736
teams = self ._http_get_json_paginated (f"/orgs/{ org } /teams" )
727
737
for team in teams :
0 commit comments