Skip to content

Commit 4f91ae4

Browse files
authored
report type (shipment, tracker, payment_log, etc) needs to be passed for create/retrieve/all (#56)
* report type (shipment, tracker, payment_log, etc) needs to be passed for create/retrieve/all * [squash] use kwargs instead of positional params * [squash] v3.6.0
1 parent b011d1f commit 4f91ae4

File tree

4 files changed

+23
-81
lines changed

4 files changed

+23
-81
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
* Modernize tests; make tests able to run in parallel; etc.
44
* Clarify in README and `setup.py` the supported Python versions
55

6+
### 3.6.0 2017-04-04
7+
8+
* Changed Report CRUD signatures. requires report type to be passed
9+
610
### 3.5.2 2017-02-14
711

812
* Added `get_rates` method to Order objects

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.5.2
1+
3.6.0

easypost/__init__.py

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -950,19 +950,12 @@ def api_keys(self):
950950

951951
class Report(AllResource, CreateResource):
952952

953-
REPORT_TYPES = {'shprep': 'shipment', 'plrep': 'payment_log', 'trkrep': 'tracker'}
954-
955953
@classmethod
956954
def create(cls, api_key=None, **params):
957955
requestor = Requestor(api_key)
958-
url = cls.class_url()
956+
url = "%s/%s" % (cls.class_url(), params['type'])
959957
wrapped_params = {cls.class_name(): params}
960958

961-
if str(params['type']) in cls.REPORT_TYPES.values():
962-
url += "/%s" % params['type']
963-
else:
964-
raise Exception("Undertermined Report Type")
965-
966959
response, api_key = requestor.request('post', url, wrapped_params, False)
967960
return convert_to_easypost_object(response, api_key)
968961

@@ -973,29 +966,15 @@ def retrieve(cls, easypost_id="", api_key=None, **params):
973966
except (KeyError, TypeError):
974967
pass
975968

976-
url = cls.class_url()
977-
978-
obj_id = easypost_id.split("_")[0]
979-
980-
if obj_id in cls.REPORT_TYPES:
981-
url += "/%s/%s" % (cls.REPORT_TYPES[obj_id], easypost_id)
982-
else:
983-
raise Exception("Undetermined Report Type")
984-
969+
url = "%s/%s/%s" % (cls.class_url(), params['type'], easypost_id)
985970
requestor = Requestor(api_key)
986971
response, api_key = requestor.request('get', url)
987972
return convert_to_easypost_object(response, api_key)
988973

989974
@classmethod
990975
def all(cls, api_key=None, **params):
991976
requestor = Requestor(api_key)
992-
url = cls.class_url()
993-
994-
if str(params['type']) in cls.REPORT_TYPES.values():
995-
url += "/%s" % params['type']
996-
else:
997-
raise Exception("Undertemined Report Type")
998-
977+
url = "%s/%s" % (cls.class_url(), params['type'])
999978
response, api_key = requestor.request('get', url, params)
1000979
return convert_to_easypost_object(response, api_key)
1001980

tests/test_report.py

Lines changed: 15 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,63 +4,22 @@
44

55

66
def test_shipment_report():
7-
report = easypost.Report.create(
8-
start_date="2012-12-01",
9-
end_date="2013-01-01",
10-
type="shipment"
11-
)
7+
def test_shipment_report():
8+
report = easypost.Report.create(
9+
type="shipment",
10+
start_date="2012-12-01",
11+
end_date="2013-01-01",
12+
)
1213

13-
assert report.object == "ShipmentReport"
14-
assert report.status in ("available", "new")
15-
assert report.__class__ == easypost.Report
14+
assert report.object == "ShipmentReport"
15+
assert report.status in ("available", "new")
16+
assert report.__class__ == easypost.Report
1617

17-
report2 = easypost.Report.retrieve(report.id)
18+
report2 = easypost.Report.retrieve(report.id, type="shipment")
1819

19-
assert report2.__class__ == easypost.Report
20-
assert report2.id == report.id
20+
assert report2.__class__ == easypost.Report
21+
assert report2.id == report.id
2122

22-
reports = easypost.Report.all(type="shipment")
23-
assert len(reports["reports"])
24-
assert reports["reports"][0].id == report.id == report2.id
25-
26-
27-
def test_payment_log_report():
28-
report = easypost.Report.create(
29-
start_date="2012-12-01",
30-
end_date="2013-01-01",
31-
type="payment_log"
32-
)
33-
34-
assert report.object == "PaymentLogReport"
35-
assert report.status in ("available", "new")
36-
assert report.__class__ == easypost.Report
37-
38-
report2 = easypost.Report.retrieve(report.id)
39-
40-
assert report2.__class__ == easypost.Report
41-
assert report2.id == report.id
42-
43-
reports = easypost.Report.all(type="payment_log")
44-
assert len(reports["reports"])
45-
assert reports["reports"][0].id == report.id == report2.id
46-
47-
48-
def test_tracker_report():
49-
report = easypost.Report.create(
50-
start_date="2012-12-01",
51-
end_date="2013-01-01",
52-
type="tracker"
53-
)
54-
55-
assert report.object == "TrackerReport"
56-
# assert report.status == "available" # Not yet implemented for tracker reports
57-
assert report.__class__ == easypost.Report
58-
59-
report2 = easypost.Report.retrieve(report.id)
60-
61-
assert report2.__class__ == easypost.Report
62-
assert report2.id == report.id
63-
64-
reports = easypost.Report.all(type="tracker")
65-
assert len(reports["reports"])
66-
assert reports["reports"][0].id == report.id == report2.id
23+
reports = easypost.Report.all(type="shipment")
24+
assert len(reports["reports"])
25+
assert reports["reports"][0].id == report.id == report2.id

0 commit comments

Comments
 (0)