@@ -77,7 +77,11 @@ def convert_to_easypost_object(response, api_key, parent=None, name=None):
77
77
'PickupRate' : PickupRate ,
78
78
'PostageLabel' : PostageLabel ,
79
79
'CarrierAccount' : CarrierAccount ,
80
- 'User' : User
80
+ 'User' : User ,
81
+ 'Report' : Report ,
82
+ 'ShipmentReport' : Report ,
83
+ 'PaymentLogReport' : Report ,
84
+ 'TrackerReport' : Report
81
85
}
82
86
83
87
prefixes = {
@@ -98,7 +102,10 @@ def convert_to_easypost_object(response, api_key, parent=None, name=None):
98
102
'pickuprate' : PickupRate ,
99
103
'pl' : PostageLabel ,
100
104
'ca' : CarrierAccount ,
101
- 'user' : User
105
+ 'user' : User ,
106
+ 'shprep' : Report ,
107
+ 'plrep' : Report ,
108
+ 'trkrep' : Report
102
109
}
103
110
104
111
if isinstance (response , list ):
@@ -453,7 +460,7 @@ def __repr__(self):
453
460
454
461
def __str__ (self ):
455
462
return self .to_json (indent = 2 )
456
-
463
+
457
464
def to_json (self , indent = None ):
458
465
return json .dumps (self .to_dict (), sort_keys = True , indent = indent , cls = EasyPostObjectEncoder )
459
466
@@ -644,9 +651,11 @@ def verify(self, carrier=None):
644
651
class ScanForm (AllResource , CreateResource ):
645
652
pass
646
653
654
+
647
655
class Insurance (AllResource , CreateResource ):
648
656
pass
649
657
658
+
650
659
class CustomsItem (AllResource , CreateResource ):
651
660
pass
652
661
@@ -903,6 +912,58 @@ def api_keys(self):
903
912
return my_api_keys
904
913
905
914
915
+ class Report (AllResource , CreateResource ):
916
+
917
+ REPORT_TYPES = {'shprep' : 'shipment' , 'plrep' : 'payment_log' , 'trkrep' : 'tracker' }
918
+
919
+ @classmethod
920
+ def create (cls , api_key = None , ** params ):
921
+ requestor = Requestor (api_key )
922
+ url = cls .class_url ()
923
+ wrapped_params = {cls .class_name (): params }
924
+
925
+ if str (params ['type' ]) in cls .REPORT_TYPES .values ():
926
+ url += "/%s" % params ['type' ]
927
+ else :
928
+ raise Exception ("Undertermined Report Type" )
929
+
930
+ response , api_key = requestor .request ('post' , url , wrapped_params , False )
931
+ return convert_to_easypost_object (response , api_key )
932
+
933
+ @classmethod
934
+ def retrieve (cls , easypost_id = "" , api_key = None , ** params ):
935
+ try :
936
+ easypost_id = easypost_id ['id' ]
937
+ except (KeyError , TypeError ):
938
+ pass
939
+
940
+ url = cls .class_url ()
941
+
942
+ obj_id = easypost_id .split ("_" )[0 ]
943
+
944
+ if obj_id in cls .REPORT_TYPES :
945
+ url += "/%s/%s" % (cls .REPORT_TYPES [obj_id ], easypost_id )
946
+ else :
947
+ raise Exception ("Undetermined Report Type" )
948
+
949
+ requestor = Requestor (api_key )
950
+ response , api_key = requestor .request ('get' , url )
951
+ return convert_to_easypost_object (response , api_key )
952
+
953
+ @classmethod
954
+ def all (cls , api_key = None , ** params ):
955
+ requestor = Requestor (api_key )
956
+ url = cls .class_url ()
957
+
958
+ if str (params ['type' ]) in cls .REPORT_TYPES .values ():
959
+ url += "/%s" % params ['type' ]
960
+ else :
961
+ raise Exception ("Undertemined Report Type" )
962
+
963
+ response , api_key = requestor .request ('get' , url , params )
964
+ return convert_to_easypost_object (response , api_key )
965
+
966
+
906
967
class Blob (AllResource , CreateResource ):
907
968
@classmethod
908
969
def retrieve (cls , easypost_id , api_key = None , ** params ):
0 commit comments