Skip to content

Commit e4d7257

Browse files
committed
separate client init & refactor to reflect js SDK
1 parent 751a9f4 commit e4d7257

10 files changed

Lines changed: 289 additions & 491 deletions

File tree

README.md

Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import asyncio
2222
import postmark
2323

2424
async def get_messages():
25-
server_token = "your-server-token"
25+
# Initialize the client
26+
server = postmark.ServerClient(server_token="your-server-token")
2627

2728
# Search for messages
28-
messages, total = await postmark.messages.Outbound.find(
29-
server_token=server_token,
29+
messages, total = await server.messages.Outbound.find(
3030
recipient="user@example.com",
3131
fromdate="2024-01-01"
3232
)
@@ -53,7 +53,8 @@ import os
5353
from dotenv import load_dotenv
5454

5555
load_dotenv()
56-
server_token = os.getenv("POSTMARK_SERVER_TOKEN")
56+
token = os.getenv("POSTMARK_SERVER_TOKEN")
57+
server = postmark.ServerClient(server_token=token)
5758
```
5859

5960
## Usage Examples
@@ -65,11 +66,10 @@ import asyncio
6566
import postmark
6667

6768
async def search_messages():
68-
server_token = "your-server-token"
69+
server = postmark.ServerClient(server_token="your-server-token")
6970

7071
# Search with filters
71-
messages, total = await postmark.messages.Outbound.find(
72-
server_token=server_token,
72+
messages, total = await server.messages.Outbound.find(
7373
count=50,
7474
recipient="user@example.com",
7575
tag="onboarding",
@@ -88,13 +88,10 @@ asyncio.run(search_messages())
8888

8989
```python
9090
async def get_message_details():
91-
server_token = "your-server-token"
91+
server = postmark.ServerClient(server_token="your-server-token")
9292
message_id = "your-message-id"
9393

94-
message = await postmark.messages.Outbound.find_by_id(
95-
message_id=message_id,
96-
server_token=server_token
97-
)
94+
message = await server.messages.Outbound.get(message_id=message_id)
9895

9996
print(f"Subject: {message.subject}")
10097
print(f"From: {message.from_}")
@@ -107,11 +104,10 @@ asyncio.run(get_message_details())
107104

108105
```python
109106
async def get_all_messages():
110-
server_token = "your-server-token"
107+
server = postmark.ServerClient(server_token="your-server-token")
111108

112109
# Automatically handles pagination to retrieve up to 1000 messages
113-
all_messages = await postmark.messages.Outbound.find_all(
114-
server_token=server_token,
110+
all_messages = await server.messages.Outbound.find_all(
115111
max_messages=1000,
116112
tag="onboarding"
117113
)
@@ -136,9 +132,10 @@ from postmark.exceptions import (
136132
)
137133

138134
async def safe_message_search():
135+
server = postmark.ServerClient(server_token="your-server-token")
136+
139137
try:
140-
messages, total = await postmark.messages.Outbound.find(
141-
server_token="your-token",
138+
messages, total = await server.messages.Outbound.find(
142139
recipient="user@example.com"
143140
)
144141
print(f"Found {total} messages")
@@ -160,6 +157,7 @@ async def safe_message_search():
160157
print(f"General Postmark error: {e}")
161158

162159
asyncio.run(safe_message_search())
160+
163161
```
164162

165163
### Exception Types
@@ -199,13 +197,13 @@ logging.getLogger('postmark').setLevel(logging.DEBUG)
199197

200198
## API Reference
201199

202-
### Messages API
200+
### Outbound Messages API
201+
Access via `Access via server.messages.Outbound`
203202

204203
#### `Outbound.find()`
205204
Search for outbound messages with various filters.
206205

207206
**Parameters:**
208-
- `server_token` (str): Your Postmark server token
209207
- `count` (int): Number of messages to return (max 500, default 100)
210208
- `offset` (int): Number of messages to skip (default 0)
211209
- `recipient` (str): Filter by recipient email
@@ -219,20 +217,18 @@ Search for outbound messages with various filters.
219217

220218
**Returns:** Tuple of (list of messages, total count)
221219

222-
#### `Outbound.find_by_id()`
220+
#### `Outbound.get()`
223221
Get detailed information about a specific message.
224222

225223
**Parameters:**
226224
- `message_id` (str): The message ID to retrieve
227-
- `server_token` (str): Your Postmark server token
228225

229226
**Returns:** `OutboundMessageDetails` object with full message content
230227

231228
#### `Outbound.find_all()`
232229
Retrieve all messages matching filters with automatic pagination.
233230

234231
**Parameters:**
235-
- `server_token` (str): Your Postmark server token
236232
- `max_messages` (int): Maximum messages to retrieve (up to 10,000, default 1000)
237233
- `**filters`: Same filter parameters as `find()` method
238234

@@ -248,7 +244,7 @@ Retrieve all messages matching filters with automatic pagination.
248244

249245
```bash
250246
# Clone the repository
251-
git clone https://github.com/ActiveCampaign/postmark-python.git
247+
git clone [https://github.com/ActiveCampaign/postmark-python.git](https://github.com/ActiveCampaign/postmark-python.git)
252248
cd postmark-python
253249

254250
# Install dependencies
@@ -264,28 +260,6 @@ poetry run pytest --cov=postmark --cov-report=term-missing
264260
poetry run python examples/get_messages.py
265261
```
266262

267-
### Project Structure
268-
269-
```
270-
postmark-python/
271-
├── postmark/
272-
│ ├── __init__.py
273-
│ ├── exceptions.py # Custom exception classes
274-
│ ├── models/
275-
│ │ ├── __init__.py
276-
│ │ ├── client.py # HTTP client with error handling
277-
│ │ └── messages.py # Message models and API methods
278-
│ └── tests/ # Test suite
279-
│ ├── test_client.py
280-
│ └── test_messages.py
281-
├── examples/
282-
│ └── get_messages.py # Usage examples
283-
├── README.md
284-
├── LICENSE
285-
├── pytest.ini # Pytest configuration
286-
└── pyproject.toml # Project dependencies and configuration
287-
```
288-
289263
### Running Tests
290264

291265
```bash

examples/get_messages.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,18 @@
33
from dotenv import load_dotenv #
44
import postmark
55

6-
76
# Load the variables from the .env file into os.environ
87
load_dotenv()
98

109

1110
async def find():
1211
server_token: str = os.getenv("POSTMARK_SERVER_TOKEN")
1312

13+
server = postmark.ServerClient(server_token=server_token)
14+
1415
try:
15-
messages, total = await postmark.messages.Outbound.find(
16-
server_token=server_token
17-
)
18-
print(messages)
16+
messages, total = await server.messages.Outbound.find()
17+
1918
print(f"Found {total} messages, retrieved {len(messages)} messages.")
2019
if messages:
2120
for msg in messages[:3]:
@@ -33,8 +32,10 @@ async def find():
3332
async def find_all():
3433
server_token: str = os.getenv("POSTMARK_SERVER_TOKEN")
3534

35+
server = postmark.ServerClient(server_token=server_token)
36+
3637
try:
37-
messages = await postmark.messages.Outbound.find_all(server_token=server_token)
38+
messages = await server.messages.Outbound.find_all()
3839
print(f"Found messages, retrieved {len(messages)} messages.")
3940
if messages:
4041
for msg in messages[:3]:

postmark/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
)
1818

1919
# Import modules
20-
from .models import client, messages
20+
from .clients.server_client import ServerClient
21+
from .models import messages
22+
from .utils import server_utils
2123

2224
__all__ = [
23-
"client",
25+
"ServerClient",
2426
"messages",
2527
"PostmarkException",
2628
"PostmarkAPIException",
@@ -30,4 +32,5 @@
3032
"RateLimitException",
3133
"ServerException",
3234
"TimeoutException",
35+
"server_utils",
3336
]

postmark/clients/account_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pass

postmark/models/client.py

Lines changed: 0 additions & 121 deletions
This file was deleted.

0 commit comments

Comments
 (0)