11import logging
2+ from time import strftime , gmtime
3+
24import requests
35
46
@@ -21,10 +23,11 @@ class Squarespace(object):
2123 The version of the Squarespace API to target. If you change this
2224 without making any code changes you may break this library.
2325 """
24- def __init__ (self , api_key , api_baseurl = api_baseurl , api_version = api_version ):
26+ def __init__ (self , api_key , api_baseurl = api_baseurl , api_version = api_version , tracking_baseurl = 'https://tools.usps.com/go/TrackConfirmAction?tLabels=' ):
2527 self .api_key = api_key
2628 self .api_baseurl = api_baseurl
2729 self .api_version = api_version
30+ self .tracking_baseurl = tracking_baseurl
2831
2932 # Setup our HTTP session
3033 self .http = requests .Session ()
@@ -48,6 +51,16 @@ def useragent(self, agent_string):
4851 self ._useragent = agent_string
4952 self .http .headers .update ({'User-Agent' : self ._useragent })
5053
54+ def post (self , path , object ):
55+ """Post an `object` to the Squarespace API.
56+
57+ :object:
58+ A dictionary containing JSON compatible key/value combinations.
59+ """
60+ url = '%s/%s/%s' % (self .api_baseurl , self .api_version , path )
61+ logging .debug ('url:%s object:%s' , url , object )
62+ return self .process_request (self .http .post (url , json = object ))
63+
5164 def get (self , path , args = None ):
5265 """Retrieve an endpoint from the Squarespace API.
5366 """
@@ -56,8 +69,11 @@ def get(self, path, args=None):
5669
5770 url = '%s/%s/%s' % (self .api_baseurl , self .api_version , path )
5871 logging .debug ('url:%s args:%s' , url , args )
59- request = self .http .get (url , params = args )
72+ return self .process_request ( self . http .get (url , params = args ) )
6073
74+ def process_request (self , request ):
75+ """Process a request and return the data.
76+ """
6177 if request .status_code in [200 , 201 ]:
6278 return request .json ()
6379 elif request .status_code == 204 :
@@ -113,3 +129,31 @@ def all_orders(self):
113129
114130 return orders
115131
132+ def fulfill (self , order_id , tracking_number , carrier_name , service_name , tracking_baseurl = None ):
133+ """Mark an order as shipped.
134+
135+ :param tracking_number:
136+ The shipping carrier's tracking number.
137+ :param carrier_name:
138+ The name of the shipping carrier, EG 'USPS'.
139+ :param service_name:
140+ The shipping service used, EG "First Class Package"
141+ """
142+ if not tracking_baseurl :
143+ tracking_baseurl = self .tracking_baseurl
144+
145+ uri = 'orders/%s/fulfillments' % order_id
146+ fulfillment = {
147+ "shouldSendNotification" : True ,
148+ "shipments" : [
149+ {
150+ 'shipDate' : strftime ('%Y-%m-%dT%H:%M:%SZ' , gmtime ()),
151+ "carrierName" : carrier_name ,
152+ "service" : service_name ,
153+ "trackingNumber" : tracking_number ,
154+ "trackingUrl" : tracking_baseurl + tracking_number
155+ }
156+ ]
157+ }
158+
159+ return self .post (uri , fulfillment )
0 commit comments