diff --git a/ayon_api/_api.py b/ayon_api/_api.py index 9dbbc05b9..377aaf5e5 100644 --- a/ayon_api/_api.py +++ b/ayon_api/_api.py @@ -706,6 +706,7 @@ def get_server_version_tuple() -> Tuple[int, int, int, str, str]: def get_users( project_name: Optional[str] = None, usernames: Optional[Iterable[str]] = None, + emails: Optional[Iterable[str]] = None, fields: Optional[Iterable[str]] = None, ) -> Generator[Dict[str, Any], None, None]: """Get Users. @@ -716,6 +717,7 @@ def get_users( Args: project_name (Optional[str]): Project name. usernames (Optional[Iterable[str]]): Filter by usernames. + emails (Optional[Iterable[str]]): Filter by emails. fields (Optional[Iterable[str]]): Fields to be queried for users. @@ -727,6 +729,7 @@ def get_users( return con.get_users( project_name=project_name, usernames=usernames, + emails=emails, fields=fields, ) diff --git a/ayon_api/graphql_queries.py b/ayon_api/graphql_queries.py index e6a58ce58..18b76f059 100644 --- a/ayon_api/graphql_queries.py +++ b/ayon_api/graphql_queries.py @@ -619,10 +619,12 @@ def events_graphql_query(fields, order, use_states=False): def users_graphql_query(fields): query = GraphQlQuery("Users") names_var = query.add_variable("userNames", "[String!]") + emails_var = query.add_variable("emails", "[String!]") project_name_var = query.add_variable("projectName", "String!") users_field = query.add_field_with_edges("users") users_field.set_filter("names", names_var) + users_field.set_filter("emails", emails_var) users_field.set_filter("projectName", project_name_var) nested_fields = fields_to_dict(set(fields)) diff --git a/ayon_api/server_api.py b/ayon_api/server_api.py index b1e286549..24967b52e 100644 --- a/ayon_api/server_api.py +++ b/ayon_api/server_api.py @@ -1143,6 +1143,7 @@ def get_users( self, project_name: Optional[str] = None, usernames: Optional[Iterable[str]] = None, + emails: Optional[Iterable[str]] = None, fields: Optional[Iterable[str]] = None, ) -> Generator[Dict[str, Any], None, None]: """Get Users. @@ -1153,6 +1154,7 @@ def get_users( Args: project_name (Optional[str]): Project name. usernames (Optional[Iterable[str]]): Filter by usernames. + emails (Optional[Iterable[str]]): Filter by emails. fields (Optional[Iterable[str]]): Fields to be queried for users. @@ -1167,6 +1169,22 @@ def get_users( return filters["userNames"] = list(usernames) + if emails is not None: + emails = set(emails) + if not emails: + return + + major, minor, patch, _, _ = self.server_version_tuple + emails_filter_available = (major, minor, patch) > (1, 7, 3) + if not emails_filter_available: + server_version = self.get_server_version() + raise ValueError( + "Filtering by emails is not supported by" + f" server version {server_version}." + ) + + filters["emails"] = list(emails) + if project_name is not None: filters["projectName"] = project_name