Skip to content

Commit

Permalink
Merge pull request keighl#23 from billinghamj/ctx
Browse files Browse the repository at this point in the history
Add context support
  • Loading branch information
mergify[bot] authored Oct 27, 2022
2 parents cee3ab0 + 169f226 commit 4210c20
Show file tree
Hide file tree
Showing 21 changed files with 146 additions and 151 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ Grab your [`Server Token`](https://account.postmarkapp.com/servers/XXXX/credenti
package main

import (
"context"

"github.com/mrz1836/postmark"
)

Expand All @@ -39,7 +41,7 @@ func main() {
TrackOpens: true,
}

_, err := client.SendEmail(email)
_, err := client.SendEmail(context.Background(), email)
if err != nil {
panic(err)
}
Expand Down
26 changes: 13 additions & 13 deletions bounce.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postmark

import (
"context"
"encoding/json"
"fmt"
"net/url"
Expand All @@ -27,10 +28,10 @@ type DeliveryStats struct {
}

// GetDeliveryStats returns delivery stats for the server
func (client *Client) GetDeliveryStats() (DeliveryStats, error) {
func (client *Client) GetDeliveryStats(ctx context.Context) (DeliveryStats, error) {
res := DeliveryStats{}
path := "deliverystats"
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "GET",
Path: path,
TokenType: serverToken,
Expand Down Expand Up @@ -78,7 +79,7 @@ type bouncesResponse struct {
// GetBounces returns bounces for the server
// It returns a Bounce slice, the total bounce count, and any error that occurred
// Available options: http://developer.postmarkapp.com/developer-api-bounce.html#bounces
func (client *Client) GetBounces(count int64, offset int64, options map[string]interface{}) ([]Bounce, int64, error) {
func (client *Client) GetBounces(ctx context.Context, count int64, offset int64, options map[string]interface{}) ([]Bounce, int64, error) {
res := bouncesResponse{}

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

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

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

// GetBounce fetches a single bounce with bounceID
func (client *Client) GetBounce(bounceID int64) (Bounce, error) {
func (client *Client) GetBounce(ctx context.Context, bounceID int64) (Bounce, error) {
res := Bounce{}
path := fmt.Sprintf("bounces/%v", bounceID)
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "GET",
Path: path,
TokenType: serverToken,
Expand All @@ -116,10 +117,10 @@ type dumpResponse struct {
}

// GetBounceDump fetches a SMTP data dump for a single bounce
func (client *Client) GetBounceDump(bounceID int64) (string, error) {
func (client *Client) GetBounceDump(ctx context.Context, bounceID int64) (string, error) {
res := dumpResponse{}
path := fmt.Sprintf("bounces/%v/dump", bounceID)
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "GET",
Path: path,
TokenType: serverToken,
Expand All @@ -135,10 +136,10 @@ type activateBounceResponse struct {
// ActivateBounce reactivates a bounce for resending. Returns the bounce, a
// message, and any error that occurs
// TODO: clarify this with Postmark
func (client *Client) ActivateBounce(bounceID int64) (Bounce, string, error) {
func (client *Client) ActivateBounce(ctx context.Context, bounceID int64) (Bounce, string, error) {
res := activateBounceResponse{}
path := fmt.Sprintf("bounces/%v/activate", bounceID)
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "PUT",
Path: path,
TokenType: serverToken,
Expand All @@ -151,15 +152,14 @@ type bouncedTagsResponse struct {
}

// GetBouncedTags retrieves a list of tags that have generated bounced emails
func (client *Client) GetBouncedTags() ([]string, error) {
func (client *Client) GetBouncedTags(ctx context.Context) ([]string, error) {
var raw json.RawMessage
path := "bounces/tags"
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "GET",
Path: path,
TokenType: serverToken,
}, &raw)

if err != nil {
return []string{}, err
}
Expand Down
18 changes: 7 additions & 11 deletions bounce_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postmark

import (
"context"
"net/http"
"testing"

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

res, err := client.GetDeliveryStats()
res, err := client.GetDeliveryStats(context.Background())
if err != nil {
t.Fatalf("GetDeliveryStats: %s", err.Error())
}
Expand Down Expand Up @@ -104,10 +105,9 @@ func TestGetBounces(t *testing.T) {
_, _ = w.Write([]byte(responseJSON))
})

_, total, err := client.GetBounces(100, 0, map[string]interface{}{
_, total, err := client.GetBounces(context.Background(), 100, 0, map[string]interface{}{
"tag": "Invitation",
})

if err != nil {
t.Fatalf("GetBounces: %s", err.Error())
}
Expand Down Expand Up @@ -140,8 +140,7 @@ func TestGetBounce(t *testing.T) {
_, _ = w.Write([]byte(responseJSON))
})

res, err := client.GetBounce(692560173)

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

res, err := client.GetBounceDump(692560173)

res, err := client.GetBounceDump(context.Background(), 692560173)
if err != nil {
t.Fatalf("GetBounceDump: %s", err.Error())
}
Expand Down Expand Up @@ -197,8 +195,7 @@ func TestActivateBounce(t *testing.T) {
_, _ = w.Write([]byte(responseJSON))
})

res, mess, err := client.ActivateBounce(692560173)

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

res, err := client.GetBouncedTags()

res, err := client.GetBouncedTags(context.Background())
if err != nil {
t.Fatalf("GetBouncedTags: %s", err.Error())
}
Expand Down
9 changes: 5 additions & 4 deletions email.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postmark

import (
"context"
"fmt"
"time"
)
Expand Down Expand Up @@ -75,9 +76,9 @@ type EmailResponse struct {
}

// SendEmail sends, well, an email.
func (client *Client) SendEmail(email Email) (EmailResponse, error) {
func (client *Client) SendEmail(ctx context.Context, email Email) (EmailResponse, error) {
res := EmailResponse{}
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "POST",
Path: "email",
Payload: email,
Expand All @@ -94,9 +95,9 @@ func (client *Client) SendEmail(email Email) (EmailResponse, error) {
// SendEmailBatch sends multiple emails together
// Note, individual emails in the batch can error, so it would be wise to
// range over the responses and sniff for errors
func (client *Client) SendEmailBatch(emails []Email) ([]EmailResponse, error) {
func (client *Client) SendEmailBatch(ctx context.Context, emails []Email) ([]EmailResponse, error) {
var res []EmailResponse
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "POST",
Path: "email/batch",
Payload: emails,
Expand Down
9 changes: 4 additions & 5 deletions email_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postmark

import (
"context"
"net/http"
"testing"

Expand Down Expand Up @@ -52,8 +53,7 @@ func TestSendEmail(t *testing.T) {
})

// Success
res, err := client.SendEmail(testEmail)

res, err := client.SendEmail(context.Background(), testEmail)
if err != nil {
t.Fatalf("SendEmail: %s", err.Error())
}
Expand All @@ -71,7 +71,7 @@ func TestSendEmail(t *testing.T) {
"Message": "Sender signature not confirmed"
}`

_, err = client.SendEmail(testEmail)
_, err = client.SendEmail(context.Background(), testEmail)

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

res, err := client.SendEmailBatch([]Email{testEmail, testEmail})

res, err := client.SendEmailBatch(context.Background(), []Email{testEmail, testEmail})
if err != nil {
t.Fatalf("SendEmailBatch: %s", err.Error())
}
Expand Down
4 changes: 3 additions & 1 deletion examples/examples.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package main

import (
"context"

"github.com/mrz1836/postmark"
)

Expand All @@ -17,7 +19,7 @@ func main() {
TrackOpens: true,
}

_, err := client.SendEmail(email)
_, err := client.SendEmail(context.Background(), email)
if err != nil {
panic(err)
}
Expand Down
17 changes: 9 additions & 8 deletions messages_inbound.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package postmark

import (
"context"
"fmt"
"net/url"
"time"
Expand Down Expand Up @@ -57,9 +58,9 @@ func (x InboundMessage) Time() (time.Time, error) {
}

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

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

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

// BypassInboundMessage - Bypass rules for a blocked inbound message
func (client *Client) BypassInboundMessage(messageID string) error {
func (client *Client) BypassInboundMessage(ctx context.Context, messageID string) error {
res := APIError{}
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "PUT",
Path: fmt.Sprintf("messages/inbound/%s/bypass", messageID),
TokenType: serverToken,
Expand All @@ -112,9 +113,9 @@ func (client *Client) BypassInboundMessage(messageID string) error {
}

// RetryInboundMessage - Retry a failed inbound message for processing
func (client *Client) RetryInboundMessage(messageID string) error {
func (client *Client) RetryInboundMessage(ctx context.Context, messageID string) error {
res := APIError{}
err := client.doRequest(parameters{
err := client.doRequest(ctx, parameters{
Method: "PUT",
Path: fmt.Sprintf("messages/inbound/%s/retry", messageID),
TokenType: serverToken,
Expand Down
Loading

0 comments on commit 4210c20

Please sign in to comment.