@@ -699,29 +699,39 @@ def get_organization(self, org: str) -> Organization:
699699 )
700700
701701 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' ]
713729 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 () ),
717733 )
718734
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-
725735 def get_organization_teams (self , org : str ) -> Iterable [Team ]:
726736 teams = self ._http_get_json_paginated (f"/orgs/{ org } /teams" )
727737 for team in teams :
0 commit comments