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.
Files changed (52) hide show
  1. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/PKG-INFO +34 -17
  2. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/README.md +33 -16
  3. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/pyproject.toml +1 -1
  4. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/__init__.py +1 -1
  5. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/organizations.py +1 -2
  6. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/tickets.py +2 -6
  7. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/config.py +1 -1
  8. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/search.py +9 -27
  9. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_clients.py +0 -1
  10. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_package_import.py +1 -1
  11. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_search_query_config.py +0 -2
  12. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.flake8 +0 -0
  13. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.github/workflows/publish.yml +0 -0
  14. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.gitignore +0 -0
  15. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/.python-version +0 -0
  16. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/LICENSE +0 -0
  17. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/basic_usage.py +0 -0
  18. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/caching.py +0 -0
  19. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/enriched_tickets.py +0 -0
  20. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/error_handling.py +0 -0
  21. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/help_center.py +0 -0
  22. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/pagination_example.py +0 -0
  23. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/examples/search.py +0 -0
  24. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/client.py +0 -0
  25. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/__init__.py +0 -0
  26. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/attachments.py +0 -0
  27. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/base.py +0 -0
  28. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/__init__.py +0 -0
  29. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/articles.py +0 -0
  30. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/categories.py +0 -0
  31. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/help_center/sections.py +0 -0
  32. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/search.py +0 -0
  33. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/clients/users.py +0 -0
  34. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/exceptions.py +0 -0
  35. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/http_client.py +0 -0
  36. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/__init__.py +0 -0
  37. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/base.py +0 -0
  38. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/comment.py +0 -0
  39. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/enriched_ticket.py +0 -0
  40. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/help_center.py +0 -0
  41. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/organization.py +0 -0
  42. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/ticket.py +0 -0
  43. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/models/user.py +0 -0
  44. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/src/zendesk_sdk/pagination.py +0 -0
  45. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/__init__.py +0 -0
  46. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_client.py +0 -0
  47. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_config.py +0 -0
  48. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_exceptions.py +0 -0
  49. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_help_center_client.py +0 -0
  50. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_http_client.py +0 -0
  51. {python_zendesk_sdk-0.3.0 → python_zendesk_sdk-0.3.1}/tests/test_models.py +0 -0
  52. {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.0
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
- ### Built for AI Agents
86
+ ### Developer Experience
66
87
 
67
- When an LLM agent needs to work with Zendesk, it needs:
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
- - **Minimal API calls** — built-in caching reduces redundant requests
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
- - **Async HTTP Client**: Built on httpx with retry logic, rate limiting, and exponential backoff
76
- - **Type Safety**: Full Pydantic v2 models for Users, Organizations, Tickets, Comments, and Help Center
77
- - **Namespace Pattern**: Clean API organization (`client.users`, `client.tickets`, `client.help_center`)
78
- - **Caching**: Built-in TTL-based caching for users, organizations, and Help Center content
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
- - **Pagination**: Both offset-based and cursor-based (export) pagination support
81
- - **Search**: Type-safe SearchQueryConfig + raw query strings, with export methods for stable pagination
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
- ### Built for AI Agents
48
+ ### Developer Experience
28
49
 
29
- When an LLM agent needs to work with Zendesk, it needs:
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
- - **Minimal API calls** — built-in caching reduces redundant requests
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
- - **Async HTTP Client**: Built on httpx with retry logic, rate limiting, and exponential backoff
38
- - **Type Safety**: Full Pydantic v2 models for Users, Organizations, Tickets, Comments, and Help Center
39
- - **Namespace Pattern**: Clean API organization (`client.users`, `client.tickets`, `client.help_center`)
40
- - **Caching**: Built-in TTL-based caching for users, organizations, and Help Center content
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
- - **Pagination**: Both offset-based and cursor-based (export) pagination support
43
- - **Search**: Type-safe SearchQueryConfig + raw query strings, with export methods for stable pagination
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)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-zendesk-sdk"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Modern Python SDK for Zendesk API"
5
5
  authors = [
6
6
  {name = "bormog"}
@@ -5,7 +5,7 @@ This package provides a clean, async-first interface to the Zendesk API
5
5
  with full type safety and comprehensive error handling.
6
6
  """
7
7
 
8
- __version__ = "0.3.0"
8
+ __version__ = "0.3.1"
9
9
 
10
10
  from .client import ZendeskClient
11
11
  from .clients import (
@@ -1,6 +1,6 @@
1
1
  """Organizations API client."""
2
2
 
3
- from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional
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:
@@ -1,7 +1,7 @@
1
1
  """Configuration management for Zendesk SDK."""
2
2
 
3
3
  import os
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from pydantic import BaseModel, Field, computed_field, field_validator
7
7
 
@@ -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
- None, description="Tickets solved after this date"
160
- )
161
- solved_before: Optional[Union[date, datetime, str]] = Field(
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":
@@ -83,7 +83,6 @@ class TestUsersClient:
83
83
 
84
84
  assert result is None
85
85
 
86
-
87
86
  @pytest.mark.asyncio
88
87
  async def test_get_many(self):
89
88
  """Test get multiple users."""
@@ -9,7 +9,7 @@ class TestPackageImport:
9
9
  import zendesk_sdk
10
10
 
11
11
  assert hasattr(zendesk_sdk, "__version__")
12
- assert zendesk_sdk.__version__ == "0.3.0"
12
+ assert zendesk_sdk.__version__ == "0.3.1"
13
13
 
14
14
  def test_client_import(self):
15
15
  """Test importing ZendeskClient."""
@@ -7,8 +7,6 @@ https://support.zendesk.com/hc/en-us/articles/203663226
7
7
 
8
8
  from datetime import date, datetime
9
9
 
10
- import pytest
11
-
12
10
  from zendesk_sdk.models.search import (
13
11
  SearchQueryConfig,
14
12
  SearchType,