python-zendesk-sdk 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/PKG-INFO +34 -17
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/README.md +33 -16
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/pyproject.toml +1 -1
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/__init__.py +1 -1
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/organizations.py +1 -2
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/tickets.py +2 -6
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/config.py +1 -1
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/search.py +9 -27
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_clients.py +0 -1
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_package_import.py +1 -1
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_search_query_config.py +0 -2
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.flake8 +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.github/workflows/publish.yml +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.gitignore +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.python-version +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/LICENSE +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/basic_usage.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/caching.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/enriched_tickets.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/error_handling.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/help_center.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/pagination_example.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/search.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/client.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/__init__.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/attachments.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/base.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/__init__.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/articles.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/categories.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/sections.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/search.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/users.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/exceptions.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/http_client.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/__init__.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/base.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/comment.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/enriched_ticket.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/help_center.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/organization.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/ticket.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/user.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/pagination.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/__init__.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_client.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_config.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_exceptions.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_help_center_client.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_http_client.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_models.py +0 -0
- {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_pagination.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-zendesk-sdk
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Modern Python SDK for Zendesk API
|
|
5
5
|
Project-URL: Homepage, https://github.com/bormog/python-zendesk-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/bormog/python-zendesk-sdk
|
|
@@ -48,6 +48,27 @@ Description-Content-Type: text/markdown
|
|
|
48
48
|
|
|
49
49
|
Modern Python SDK for Zendesk API, designed for automation and AI agents.
|
|
50
50
|
|
|
51
|
+
## Table of Contents
|
|
52
|
+
|
|
53
|
+
- [Why This SDK?](#why-this-sdk)
|
|
54
|
+
- [Features](#features)
|
|
55
|
+
- [Installation](#installation)
|
|
56
|
+
- [Quick Start](#quick-start)
|
|
57
|
+
- [Configuration](#configuration)
|
|
58
|
+
- [API Methods](#api-methods)
|
|
59
|
+
- [Users](#users)
|
|
60
|
+
- [Organizations](#organizations)
|
|
61
|
+
- [Tickets](#tickets)
|
|
62
|
+
- [Comments](#comments-nested-under-tickets)
|
|
63
|
+
- [Tags](#tags-nested-under-tickets)
|
|
64
|
+
- [Enriched Tickets](#enriched-tickets)
|
|
65
|
+
- [Attachments](#attachments)
|
|
66
|
+
- [Search](#search)
|
|
67
|
+
- [Help Center](#help-center)
|
|
68
|
+
- [Error Handling](#error-handling)
|
|
69
|
+
- [Caching](#caching)
|
|
70
|
+
- [Examples](#examples)
|
|
71
|
+
|
|
51
72
|
## Why This SDK?
|
|
52
73
|
|
|
53
74
|
Zendesk has a powerful REST API, but using it directly is painful:
|
|
@@ -59,28 +80,27 @@ Zendesk has a powerful REST API, but using it directly is painful:
|
|
|
59
80
|
**This SDK solves these problems** with a clean, typed interface optimized for:
|
|
60
81
|
|
|
61
82
|
- **Support automation** — workflows, triggers, integrations
|
|
62
|
-
- **LLM agents** — Claude Code, Codex, custom AI assistants that need structured Zendesk access
|
|
63
83
|
- **Internal tools** — dashboards, reports, bulk operations
|
|
84
|
+
- **LLM agents** — Claude Code, Codex, custom AI assistants that need structured Zendesk access
|
|
64
85
|
|
|
65
|
-
###
|
|
86
|
+
### Developer Experience
|
|
66
87
|
|
|
67
|
-
|
|
68
|
-
- **Predictable structure** — typed models instead of arbitrary dicts
|
|
88
|
+
- **Predictable structure** — typed Pydantic models instead of arbitrary dicts
|
|
69
89
|
- **Complete context in one call** — `get_enriched()` returns ticket + all comments + all users
|
|
70
|
-
- **
|
|
90
|
+
- **No boilerplate** — pagination, caching, and object loading handled automatically
|
|
91
|
+
- **Minimal API calls** — built-in caching and batching reduce redundant requests
|
|
71
92
|
- **Clear namespaces** — `client.tickets.comments.add()` is self-documenting
|
|
72
93
|
|
|
73
94
|
## Features
|
|
74
95
|
|
|
75
|
-
- **
|
|
76
|
-
- **
|
|
77
|
-
- **
|
|
78
|
-
- **
|
|
96
|
+
- **Type Safety**: Full Pydantic v2 models for all Zendesk entities
|
|
97
|
+
- **Namespace Pattern**: Clean API — `client.users`, `client.tickets`, `client.help_center`
|
|
98
|
+
- **Search**: Raw queries + type-safe SearchQueryConfig, export methods for large datasets
|
|
99
|
+
- **Pagination**: Offset-based and cursor-based (export) with async iterators
|
|
100
|
+
- **Caching**: TTL-based caching for users, organizations, and Help Center
|
|
79
101
|
- **Help Center**: Full CRUD for Categories, Sections, and Articles
|
|
80
|
-
- **
|
|
81
|
-
- **
|
|
82
|
-
- **Human-readable output**: All models have `__str__` methods for easy printing
|
|
83
|
-
- **Configuration**: Flexible configuration with environment variable support
|
|
102
|
+
- **Async HTTP**: Built on httpx with retry logic, rate limiting, exponential backoff
|
|
103
|
+
- **Configuration**: Environment variables or direct instantiation
|
|
84
104
|
|
|
85
105
|
## Installation
|
|
86
106
|
|
|
@@ -150,14 +170,12 @@ user = await client.users.get(user_id) # Get user by ID
|
|
|
150
170
|
paginator = await client.users.list() # List users with pagination
|
|
151
171
|
user = await client.users.by_email(email) # Get user by email
|
|
152
172
|
users = await client.users.get_many([id1, id2]) # Get multiple users
|
|
153
|
-
# For search use client.search.users() - see Search section below
|
|
154
173
|
```
|
|
155
174
|
|
|
156
175
|
### Organizations
|
|
157
176
|
```python
|
|
158
177
|
org = await client.organizations.get(org_id) # Get organization by ID
|
|
159
178
|
paginator = await client.organizations.list() # List organizations
|
|
160
|
-
# For search use client.search.organizations() - see Search section below
|
|
161
179
|
```
|
|
162
180
|
|
|
163
181
|
### Tickets
|
|
@@ -166,7 +184,6 @@ ticket = await client.tickets.get(ticket_id) # Get ticket by ID
|
|
|
166
184
|
paginator = await client.tickets.list() # List tickets
|
|
167
185
|
tickets = await client.tickets.for_user(user_id) # Get user's tickets
|
|
168
186
|
tickets = await client.tickets.for_organization(org_id) # Get org's tickets
|
|
169
|
-
# For search use client.search.tickets() - see Search section below
|
|
170
187
|
```
|
|
171
188
|
|
|
172
189
|
### Comments (nested under tickets)
|
|
@@ -10,6 +10,27 @@
|
|
|
10
10
|
|
|
11
11
|
Modern Python SDK for Zendesk API, designed for automation and AI agents.
|
|
12
12
|
|
|
13
|
+
## Table of Contents
|
|
14
|
+
|
|
15
|
+
- [Why This SDK?](#why-this-sdk)
|
|
16
|
+
- [Features](#features)
|
|
17
|
+
- [Installation](#installation)
|
|
18
|
+
- [Quick Start](#quick-start)
|
|
19
|
+
- [Configuration](#configuration)
|
|
20
|
+
- [API Methods](#api-methods)
|
|
21
|
+
- [Users](#users)
|
|
22
|
+
- [Organizations](#organizations)
|
|
23
|
+
- [Tickets](#tickets)
|
|
24
|
+
- [Comments](#comments-nested-under-tickets)
|
|
25
|
+
- [Tags](#tags-nested-under-tickets)
|
|
26
|
+
- [Enriched Tickets](#enriched-tickets)
|
|
27
|
+
- [Attachments](#attachments)
|
|
28
|
+
- [Search](#search)
|
|
29
|
+
- [Help Center](#help-center)
|
|
30
|
+
- [Error Handling](#error-handling)
|
|
31
|
+
- [Caching](#caching)
|
|
32
|
+
- [Examples](#examples)
|
|
33
|
+
|
|
13
34
|
## Why This SDK?
|
|
14
35
|
|
|
15
36
|
Zendesk has a powerful REST API, but using it directly is painful:
|
|
@@ -21,28 +42,27 @@ Zendesk has a powerful REST API, but using it directly is painful:
|
|
|
21
42
|
**This SDK solves these problems** with a clean, typed interface optimized for:
|
|
22
43
|
|
|
23
44
|
- **Support automation** — workflows, triggers, integrations
|
|
24
|
-
- **LLM agents** — Claude Code, Codex, custom AI assistants that need structured Zendesk access
|
|
25
45
|
- **Internal tools** — dashboards, reports, bulk operations
|
|
46
|
+
- **LLM agents** — Claude Code, Codex, custom AI assistants that need structured Zendesk access
|
|
26
47
|
|
|
27
|
-
###
|
|
48
|
+
### Developer Experience
|
|
28
49
|
|
|
29
|
-
|
|
30
|
-
- **Predictable structure** — typed models instead of arbitrary dicts
|
|
50
|
+
- **Predictable structure** — typed Pydantic models instead of arbitrary dicts
|
|
31
51
|
- **Complete context in one call** — `get_enriched()` returns ticket + all comments + all users
|
|
32
|
-
- **
|
|
52
|
+
- **No boilerplate** — pagination, caching, and object loading handled automatically
|
|
53
|
+
- **Minimal API calls** — built-in caching and batching reduce redundant requests
|
|
33
54
|
- **Clear namespaces** — `client.tickets.comments.add()` is self-documenting
|
|
34
55
|
|
|
35
56
|
## Features
|
|
36
57
|
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
58
|
+
- **Type Safety**: Full Pydantic v2 models for all Zendesk entities
|
|
59
|
+
- **Namespace Pattern**: Clean API — `client.users`, `client.tickets`, `client.help_center`
|
|
60
|
+
- **Search**: Raw queries + type-safe SearchQueryConfig, export methods for large datasets
|
|
61
|
+
- **Pagination**: Offset-based and cursor-based (export) with async iterators
|
|
62
|
+
- **Caching**: TTL-based caching for users, organizations, and Help Center
|
|
41
63
|
- **Help Center**: Full CRUD for Categories, Sections, and Articles
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
- **Human-readable output**: All models have `__str__` methods for easy printing
|
|
45
|
-
- **Configuration**: Flexible configuration with environment variable support
|
|
64
|
+
- **Async HTTP**: Built on httpx with retry logic, rate limiting, exponential backoff
|
|
65
|
+
- **Configuration**: Environment variables or direct instantiation
|
|
46
66
|
|
|
47
67
|
## Installation
|
|
48
68
|
|
|
@@ -112,14 +132,12 @@ user = await client.users.get(user_id) # Get user by ID
|
|
|
112
132
|
paginator = await client.users.list() # List users with pagination
|
|
113
133
|
user = await client.users.by_email(email) # Get user by email
|
|
114
134
|
users = await client.users.get_many([id1, id2]) # Get multiple users
|
|
115
|
-
# For search use client.search.users() - see Search section below
|
|
116
135
|
```
|
|
117
136
|
|
|
118
137
|
### Organizations
|
|
119
138
|
```python
|
|
120
139
|
org = await client.organizations.get(org_id) # Get organization by ID
|
|
121
140
|
paginator = await client.organizations.list() # List organizations
|
|
122
|
-
# For search use client.search.organizations() - see Search section below
|
|
123
141
|
```
|
|
124
142
|
|
|
125
143
|
### Tickets
|
|
@@ -128,7 +146,6 @@ ticket = await client.tickets.get(ticket_id) # Get ticket by ID
|
|
|
128
146
|
paginator = await client.tickets.list() # List tickets
|
|
129
147
|
tickets = await client.tickets.for_user(user_id) # Get user's tickets
|
|
130
148
|
tickets = await client.tickets.for_organization(org_id) # Get org's tickets
|
|
131
|
-
# For search use client.search.tickets() - see Search section below
|
|
132
149
|
```
|
|
133
150
|
|
|
134
151
|
### Comments (nested under tickets)
|
{python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/organizations.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Organizations API client."""
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Callable, Dict,
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Callable, Dict, Optional
|
|
4
4
|
|
|
5
5
|
from ..models import Organization
|
|
6
6
|
from ..pagination import ZendeskPaginator
|
|
@@ -66,4 +66,3 @@ class OrganizationsClient(BaseClient):
|
|
|
66
66
|
Paginator for iterating through all organizations
|
|
67
67
|
"""
|
|
68
68
|
return ZendeskPaginator.create_organizations_paginator(self._http, per_page=per_page)
|
|
69
|
-
|
|
@@ -421,9 +421,7 @@ class TicketsClient(BaseClient):
|
|
|
421
421
|
enriched = [e async for e in client.tickets.search_enriched(config)]
|
|
422
422
|
"""
|
|
423
423
|
full_query = self._resolve_query(query)
|
|
424
|
-
paginator = ZendeskPaginator.create_search_paginator(
|
|
425
|
-
self._http, query=full_query, per_page=per_page
|
|
426
|
-
)
|
|
424
|
+
paginator = ZendeskPaginator.create_search_paginator(self._http, query=full_query, per_page=per_page)
|
|
427
425
|
|
|
428
426
|
count = 0
|
|
429
427
|
async for page_data in self._paginate_enriched(paginator):
|
|
@@ -444,9 +442,7 @@ class TicketsClient(BaseClient):
|
|
|
444
442
|
if limit and count >= limit:
|
|
445
443
|
return
|
|
446
444
|
|
|
447
|
-
async def _paginate_enriched(
|
|
448
|
-
self, paginator: "Paginator[Dict[str, Any]]"
|
|
449
|
-
) -> AsyncIterator[List[Dict[str, Any]]]:
|
|
445
|
+
async def _paginate_enriched(self, paginator: "Paginator[Dict[str, Any]]") -> AsyncIterator[List[Dict[str, Any]]]:
|
|
450
446
|
"""Yield pages of raw ticket data for batch enrichment."""
|
|
451
447
|
while True:
|
|
452
448
|
try:
|
|
@@ -129,15 +129,11 @@ class SearchQueryConfig(BaseModel):
|
|
|
129
129
|
exclude_tags: Optional[List[str]] = Field(None, description="Exclude items with these tags")
|
|
130
130
|
|
|
131
131
|
# === Ticket-specific fields ===
|
|
132
|
-
status: Optional[List[Union[TicketStatus, str]]] = Field(
|
|
133
|
-
None, description="Ticket statuses to search (OR logic)"
|
|
134
|
-
)
|
|
132
|
+
status: Optional[List[Union[TicketStatus, str]]] = Field(None, description="Ticket statuses to search (OR logic)")
|
|
135
133
|
priority: Optional[List[Union[TicketPriority, str]]] = Field(
|
|
136
134
|
None, description="Ticket priorities to search (OR logic)"
|
|
137
135
|
)
|
|
138
|
-
ticket_type: Optional[List[Union[TicketType, str]]] = Field(
|
|
139
|
-
None, description="Ticket types to search (OR logic)"
|
|
140
|
-
)
|
|
136
|
+
ticket_type: Optional[List[Union[TicketType, str]]] = Field(None, description="Ticket types to search (OR logic)")
|
|
141
137
|
organization_id: Optional[int] = Field(None, description="Filter by organization ID")
|
|
142
138
|
requester_id: Optional[Union[int, Literal["me", "none"]]] = Field(
|
|
143
139
|
None, description="Filter by requester ID, 'me', or 'none'"
|
|
@@ -150,32 +146,20 @@ class SearchQueryConfig(BaseModel):
|
|
|
150
146
|
)
|
|
151
147
|
group_id: Optional[int] = Field(None, description="Filter by group ID")
|
|
152
148
|
brand_id: Optional[int] = Field(None, description="Filter by brand ID (Enterprise)")
|
|
153
|
-
via: Optional[List[Union[TicketChannel, str]]] = Field(
|
|
154
|
-
None, description="Filter by channel (OR logic)"
|
|
155
|
-
)
|
|
149
|
+
via: Optional[List[Union[TicketChannel, str]]] = Field(None, description="Filter by channel (OR logic)")
|
|
156
150
|
subject: Optional[str] = Field(None, description="Search in ticket subject")
|
|
157
151
|
description: Optional[str] = Field(None, description="Search in ticket description/comments")
|
|
158
|
-
solved_after: Optional[Union[date, datetime, str]] = Field(
|
|
159
|
-
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
None, description="Tickets solved before this date"
|
|
163
|
-
)
|
|
164
|
-
due_date_after: Optional[Union[date, datetime, str]] = Field(
|
|
165
|
-
None, description="Task tickets due after this date"
|
|
166
|
-
)
|
|
167
|
-
due_date_before: Optional[Union[date, datetime, str]] = Field(
|
|
168
|
-
None, description="Task tickets due before this date"
|
|
169
|
-
)
|
|
152
|
+
solved_after: Optional[Union[date, datetime, str]] = Field(None, description="Tickets solved after this date")
|
|
153
|
+
solved_before: Optional[Union[date, datetime, str]] = Field(None, description="Tickets solved before this date")
|
|
154
|
+
due_date_after: Optional[Union[date, datetime, str]] = Field(None, description="Task tickets due after this date")
|
|
155
|
+
due_date_before: Optional[Union[date, datetime, str]] = Field(None, description="Task tickets due before this date")
|
|
170
156
|
has_attachment: Optional[bool] = Field(None, description="Filter tickets with/without attachments")
|
|
171
157
|
custom_fields: Optional[Dict[int, Any]] = Field(
|
|
172
158
|
None, description="Search by custom field values: {field_id: value}"
|
|
173
159
|
)
|
|
174
160
|
|
|
175
161
|
# === User-specific fields ===
|
|
176
|
-
role: Optional[List[Union[UserRole, str]]] = Field(
|
|
177
|
-
None, description="User roles to search (OR logic)"
|
|
178
|
-
)
|
|
162
|
+
role: Optional[List[Union[UserRole, str]]] = Field(None, description="User roles to search (OR logic)")
|
|
179
163
|
email: Optional[str] = Field(None, description="Search by user email")
|
|
180
164
|
name: Optional[str] = Field(None, description="Search by user/organization name")
|
|
181
165
|
phone: Optional[str] = Field(None, description="Search by user phone number")
|
|
@@ -192,9 +176,7 @@ class SearchQueryConfig(BaseModel):
|
|
|
192
176
|
sort: Optional[SortOrder] = Field(None, description="Sort order (asc, desc)")
|
|
193
177
|
|
|
194
178
|
# === Query limit ===
|
|
195
|
-
raw_query: Optional[str] = Field(
|
|
196
|
-
None, description="Append raw query string for advanced use cases"
|
|
197
|
-
)
|
|
179
|
+
raw_query: Optional[str] = Field(None, description="Append raw query string for advanced use cases")
|
|
198
180
|
|
|
199
181
|
@model_validator(mode="after")
|
|
200
182
|
def validate_type_specific_fields(self) -> "SearchQueryConfig":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/attachments.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/enriched_ticket.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/organization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|