1+ """
2+ Address Validation Service Module
3+ =================================
4+ This package contains the shipping methods defined by Fedex's
5+ AddressValidationService WSDL file. Each is encapsulated in a class for
6+ easy access. For more details on each, refer to the respective class's
7+ documentation.
8+ """
9+ from datetime import datetime
10+ from .. base_service import FedexBaseService
11+
12+ class FedexAddressValidationRequest (FedexBaseService ):
13+ """
14+ This class allows you validate anywhere from one to a hundred addresses
15+ in one go. Create AddressToValidate WSDL objects and add them to each
16+ instance of this request using add_address().
17+ """
18+ def __init__ (self , config_obj , * args , ** kwargs ):
19+ """
20+ @type config_obj: L{FedexConfig}
21+ @param config_obj: A valid FedexConfig object.
22+ """
23+ self ._config_obj = config_obj
24+
25+ # Holds version info for the VersionId SOAP object.
26+ self ._version_info = {'service_id' : 'ship' , 'major' : '2' ,
27+ 'intermediate' : '0' , 'minor' : '0' }
28+
29+ self .AddressValidationOptions = None
30+ """@ivar: Holds the AddressValidationOptions WSDL object."""
31+ self .addresses_to_validate = []
32+ """@ivar: Holds the AddressToValidate WSDL object."""
33+ # Call the parent FedexBaseService class for basic setup work.
34+ super (FedexAddressValidationRequest , self ).__init__ (self ._config_obj ,
35+ 'AddressValidationService_v2.wsdl' ,
36+ * args , ** kwargs )
37+
38+ def _prepare_wsdl_objects (self ):
39+ """
40+ Create the data structure and get it ready for the WSDL request.
41+ """
42+ # This holds some optional options for the request..
43+ self .AddressValidationOptions = self .client .factory .create ('AddressValidationOptions' )
44+
45+ # This is good to review if you'd like to see what the data structure
46+ # looks like.
47+ self .logger .debug (self .AddressValidationOptions )
48+
49+ def _assemble_and_send_request (self ):
50+ """
51+ Fires off the Fedex request.
52+
53+ @warning: NEVER CALL THIS METHOD DIRECTLY. CALL send_request(),
54+ WHICH RESIDES ON FedexBaseService AND IS INHERITED.
55+ """
56+ # We get an exception like this when specifying an IntegratorId:
57+ # suds.TypeNotFound: Type not found: 'IntegratorId'
58+ # Setting it to None does not seem to appease it.
59+ del self .ClientDetail .IntegratorId
60+ self .logger .debug (self .WebAuthenticationDetail )
61+ self .logger .debug (self .ClientDetail )
62+ self .logger .debug (self .TransactionDetail )
63+ self .logger .debug (self .VersionId )
64+ # Fire off the query.
65+ response = self .client .service .addressValidation (WebAuthenticationDetail = self .WebAuthenticationDetail ,
66+ ClientDetail = self .ClientDetail ,
67+ TransactionDetail = self .TransactionDetail ,
68+ Version = self .VersionId ,
69+ RequestTimestamp = datetime .now (),
70+ Options = self .AddressValidationOptions ,
71+ AddressToValidate = self .addresses_to_validate )
72+ return response
73+
74+ def add_address (self , address_item ):
75+ """
76+ Adds an address to self.addresses_to_validate.
77+
78+ @type address_item: WSDL object, type of AddressToValidate WSDL object.
79+ @keyword address_item: A AddressToValidate, created by
80+ calling create_wsdl_object_of_type('AddressToValidate') on
81+ this FedexAddressValidationRequest object.
82+ See examples/create_shipment.py for more details.
83+ """
84+ self .addresses_to_validate .append (address_item )
0 commit comments