Skip to content

Commit edba7f7

Browse files
committed
added track service v10, updated test
1 parent a8dd4cf commit edba7f7

File tree

4 files changed

+108
-47
lines changed

4 files changed

+108
-47
lines changed

examples/track_shipment.py

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,54 @@
1010
logging.basicConfig(level=logging.INFO)
1111

1212
# NOTE: TRACKING IS VERY ERRATIC ON THE TEST SERVERS. YOU MAY NEED TO USE
13-
# PRODUCTION KEYS/PASSWORDS/ACCOUNT #.
13+
# PRODUCTION KEYS/PASSWORDS/ACCOUNT #. THE TEST SERVERS OFTEN RETURN A NOT FOUND ERROR.
14+
# WHEN TESTING IN PRODUCTION, GIVE SOME TIME FOR THE TRACKING TO PROPAGATE.
15+
16+
1417
# We're using the FedexConfig object from example_config.py in this dir.
15-
track = FedexTrackRequest(CONFIG_OBJ)
16-
track.TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG'
17-
track.TrackPackageIdentifier.Value = '798114182456'
18+
customer_transaction_id = "*** TrackService Request v10 using Python ***" # Optional transaction_id
19+
track = FedexTrackRequest(CONFIG_OBJ, customer_transaction_id=customer_transaction_id)
20+
21+
# Track by Tracking Number
22+
track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG'
23+
track.SelectionDetails.PackageIdentifier.Value = '781820562774'
24+
25+
# FedEx operating company or delete
26+
del track.SelectionDetails.OperatingCompany
27+
28+
# Can optionally set the TrackingNumberUniqueIdentifier
29+
# del track.SelectionDetails.TrackingNumberUniqueIdentifier
30+
31+
# If you'd like to see some documentation on the ship service WSDL, un-comment
32+
# this line. (Spammy).
33+
#print track.client
34+
35+
# Un-comment this to see your complete, ready-to-send request as it stands
36+
# before it is actually sent. This is useful for seeing what values you can
37+
# change.
38+
#print track.SelectionDetails
39+
#print track.ClientDetail
40+
#print track.TransactionDetail
41+
1842

1943
# Fires off the request, sets the 'response' attribute on the object.
2044
track.send_request()
2145

2246
# See the response printed out.
2347
print track.response
48+
#print rate_request.client.last_received()
49+
50+
# See the request printed out.
51+
#print track.client.last_sent()
2452

2553
# Look through the matches (there should only be one for a tracking number
2654
# query), and show a few details about each shipment.
2755
print "== Results =="
28-
for match in track.response.TrackDetails:
56+
#print track.response
57+
for match in track.response.CompletedTrackDetails[0].TrackDetails:
2958
print "Tracking #:", match.TrackingNumber
30-
print "Status:", match.StatusDescription
59+
print "Tracking # UniqueID:", match.TrackingNumberUniqueIdentifier
60+
print "Status:", match.StatusDetail.Description
61+
print "Status AncillaryDetails Reason:", match.StatusDetail.AncillaryDetails[-1].Reason
62+
print "Status AncillaryDetails Description:", match.StatusDetail.AncillaryDetails[-1].ReasonDescription
63+
print "Commit Message:", match.ServiceCommitMessage

fedex/services/track_service.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,16 @@ def __init__(self, config_obj, *args, **kwargs):
4545
# Holds version info for the VersionId SOAP object.
4646
self._version_info = {
4747
'service_id': 'trck',
48-
'major': '5',
48+
'major': '10',
4949
'intermediate': '0',
5050
'minor': '0'
5151
}
52-
self.TrackPackageIdentifier = None
52+
self.SelectionDetails = None
5353
"""@ivar: Holds the TrackPackageIdentifier WSDL object."""
54-
55-
self.TrackingNumberUniqueIdentifier = kwargs.pop('tracking_number_unique_id', None)
56-
57-
"""@ivar: Holds the TrackingNumberUniqueIdentifier WSDL object."""
54+
5855
# Call the parent FedexBaseService class for basic setup work.
5956
super(FedexTrackRequest, self).__init__(
60-
self._config_obj, 'TrackService_v5.wsdl', *args, **kwargs)
57+
self._config_obj, 'TrackService_v10.wsdl', *args, **kwargs)
6158
self.IncludeDetailedScans = False
6259

6360
def _prepare_wsdl_objects(self):
@@ -66,10 +63,21 @@ def _prepare_wsdl_objects(self):
6663
number or a few different things as per the Fedex spec.
6764
"""
6865

69-
self.TrackPackageIdentifier = self.client.factory.create('TrackPackageIdentifier')
66+
self.SelectionDetails = self.client.factory.create('TrackSelectionDetail')
67+
68+
# Default to Fedex
69+
self.SelectionDetails.CarrierCode = 'FDXE'
70+
71+
TrackPackageIdentifier = self.client.factory.create('TrackPackageIdentifier')
72+
7073
# Default to tracking number.
71-
self.TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG'
72-
74+
TrackPackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG'
75+
76+
self.SelectionDetails.PackageIdentifier = TrackPackageIdentifier
77+
78+
# Set Default as None. 'INCLUDE_DETAILED_SCANS' or None
79+
self.TrackRequestProcessingOptionType = None
80+
7381
def _check_response_for_request_errors(self):
7482
"""
7583
Checks the response to see if there were any errors specific to
@@ -99,6 +107,6 @@ def _assemble_and_send_request(self):
99107
ClientDetail=self.ClientDetail,
100108
TransactionDetail=self.TransactionDetail,
101109
Version=self.VersionId,
102-
IncludeDetailedScans=self.IncludeDetailedScans,
103-
PackageIdentifier=self.TrackPackageIdentifier,
104-
TrackingNumberUniqueIdentifier = self.TrackingNumberUniqueIdentifier)
110+
SelectionDetails=self.SelectionDetails,
111+
TrackRequestProcessingOptionType=self.TrackRequestProcessingOptionType)
112+

tests/t_track_service.py

Lines changed: 0 additions & 28 deletions
This file was deleted.

tests/test_track_service.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""
2+
Test module for the Fedex ShipService WSDL.
3+
"""
4+
5+
import unittest
6+
7+
import sys
8+
sys.path.insert(0, '..')
9+
from fedex.services.track_service import FedexTrackRequest
10+
11+
# Common global config object for testing.
12+
from common import get_test_config
13+
CONFIG_OBJ = get_test_config()
14+
15+
16+
class TrackServiceTests(unittest.TestCase):
17+
"""
18+
These tests verify that the shipping service WSDL is in good shape.
19+
"""
20+
def test_track(self):
21+
# Test shipment tracking. Query for a tracking number and make sure the
22+
# first (and hopefully only) result matches up.
23+
24+
tracking_num = '781820562774'
25+
26+
track = FedexTrackRequest(CONFIG_OBJ)
27+
28+
# Track by Tracking Number
29+
track.SelectionDetails.PackageIdentifier.Type = 'TRACKING_NUMBER_OR_DOORTAG'
30+
track.SelectionDetails.PackageIdentifier.Value = tracking_num
31+
32+
# FedEx operating company or delete
33+
del track.SelectionDetails.OperatingCompany
34+
35+
track.send_request()
36+
37+
assert track.response
38+
39+
# Uncomment below if testing in production with a valid tracking number
40+
# for match in track.response.CompletedTrackDetails[0].TrackDetails:
41+
# # This should be the same tracking number on the response that we
42+
# # asked for in the request.
43+
# assert match.TrackingNumber == tracking_num
44+
45+
46+
if __name__ == "__main__":
47+
48+
unittest.main()

0 commit comments

Comments
 (0)