Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.http import HttpResponse
- from django.http import JsonResponse
- import logging
- import sys
- import datetime
- from django.forms.models import model_to_dict
- from urllib.error import URLError
- from fedex.config import FedexConfig
- from fedex.services.availability_commitment_service import FedexAvailabilityCommitmentRequest
- from fedex.services.address_validation_service import FedexAddressValidationRequest
- from fedex.services.rate_service import FedexRateServiceRequest
- from fedex.tools.conversion import sobject_to_dict
- from fedex.tools.conversion import sobject_to_json
- from fedex.services.ship_service import FedexProcessShipmentRequest, FedexDeleteShipmentRequest
- from django.forms.models import model_to_dict
- from fedex.services.track_service import FedexTrackRequest
- from fedex.base_service import FedexError, FedexFailure, FedexBaseServiceException
- from fedex.tools.conversion import sobject_to_json
- kitlender_address = {
- 'line1': '350 Mountain Rd',
- 'line2': '2sdadsadssssss',
- 'line3': '3dsads',
- 'line4': 'Stowe',
- 'state': 'VT',
- 'first_name': 'FIRST NAME',
- 'last_name': 'LAST NAME EXTAAAAAACHARSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSs',
- 'company_name': 'Kitlender',
- 'postcode': '05672',
- 'phone_number': '888-473-3111'
- }
- class CourierWrapper(object):
- CONFIG_OBJ = FedexConfig(key='EKB0VPic6IRsXKfl',
- password='Xkc1hTbWGA9dhCS2mTgNREfNR',
- account_number='510087160',
- meter_number='113998879',
- use_test_server=True)
- def add_courier_event(self, event_type, recipient_address):
- if event_type.name == "To Customer":
- return self.add_shipment(kitlender_address, recipient_address)
- if event_type.name == "To Kitlender":
- return self.add_shipment(recipient_address, kitlender_address)
- if event_type.name == "To Customer - Force":
- return self.add_shipment(kitlender_address, recipient_address, force=True)
- def add_shipment(self, s_a, r_a, force=False):
- # rember about UTF8 stuff
- shipment = FedexProcessShipmentRequest(self.CONFIG_OBJ)
- shipment.RequestedShipment.DropoffType = 'REGULAR_PICKUP'
- shipment.RequestedShipment.ServiceType = 'FEDEX_GROUND'
- shipment.RequestedShipment.PackagingType = 'YOUR_PACKAGING'
- # add Contact.CompanyName
- shipment.RequestedShipment.Shipper.Contact.CompanyName = s_a['company_name']
- shipment.RequestedShipment.Shipper.Contact.PersonName = '{} {}'.format(s_a['first_name'], s_a['last_name'])
- shipment.RequestedShipment.Shipper.Contact.PhoneNumber = '123456757'# s_a['phone_number']
- shipment.RequestedShipment.Shipper.Address.StreetLines = '{}, {}'.format(s_a['line1'], s_a['line2'])
- shipment.RequestedShipment.Shipper.Address.City = s_a['line4']
- shipment.RequestedShipment.Shipper.Address.StateOrProvinceCode = s_a['state']
- shipment.RequestedShipment.Shipper.Address.PostalCode = s_a['postcode']
- shipment.RequestedShipment.Shipper.Address.CountryCode = 'US'
- # shipment.RequestedShipment.Shipper.AssociatedShipmentDetail.TrackingId = '794655731416'
- # shipment.RequestedShipment.PackageCount = 2
- shipment.RequestedShipment.Recipient.Contact.CompanyName = 'REALY LONG COMAPNY NAMEEEEEEEEEEEEEEEEEEEEEEEEXXXXXXXXXXXXXXXXXXXXXXXXXEEEEEEEEEEEEXXXXXXXXEEEEEEEEE' # r_a['company_name']
- shipment.RequestedShipment.Recipient.Contact.PersonName = 'LONG PERSON NAMEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEESADSADSADSADSADSADSADSADSA' #'{} {}'.format(r_a['first_name'], r_a['last_name'])
- shipment.RequestedShipment.Recipient.Contact.PhoneNumber = '123456757' #r_a['phone_number']
- shipment.RequestedShipment.Recipient.Address.StreetLines = ['line1_dabFDKULYHSGAFLUDBSLFG DHNFNFNFNFNFNFNFSADSDAGDFSAGFSDGFDSGFDSGFSDGFDSGFDSGFSDGFSDGFDSGFDSGFDSGFDSGFDSGFDSGFDSGFDSGFFDSGFDSG', 'line2dabFDKULYHSGAFLUDBSLFG DHNFNFNFNFNFNFNFSADSDAGDFSAGFSDGFDSGFDSGFSDGFDSGFDSGFSDGFSDGFDSGFDSGFDSGFDSGFDSGFDSGFDSGFDSGFFDSGFDSG']
- shipment.RequestedShipment.Recipient.Address.City = r_a['line4']
- shipment.RequestedShipment.Recipient.Address.StateOrProvinceCode = r_a['state']
- shipment.RequestedShipment.Recipient.Address.PostalCode = r_a['postcode']
- shipment.RequestedShipment.Recipient.Address.CountryCode = 'US'
- shipment.RequestedShipment.EdtRequestType = 'NONE'
- # shipment.RequestedShipment.MasterTrackingId = "794655731416"
- shipment.RequestedShipment.ShippingChargesPayment.Payor.ResponsibleParty.AccountNumber \
- = self.CONFIG_OBJ.account_number
- shipment.RequestedShipment.ShippingChargesPayment.PaymentType = 'SENDER'
- shipment.RequestedShipment.LabelSpecification.LabelFormatType = 'COMMON2D'
- shipment.RequestedShipment.LabelSpecification.ImageType = 'PNG'
- shipment.RequestedShipment.LabelSpecification.LabelStockType = 'PAPER_7X4.75'
- shipment.RequestedShipment.LabelSpecification.LabelPrintingOrientation = 'BOTTOM_EDGE_OF_TEXT_FIRST'
- # Use order if setting multiple labels or delete
- del shipment.RequestedShipment.LabelSpecification.LabelOrder
- # package1_weight = shipment.create_wsdl_object_of_type('Weight')
- # package1_weight.Value = 12.0
- # package1_weight.Units = "LB"
- # package1 = shipment.create_wsdl_object_of_type('RequestedPackageLineItem')
- # package1.PhysicalPackaging = 'ENVELOPE'
- # package1.Weight = package1_weight
- # # customer_reference = shipment.create_wsdl_object_of_type('CustomerReference')
- # # customer_reference.CustomerReferenceType="CUSTOMER_REFERENCE"
- # # customer_reference.Value = "dajesz malina, firmowy samochod"
- # # package1.CustomerReferences.append(customer_reference)
- # print(package1)
- # shipment.add_package(package1)
- # shipment.add_package(package1)
- shipment.RequestedShipment.PackageCount = '2'
- package1 = self.create_package(shipment)
- # package2 = self.create_package(shipment)
- shipment.RequestedShipment.RequestedPackageLineItems.append(package1)
- shipment.RequestedShipment.RequestedPackageLineItems.append(package1)
- # shipment.add_package(package1)
- # shipment.add_package(package2)
- try:
- shipment.send_validation_request()
- shipment.send_request()
- json_response = sobject_to_dict(shipment.response)
- if force is False:
- assert shipment.response.HighestSeverity == 'SUCCESS'
- return (True, json_response)
- except URLError:
- return (False, "Courier service has a problem. Please repeat action")
- except AssertionError:
- error_message = ""
- for message in json_response["Notifications"]:
- error_message += "{}: {}\n".format(message['Severity'], message['Message'])
- return (False, error_message)
- except (FedexError, FedexFailure, FedexBaseServiceException) as e:
- return (False, str(e))
- except Exception as e:
- return (False, str(e))
- #
- # assert shipment.response
- # assert shipment.response.HighestSeverity == 'SUCCESS'
- track_id = shipment.response.CompletedShipmentDetail.CompletedPackageDetails[0].TrackingIds[0].TrackingNumber
- # assert track_id
- # json_response = sobject_to_dict(shipment.response)
- # print(json_response)
- # return json_response
- def address_validation(self, r_a):
- # r_a = kitlender_address
- avs_request = FedexAddressValidationRequest(self.CONFIG_OBJ)
- address1 = avs_request.create_wsdl_object_of_type('AddressToValidate')
- address1.Address.StreetLines = [r_a['line1'], r_a['line2'], r_a['line3']]
- address1.Address.City = r_a['line4']
- address1.Address.StateOrProvinceCode = r_a['state']
- address1.Address.PostalCode = r_a['postcode']
- address1.Address.CountryCode = 'US'
- address1.Address.Residential = False
- avs_request.add_address(address1)
- avs_request.send_request()
- print(avs_request.response)
- assert avs_request.response
- def delete_package(self, tracking_number):
- del_shipment = FedexDeleteShipmentRequest(self.CONFIG_OBJ)
- del_shipment.DeletionControlType = "DELETE_ALL_PACKAGES"
- del_shipment.TrackingId.TrackingNumber = tracking_number
- del_shipment.TrackingId.TrackingIdType = 'EXPRESS'
- try:
- del_shipment.send_request()
- assert del_shipment.response.HighestSeverity == 'SUCCESS'
- print(del_shipment.response)
- return (True, True)
- except URLError:
- return (False, "Courier service has a problem. Please repeat action")
- except AssertionError:
- return (False, "")
- except FedexError as e:
- return (False, str(e))
- def create_package(self, shipment):
- # Create Weight, in pounds.
- package1_weight = shipment.create_wsdl_object_of_type('Weight')
- package1_weight.Value = 1.0
- package1_weight.Units = "LB"
- # Insured Value
- # package1_insure = shipment.create_wsdl_object_of_type('Money')
- # package1_insure.Currency = 'USD'
- # package1_insure.Amount = 1.0
- # Create PackageLineItem
- package1 = shipment.create_wsdl_object_of_type('RequestedPackageLineItem')
- # BAG, BARREL, BASKET, BOX, BUCKET, BUNDLE, CARTON, CASE, CONTAINER, ENVELOPE etc..
- package1.PhysicalPackaging = 'ENVELOPE'
- package1.Weight = package1_weight
- # package1.MasterTrackingId = '794655731416'
- # Add Insured and Total Insured values.
- # package1.InsuredValue = package1_insure
- # shipment.RequestedShipment.TotalInsuredValue = package1_insure
- # Add customer reference
- # customer_reference = shipment.create_wsdl_object_of_type('CustomerReference')
- # customer_reference.CustomerReferenceType="CUSTOMER_REFERENCE"
- # customer_reference.Value = "your customer reference number"
- # package1.CustomerReferences.append(customer_reference)
- # Add department number
- # department_number = shipment.create_wsdl_object_of_type('CustomerReference')
- # department_number.CustomerReferenceType="DEPARTMENT_NUMBER"
- # department_number.Value = "your department number"
- # package1.CustomerReferences.append(department_number)
- # Add invoice number
- # invoice_number = shipment.create_wsdl_object_of_type('CustomerReference')
- # invoice_number.CustomerReferenceType="INVOICE_NUMBER"
- # invoice_number.Value = "your invoice number"
- # package1.CustomerReferences.append(invoice_number)
- # Add a signature option for the package using SpecialServicesRequested or comment out.
- # SpecialServiceTypes can be APPOINTMENT_DELIVERY, COD, DANGEROUS_GOODS, DRY_ICE, SIGNATURE_OPTION etc..
- package1.SpecialServicesRequested.SpecialServiceTypes = 'SIGNATURE_OPTION'
- # SignatureOptionType can be ADULT, DIRECT, INDIRECT, NO_SIGNATURE_REQUIRED, SERVICE_DEFAULT
- package1.SpecialServicesRequested.SignatureOptionDetail.OptionType = 'SERVICE_DEFAULT'
- return package1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement