Skip to content

Commit 5c71930

Browse files
jacalataclaude
andauthored
feat: add email as a filter field for users endpoint (#1789)
feat: document email filter for users endpoint Fixes #1562 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e9f5881 commit 5c71930

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

‎tableauserverclient/server/endpoint/users_endpoint.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,8 @@ def filter(self, *invalid, page_size: int | None = None, **kwargs) -> QuerySet[U
717717
718718
domain_name=...
719719
domain_name__in=...
720+
email=...
721+
email__in=...
720722
friendly_name=...
721723
friendly_name__in=...
722724
is_local=...

‎tableauserverclient/server/request_options.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class Field:
137137
DisplayTabs = "displayTabs"
138138
DomainName = "domainName"
139139
DomainNickname = "domainNickname"
140+
Email = "email"
140141
FavoritesTotal = "favoritesTotal"
141142
Fields = "fields"
142143
FlowId = "flowId"

‎test/test_user.py‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,33 @@ def test_add_idp_and_auth_error(server: TSC.Server) -> None:
541541
server.users.bulk_add(users)
542542

543543

544+
def test_filter_by_email(server: TSC.Server) -> None:
545+
response_xml = GET_XML.read_text()
546+
with requests_mock.mock() as m:
547+
m.get(requests_mock.ANY, text=response_xml)
548+
qs = server.users.filter(email="test@example.com")
549+
550+
# Access total_available to trigger the HTTP request and inspect the query string
551+
assert qs.total_available == 2
552+
assert len(m.request_history) >= 1
553+
first_request_qs = m.request_history[0].qs
554+
assert "filter" in first_request_qs
555+
assert "email:eq:test@example.com" in first_request_qs["filter"]
556+
557+
558+
def test_filter_by_email_in(server: TSC.Server) -> None:
559+
response_xml = GET_XML.read_text()
560+
with requests_mock.mock() as m:
561+
m.get(requests_mock.ANY, text=response_xml)
562+
qs = server.users.filter(email__in=["alice@example.com", "bob@example.com"])
563+
564+
assert qs.total_available == 2
565+
assert len(m.request_history) >= 1
566+
first_request_qs = m.request_history[0].qs
567+
assert "filter" in first_request_qs
568+
assert "email:in:[alice@example.com,bob@example.com]" in first_request_qs["filter"]
569+
570+
544571
def test_remove_users_csv(server: TSC.Server) -> None:
545572
server.version = "3.15"
546573
users = [

0 commit comments

Comments
 (0)