diff --git a/README.md b/README.md
index 800b6ca..6da0a43 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,9 @@ ups = UPSService('CUSTOMER_NUMBER', 'USERNAME', 'PASSWORD')
```
#### Service Helpers
```python
-result = ups.ANY_OPERATIONS(**payload)
+result = ups.create(**payload) # for "Createshipment V7" service
+# or
+result = ups.query(**payload) # for "QueryPackageInfo" service
```
Operartions resturn list of dict as `ResultList[Result]`. ResultList and Result have some helpers like below.
- `Result(dict)`
@@ -71,7 +73,7 @@ Operartions resturn list of dict as `ResultList[Result]`. ResultList and Result
- GetShipmentInfoByTrackingNumber_V1
- [GetShipmentInfoByTrackingNumber_V2](#GetShipmentInfoByTrackingNumber_V2)
- GetTiNTInformationByTrackingNumberList_V1
- - GetTiNTInformationByTrackingNumber_V1
+ - [GetTiNTInformationByTrackingNumber_V1](#GetTiNTInformationByTrackingNumber_V1)
- GetTransactionsByCustomerCode_V1
- GetTransactionsByList_V1
- [GetTransactionsByList_V2](#GetTransactionsByList_V2)
@@ -149,7 +151,7 @@ payload = {
'ReturnLabelImage': True
}
-shipment = ups.CreateShipment_Type2(**payload)
+result = ups.create('CreateShipment_Type2', **payload)
```
##### GetShipmentInfoByTrackingNumber_V2
@@ -158,8 +160,7 @@ payload = {
'InformationLevel': 1,
'TrackingNumber': 'YOUR_TRACKING_NUMBER'
}
-
-result = ups.GetShipmentInfoByTrackingNumber_V2(**payload)
+result = ups.query('GetShipmentInfoByTrackingNumber_V2', **payload)
```
##### GetTransactionsByTrackingNumber_V1
@@ -169,7 +170,7 @@ payload = {
'TrackingNumber': 'YOUR_TRACKING_NUMBER'
}
-result = ups.GetTransactionsByTrackingNumber_V1(**payload)
+result = ups.query('GetTransactionsByTrackingNumber_V1', **payload)
```
##### GetTransactionsByList_V2
@@ -183,5 +184,14 @@ payload = {
'trnType': 'ALL_TRANSACTIONS'
}
-result = ups.GetTransactionsByList_V2(**payload)
+result = ups.query('GetTransactionsByList_V2', **payload)
+```
+
+##### GetTiNTInformationByTrackingNumber_V1
+```python
+payload = {
+ 'InformationLevel': 1,
+ 'TrackingNumber': '1ZE3184E6800393143'
+}
+result = ups.query('GetTiNTInformationByTrackingNumber_V1', **payload)
```
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 61c073d..6267929 100644
--- a/setup.py
+++ b/setup.py
@@ -3,9 +3,11 @@
with open('README.md', 'r') as f:
long_description = f.read()
+version = '0.2.0'
+
setuptools.setup(
name="ups_turkey",
- version="0.1.2",
+ version=version,
author="Efraim GENC",
author_email='info@kavimdigital.com',
description="Easy integration for UPS Turkey",
@@ -15,7 +17,7 @@
long_description=long_description,
long_description_content_type='text/markdown',
url="https://github.com/EfraimGENC/ups-turkey",
- download_url = 'https://github.com/EfraimGENC/ups-turkey/archive/refs/tags/v0.1.2.tar.gz',
+ download_url=f'https://github.com/EfraimGENC/ups-turkey/archive/refs/tags/v{version}.tar.gz',
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
diff --git a/ups_turkey/ups.py b/ups_turkey/ups.py
index 4d01d13..323042b 100644
--- a/ups_turkey/ups.py
+++ b/ups_turkey/ups.py
@@ -1,8 +1,6 @@
-import json
import uuid
import zeep
-from typing import OrderedDict, Tuple
-from collections.abc import Iterable
+from typing import Tuple
from ups_turkey.exceptions import UPSException
from ups_turkey.helpers import to_json
@@ -37,22 +35,26 @@ def json(self):
class UPSService:
base_url = 'https://ws.ups.com.tr'
- wsdl_create = base_url + '/wsCreateShipment/wsCreateShipment.asmx?WSDL'
- wsdl_query = base_url + '/QueryPackageInfo/wsQueryPackagesInfo.asmx?WSDL'
+ wsdl = {
+ 'create': f'{base_url}/wsCreateShipment/wsCreateShipment.asmx?WSDL',
+ 'query': f'{base_url}/QueryPackageInfo/wsQueryPackagesInfo.asmx?WSDL',
+ }
def __init__(self, customer_number, username, password) -> None:
self.customer_number = customer_number
self.username = username
self.password = password
- def call_service(self, service:str, query=False, *args, **kwargs):
- if not service.startswith('Login'):
- kwargs['SessionID'] = self.get_session_id(query)
+ def _call(self, service:str, operation:str, *args, **kwargs):
+ """
+ service: `create` or `query`
+ """
+ if not operation.startswith('Login'):
+ kwargs['SessionID'] = self.get_session_id(service)
- wdsl = self.wsdl_query if query else self.wsdl_create
- client = zeep.Client(wdsl)
+ client = zeep.Client(self.wsdl[service])
- result = getattr(client.service, service)(*args, **kwargs)
+ result = getattr(client.service, operation)(*args, **kwargs)
result = zeep.helpers.serialize_object(result)
result = result if isinstance(result, list) else [result]
@@ -61,158 +63,20 @@ def call_service(self, service:str, query=False, *args, **kwargs):
result_list.append(Result(r))
return result_list
- def login(self, query=False):
+ def create(self, operation:str, *args, **kwargs):
+ return self._call('create', operation, *args, **kwargs)
+
+ def query(self, operation:str, *args, **kwargs):
+ return self._call('query', operation, *args, **kwargs)
+
+ def login(self, service:str) -> Result:
credentials = self.customer_number, self.username, self.password
- if query:
- result = self.call_service('Login_V1', True, *credentials)[0]
- else:
- result = self.call_service('Login_Type1', False, *credentials)[0]
+ login_opertaion = {'create': 'Login_Type1', 'query': 'Login_V1'}
+ result = self._call(service, login_opertaion[service], *credentials)[0]
error = result.get('ErrorCode'), result.get('ErrorDefinition')
if error[0]: raise UPSException(*error)
return result
- def get_session_id(self, query=False):
- result = self.login(query)
+ def get_session_id(self, service:str):
+ result = self.login(service)
return uuid.UUID(result['SessionID'])
-
- # Creation Services #######################################################
-
- def CreateShipment_Type2(self, *args, **kwargs):
- """
- Create shipment with type 2
- """
- return self.call_service(
- 'CreateShipment_Type2', False, *args, **kwargs)
-
- def OnDemandPickupRequest_Type1(self, *args, **kwargs):
- """
- OnDemand Pickup Request Type 1
- """
- return self.call_service(
- 'OnDemandPickupRequest_Type1', False, *args, **kwargs)
-
- def CustomerShipmentLimitDetail(self):
- """
- Customer Shipment LimitDetail
- """
- return self.call_service(
- 'CustomerShipmentLimitDetail', False)
-
- # Query Services ##########################################################
-
- def GetLastTransactionByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method return only the last transaction for a tracking number
- """
- return self.call_service(
- 'GetLastTransactionByTrackingNumber_V1', True, *args, **kwargs)
-
- def GetPackageInfoByDatePeriod_V1(self, *args, **kwargs):
- """
- This method is used to query all of the packages information,
- under an account number, in a given date period. As SessionId
- obtained through Login is specific to a customer account number,
- account number is not needed as a parameter.
- Parameters: `SessionID`, `InformationLevel`, `Startdate`, `EndDate`
- """
- return self.call_service(
- 'GetPackageInfoByDatePeriod_V1', True, *args, **kwargs)
-
- def GetPackageInfoByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method is used to query package information by tracking number.
- Parameters: `SessionID`, `InformationLevel`, `TrackingNumber`
- """
- return self.call_service(
- 'GetPackageInfoByTrackingNumber_V1', True, *args, **kwargs)
-
- def GetShipmentInfoByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method is used to query package information for all tracking
- numbers in a shipment. Any tracking number in a shipment can be sent
- as a parameter.
- """
- return self.call_service(
- 'GetShipmentInfoByTrackingNumber_V1', True, *args, **kwargs)
-
- def GetShipmentInfoByTrackingNumber_V2(self, *args, **kwargs):
- """
- This method is used to query package information for all tracking
- numbers in a shipment. Any tracking number in a shipment can be sent
- as a parameter.
- """
- return self.call_service(
- 'GetShipmentInfoByTrackingNumber_V2', True, *args, **kwargs)
-
- def GetTiNTInformationByTrackingNumberList_V1(self, *args, **kwargs):
- """
- This method used to query time in transit information for a package.
- Pickup date also included in dataset.
- Parameters: `SessionID`, `InformationLevel`,
- `TrackingNumberList[WaybillList[Waybill]]`
- """
- return self.call_service(
- 'GetTiNTInformationByTrackingNumberList_V1', True, *args, **kwargs)
-
- def GetTiNTInformationByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method used to query time in transit information for a package.
- Pickup date also included in dataset.
- Parameters: `SessionID`, `InformationLevel`, `TrackingNumber`
- """
- return self.call_service(
- 'GetTiNTInformationByTrackingNumber_V1', True, *args, **kwargs)
-
- def GetTransactionsByCustomerCode_V1(self, *args, **kwargs):
- """
- Parameters: `SessionID`, `InformationLevel`, `RecordId`
- """
- return self.call_service(
- 'GetTransactionsByCustomerCode_V1', True, *args, **kwargs)
-
- def GetTransactionsByList_V1(self, *args, **kwargs):
- """
- This method returns requested transactions by provided list.
- List can be customer referance number and tracking number.
- Referance type must be set. Results can be set as last transaction,
- all transaction and delivery transaction.
- """
- return self.call_service(
- 'GetTransactionsByList_V1', True, *args, **kwargs)
-
- def GetTransactionsByList_V2(self, *args, **kwargs):
- """
- This method returns requested transactions by provided list.
- List can be customer referance number and tracking number.
- Referance type must be set. Results can be set as last transaction,
- all transaction and delivery transaction.
- """
- return self.call_service(
- 'GetTransactionsByList_V2', True, *args, **kwargs)
-
- def GetTransactionsByPackagePickupDate_V1(self, *args, **kwargs):
- """
- This method is used to query all of the packages transactions,
- under an account number, in a given date period. Results can be set
- as last transaction, all transaction and delivery transaction.
- Parameters: `SessionID`, `InformationLevel`, `StartDate`, `EndDate`,
- `TransactionType`
- """
- return self.call_service(
- 'GetTransactionsByPackagePickupDate_V1', True, *args, **kwargs)
-
- def GetTransactionsByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method return only the last transaction for a tracking number
- """
- return self.call_service(
- 'GetTransactionsByTrackingNumber_V1', True, *args, **kwargs)
-
- def GetUnreadTransactionsByTrackingNumber_V1(self, *args, **kwargs):
- """
- This method return all transactions with RecordIds greater than the
- RecordId supplied as a parameter. RecordIds are returned as part of
- transaction information.
- """
- return self.call_service(
- 'GetUnreadTransactionsByTrackingNumber_V1', True, *args, **kwargs)