Source code for fedex.services.availability_commitment_service
"""
Service Availability and Commitment Module
This package contains the shipping methods defined by Fedex's
ValidationAvailabilityAndCommitmentService WSDL file. Each is encapsulated in a class for
easy access. For more details on each, refer to the respective class's
documentation.
"""
import datetime
from ..base_service import FedexBaseService
[docs]class FedexAvailabilityCommitmentRequest(FedexBaseService):
"""
This class allows you validate service availability
"""
def __init__(self, config_obj, *args, **kwargs):
"""
@type config_obj: L{FedexConfig}
@param config_obj: A valid FedexConfig object.
"""
self._config_obj = config_obj
# Holds version info for the VersionId SOAP object.
self._version_info = {
'service_id': 'vacs',
'major': '4',
'intermediate': '0',
'minor': '0'
}
self.CarrierCode = None
"""@ivar: Carrier Code Default to Fedex (FDXE), or can bbe FDXG."""
self.Origin = None
"""@ivar: Holds Origin Address WSDL object."""
self.Destination = None
"""@ivar: Holds Destination Address WSDL object."""
self.ShipDate = None
"""@ivar: Ship Date date WSDL object."""
self.Service = None
"""@ivar: Service type, if set to None will get all available service information."""
self.Packaging = None
"""@ivar: Type of packaging to narrow down available shipping options or defaults to YOUR_PACKAGING."""
# Call the parent FedexBaseService class for basic setup work.
# Shortened the name of the wsdl, otherwise suds did not load it properly.
# Suds throws the following error when using the long file name from FedEx:
#
# File "/Library/Python/2.7/site-packages/suds/wsdl.py", line 878, in resolve
# raise Exception("binding '%s', not-found" % p.binding)
# Exception: binding 'ns:ValidationAvailabilityAndCommitmentServiceSoapBinding', not-found
super(FedexAvailabilityCommitmentRequest, self).__init__(
self._config_obj, 'AvailabilityAndCommitmentService_v4.wsdl', *args, **kwargs)
def _prepare_wsdl_objects(self):
"""
Create the data structure and get it ready for the WSDL request.
"""
self.CarrierCode = 'FDXE'
self.Origin = self.client.factory.create('Address')
self.Destination = self.client.factory.create('Address')
self.ShipDate = datetime.date.today().isoformat()
self.Service = None
self.Packaging = 'YOUR_PACKAGING'
def _assemble_and_send_request(self):
"""
Fires off the Fedex request.
@warning: NEVER CALL THIS METHOD DIRECTLY. CALL send_request(),
WHICH RESIDES ON FedexBaseService AND IS INHERITED.
"""
# We get an exception like this when specifying an IntegratorId:
# suds.TypeNotFound: Type not found: 'IntegratorId'
# Setting it to None does not seem to appease it.
del self.ClientDetail.IntegratorId
self.logger.debug(self.WebAuthenticationDetail)
self.logger.debug(self.ClientDetail)
self.logger.debug(self.TransactionDetail)
self.logger.debug(self.VersionId)
# Fire off the query.
return self.client.service.serviceAvailability(
WebAuthenticationDetail=self.WebAuthenticationDetail,
ClientDetail=self.ClientDetail,
TransactionDetail=self.TransactionDetail,
Version=self.VersionId,
Origin=self.Origin,
Destination=self.Destination,
ShipDate=self.ShipDate,
CarrierCode=self.CarrierCode,
Service=self.Service,
Packaging=self.Packaging)