Skip to content

Commit 4210c20

Browse files
authored
Merge pull request keighl#23 from billinghamj/ctx
Add context support
2 parents cee3ab0 + 169f226 commit 4210c20

21 files changed

+146
-151
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Grab your [`Server Token`](https://account.postmarkapp.com/servers/XXXX/credenti
2323
package main
2424

2525
import (
26+
"context"
27+
2628
"github.com/mrz1836/postmark"
2729
)
2830

@@ -39,7 +41,7 @@ func main() {
3941
TrackOpens: true,
4042
}
4143

42-
_, err := client.SendEmail(email)
44+
_, err := client.SendEmail(context.Background(), email)
4345
if err != nil {
4446
panic(err)
4547
}

bounce.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package postmark
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"net/url"
@@ -27,10 +28,10 @@ type DeliveryStats struct {
2728
}
2829

2930
// GetDeliveryStats returns delivery stats for the server
30-
func (client *Client) GetDeliveryStats() (DeliveryStats, error) {
31+
func (client *Client) GetDeliveryStats(ctx context.Context) (DeliveryStats, error) {
3132
res := DeliveryStats{}
3233
path := "deliverystats"
33-
err := client.doRequest(parameters{
34+
err := client.doRequest(ctx, parameters{
3435
Method: "GET",
3536
Path: path,
3637
TokenType: serverToken,
@@ -78,7 +79,7 @@ type bouncesResponse struct {
7879
// GetBounces returns bounces for the server
7980
// It returns a Bounce slice, the total bounce count, and any error that occurred
8081
// Available options: http://developer.postmarkapp.com/developer-api-bounce.html#bounces
81-
func (client *Client) GetBounces(count int64, offset int64, options map[string]interface{}) ([]Bounce, int64, error) {
82+
func (client *Client) GetBounces(ctx context.Context, count int64, offset int64, options map[string]interface{}) ([]Bounce, int64, error) {
8283
res := bouncesResponse{}
8384

8485
values := &url.Values{}
@@ -91,7 +92,7 @@ func (client *Client) GetBounces(count int64, offset int64, options map[string]i
9192

9293
path := fmt.Sprintf("bounces?%s", values.Encode())
9394

94-
err := client.doRequest(parameters{
95+
err := client.doRequest(ctx, parameters{
9596
Method: "GET",
9697
Path: path,
9798
TokenType: serverToken,
@@ -100,10 +101,10 @@ func (client *Client) GetBounces(count int64, offset int64, options map[string]i
100101
}
101102

102103
// GetBounce fetches a single bounce with bounceID
103-
func (client *Client) GetBounce(bounceID int64) (Bounce, error) {
104+
func (client *Client) GetBounce(ctx context.Context, bounceID int64) (Bounce, error) {
104105
res := Bounce{}
105106
path := fmt.Sprintf("bounces/%v", bounceID)
106-
err := client.doRequest(parameters{
107+
err := client.doRequest(ctx, parameters{
107108
Method: "GET",
108109
Path: path,
109110
TokenType: serverToken,
@@ -116,10 +117,10 @@ type dumpResponse struct {
116117
}
117118

118119
// GetBounceDump fetches a SMTP data dump for a single bounce
119-
func (client *Client) GetBounceDump(bounceID int64) (string, error) {
120+
func (client *Client) GetBounceDump(ctx context.Context, bounceID int64) (string, error) {
120121
res := dumpResponse{}
121122
path := fmt.Sprintf("bounces/%v/dump", bounceID)
122-
err := client.doRequest(parameters{
123+
err := client.doRequest(ctx, parameters{
123124
Method: "GET",
124125
Path: path,
125126
TokenType: serverToken,
@@ -135,10 +136,10 @@ type activateBounceResponse struct {
135136
// ActivateBounce reactivates a bounce for resending. Returns the bounce, a
136137
// message, and any error that occurs
137138
// TODO: clarify this with Postmark
138-
func (client *Client) ActivateBounce(bounceID int64) (Bounce, string, error) {
139+
func (client *Client) ActivateBounce(ctx context.Context, bounceID int64) (Bounce, string, error) {
139140
res := activateBounceResponse{}
140141
path := fmt.Sprintf("bounces/%v/activate", bounceID)
141-
err := client.doRequest(parameters{
142+
err := client.doRequest(ctx, parameters{
142143
Method: "PUT",
143144
Path: path,
144145
TokenType: serverToken,
@@ -151,15 +152,14 @@ type bouncedTagsResponse struct {
151152
}
152153

153154
// GetBouncedTags retrieves a list of tags that have generated bounced emails
154-
func (client *Client) GetBouncedTags() ([]string, error) {
155+
func (client *Client) GetBouncedTags(ctx context.Context) ([]string, error) {
155156
var raw json.RawMessage
156157
path := "bounces/tags"
157-
err := client.doRequest(parameters{
158+
err := client.doRequest(ctx, parameters{
158159
Method: "GET",
159160
Path: path,
160161
TokenType: serverToken,
161162
}, &raw)
162-
163163
if err != nil {
164164
return []string{}, err
165165
}

bounce_test.go

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package postmark
22

33
import (
4+
"context"
45
"net/http"
56
"testing"
67

@@ -51,7 +52,7 @@ func TestGetDeliveryStats(t *testing.T) {
5152
_, _ = w.Write([]byte(responseJSON))
5253
})
5354

54-
res, err := client.GetDeliveryStats()
55+
res, err := client.GetDeliveryStats(context.Background())
5556
if err != nil {
5657
t.Fatalf("GetDeliveryStats: %s", err.Error())
5758
}
@@ -104,10 +105,9 @@ func TestGetBounces(t *testing.T) {
104105
_, _ = w.Write([]byte(responseJSON))
105106
})
106107

107-
_, total, err := client.GetBounces(100, 0, map[string]interface{}{
108+
_, total, err := client.GetBounces(context.Background(), 100, 0, map[string]interface{}{
108109
"tag": "Invitation",
109110
})
110-
111111
if err != nil {
112112
t.Fatalf("GetBounces: %s", err.Error())
113113
}
@@ -140,8 +140,7 @@ func TestGetBounce(t *testing.T) {
140140
_, _ = w.Write([]byte(responseJSON))
141141
})
142142

143-
res, err := client.GetBounce(692560173)
144-
143+
res, err := client.GetBounce(context.Background(), 692560173)
145144
if err != nil {
146145
t.Fatalf("GetBounce: %s", err.Error())
147146
}
@@ -160,8 +159,7 @@ func TestGetBounceDump(t *testing.T) {
160159
_, _ = w.Write([]byte(responseJSON))
161160
})
162161

163-
res, err := client.GetBounceDump(692560173)
164-
162+
res, err := client.GetBounceDump(context.Background(), 692560173)
165163
if err != nil {
166164
t.Fatalf("GetBounceDump: %s", err.Error())
167165
}
@@ -197,8 +195,7 @@ func TestActivateBounce(t *testing.T) {
197195
_, _ = w.Write([]byte(responseJSON))
198196
})
199197

200-
res, mess, err := client.ActivateBounce(692560173)
201-
198+
res, mess, err := client.ActivateBounce(context.Background(), 692560173)
202199
if err != nil {
203200
t.Fatalf("ActivateBounce: %s", err.Error())
204201
}
@@ -222,8 +219,7 @@ func TestGetBouncedTags(t *testing.T) {
222219
_, _ = w.Write([]byte(responseJSON))
223220
})
224221

225-
res, err := client.GetBouncedTags()
226-
222+
res, err := client.GetBouncedTags(context.Background())
227223
if err != nil {
228224
t.Fatalf("GetBouncedTags: %s", err.Error())
229225
}

email.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package postmark
22

33
import (
4+
"context"
45
"fmt"
56
"time"
67
)
@@ -75,9 +76,9 @@ type EmailResponse struct {
7576
}
7677

7778
// SendEmail sends, well, an email.
78-
func (client *Client) SendEmail(email Email) (EmailResponse, error) {
79+
func (client *Client) SendEmail(ctx context.Context, email Email) (EmailResponse, error) {
7980
res := EmailResponse{}
80-
err := client.doRequest(parameters{
81+
err := client.doRequest(ctx, parameters{
8182
Method: "POST",
8283
Path: "email",
8384
Payload: email,
@@ -94,9 +95,9 @@ func (client *Client) SendEmail(email Email) (EmailResponse, error) {
9495
// SendEmailBatch sends multiple emails together
9596
// Note, individual emails in the batch can error, so it would be wise to
9697
// range over the responses and sniff for errors
97-
func (client *Client) SendEmailBatch(emails []Email) ([]EmailResponse, error) {
98+
func (client *Client) SendEmailBatch(ctx context.Context, emails []Email) ([]EmailResponse, error) {
9899
var res []EmailResponse
99-
err := client.doRequest(parameters{
100+
err := client.doRequest(ctx, parameters{
100101
Method: "POST",
101102
Path: "email/batch",
102103
Payload: emails,

email_test.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package postmark
22

33
import (
4+
"context"
45
"net/http"
56
"testing"
67

@@ -52,8 +53,7 @@ func TestSendEmail(t *testing.T) {
5253
})
5354

5455
// Success
55-
res, err := client.SendEmail(testEmail)
56-
56+
res, err := client.SendEmail(context.Background(), testEmail)
5757
if err != nil {
5858
t.Fatalf("SendEmail: %s", err.Error())
5959
}
@@ -71,7 +71,7 @@ func TestSendEmail(t *testing.T) {
7171
"Message": "Sender signature not confirmed"
7272
}`
7373

74-
_, err = client.SendEmail(testEmail)
74+
_, err = client.SendEmail(context.Background(), testEmail)
7575

7676
if err == nil {
7777
t.Fatalf("SendEmail should have failed")
@@ -100,8 +100,7 @@ func TestSendEmailBatch(t *testing.T) {
100100
_, _ = w.Write([]byte(responseJSON))
101101
})
102102

103-
res, err := client.SendEmailBatch([]Email{testEmail, testEmail})
104-
103+
res, err := client.SendEmailBatch(context.Background(), []Email{testEmail, testEmail})
105104
if err != nil {
106105
t.Fatalf("SendEmailBatch: %s", err.Error())
107106
}

examples/examples.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/mrz1836/postmark"
57
)
68

@@ -17,7 +19,7 @@ func main() {
1719
TrackOpens: true,
1820
}
1921

20-
_, err := client.SendEmail(email)
22+
_, err := client.SendEmail(context.Background(), email)
2123
if err != nil {
2224
panic(err)
2325
}

messages_inbound.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package postmark
22

33
import (
4+
"context"
45
"fmt"
56
"net/url"
67
"time"
@@ -57,9 +58,9 @@ func (x InboundMessage) Time() (time.Time, error) {
5758
}
5859

5960
// GetInboundMessage fetches a specific inbound message via serverID
60-
func (client *Client) GetInboundMessage(messageID string) (InboundMessage, error) {
61+
func (client *Client) GetInboundMessage(ctx context.Context, messageID string) (InboundMessage, error) {
6162
res := InboundMessage{}
62-
err := client.doRequest(parameters{
63+
err := client.doRequest(ctx, parameters{
6364
Method: "GET",
6465
Path: fmt.Sprintf("messages/inbound/%s/details", messageID),
6566
TokenType: serverToken,
@@ -75,7 +76,7 @@ type inboundMessagesResponse struct {
7576
// GetInboundMessages fetches a list of inbound message on the server
7677
// It returns a InboundMessage slice, the total message count, and any error that occurred
7778
// http://developer.postmarkapp.com/developer-api-messages.html#inbound-message-search
78-
func (client *Client) GetInboundMessages(count int64, offset int64, options map[string]interface{}) ([]InboundMessage, int64, error) {
79+
func (client *Client) GetInboundMessages(ctx context.Context, count int64, offset int64, options map[string]interface{}) ([]InboundMessage, int64, error) {
7980
res := inboundMessagesResponse{}
8081

8182
values := &url.Values{}
@@ -86,7 +87,7 @@ func (client *Client) GetInboundMessages(count int64, offset int64, options map[
8687
values.Add(k, fmt.Sprintf("%v", v))
8788
}
8889

89-
err := client.doRequest(parameters{
90+
err := client.doRequest(ctx, parameters{
9091
Method: "GET",
9192
Path: fmt.Sprintf("messages/inbound?%s", values.Encode()),
9293
TokenType: serverToken,
@@ -96,9 +97,9 @@ func (client *Client) GetInboundMessages(count int64, offset int64, options map[
9697
}
9798

9899
// BypassInboundMessage - Bypass rules for a blocked inbound message
99-
func (client *Client) BypassInboundMessage(messageID string) error {
100+
func (client *Client) BypassInboundMessage(ctx context.Context, messageID string) error {
100101
res := APIError{}
101-
err := client.doRequest(parameters{
102+
err := client.doRequest(ctx, parameters{
102103
Method: "PUT",
103104
Path: fmt.Sprintf("messages/inbound/%s/bypass", messageID),
104105
TokenType: serverToken,
@@ -112,9 +113,9 @@ func (client *Client) BypassInboundMessage(messageID string) error {
112113
}
113114

114115
// RetryInboundMessage - Retry a failed inbound message for processing
115-
func (client *Client) RetryInboundMessage(messageID string) error {
116+
func (client *Client) RetryInboundMessage(ctx context.Context, messageID string) error {
116117
res := APIError{}
117-
err := client.doRequest(parameters{
118+
err := client.doRequest(ctx, parameters{
118119
Method: "PUT",
119120
Path: fmt.Sprintf("messages/inbound/%s/retry", messageID),
120121
TokenType: serverToken,

0 commit comments

Comments
 (0)