.Net Framework
Sample Code A75
using TSS.TrackWizz.SDK.RiskRating.Models;
using TSS.TrackWizz.SDK.RiskRating.Models.A75;
using TSS.TrackWizz.SDK.RiskRating.Models.A75.ClientModel;
using TSS.TrackWizz.SDK.RiskRating.WebClients.APIWebClients;
namespace A75SampleApp
{
public partial class SampleCode
{
private void SendRequestButton_Click()
{
A75RequestData requestDataModel = GenerateRequestModel();//request Model
var publicKey = File.ReadAllBytes(publicKeyText.Text);//public key file path
var privateKey = File.ReadAllBytes(requestPrivatekey.Text);//private key file path
var url = requestUrlText.Text;//API URL
var password = txtPrivateKeyPassword.Text; // private key password
A75ClientRequestModel a75ClientRequestModel = new A75ClientRequestModel(tokenText.Text, privateKey, publicKey, requestDataModel,
txtPrivateKeyPassword.Text, url);
A75ClientResponseModel response = new A75WebClient().Execute(a75ClientRequestModel);
}
private A75RequestData GenerateRequestModel()
{
A75RequestData requestDataModel = new A75RequestData();
//Fill the request model properties as per the the Document
return requestDataModel;
}
}
}
Python
Python Version- 3.8.5
import uuid
from lxml import etree
import asyncio
from dicttoxml import dicttoxml
import uuid
from RiskRating.WebClients.APIWebClients import A75WebClient
from RiskRating.Models import A75ClientRequestModel
from RiskRating.Models import A75RiskRatingRequestData,
SegmentDetail,PEPClassificationDetail,AdverseMediaClassificationDetail,CountryDetail,RiskDetail,NatureOfBusinessDeta il,ProductSegmentDetail,ReputationClassificationDetail,RegAMLSpecialCategoryDetail,TagDetail
from RiskRating.Utils import RequestApiUtil
def creatingValidXMLFromModel(requestDataModel: A75RiskRatingRequestData):
# This tags will be class tags
parentTags = ["Segments",
"SpecificRisk",
"Citizenship",
"AdverseMediaClassification",
"PEPClassification",
"Nationality",
"RegAMLSpecialCategoryDetails",
"Tags",
"NatureOfBusiness",
"ProductSegments",
'ReputationClassification',
'CountryofOperation'
]
# Make a dictonary of class tag and its child tag
parentTagsDict = {
"Segments": "SegmentDetail",
"SpecificRisk": "RiskDetail",
"Citizenship":"CountryDetail",
"AdverseMediaClassification": "AdverseMediaClassificationDetail",
"PEPClassification":"PEPClassificationDetail",
"Tags":"TagDetail",
"RegAMLSpecialCategoryDetails":"RegAMLSpecialCategoryDetail",
"Nationality":"CountryDetail",
"NatureOfBusiness": "NatureOfBusinessDetail",
"ProductSegments": "ProductSegmentDetail",
"ReputationClassification": "ReputationClassificationDetail",
'CountryofOperation': 'CountryDetail'
}
# Convert class model to dictonary
reqDataDict = vars(requestDataModel)
# Maintain a list to store all the values of a that tag
tagsDataDict = {
"Segments": [],
"SpecificRisk": [],
"Citizenship": [],
"AdverseMediaClassification": [],
"PEPClassification": [],
"Tags":[],
"RegAMLSpecialCategoryDetails":[],
"Nationality":[],
"NatureOfBusiness": [],
"ProductSegments": [],
"ReputationClassification": [],
'CountryofOperation': []
}
# Iterate through class tags n store the data inside tagsDataDict and empty it
for parent in parentTags:
tagDataList = [vars(i) for i in reqDataDict[parent]]
tagsDataDict[parent] = tagDataList
reqDataDict[parent] = {}
"""
NOTE:Main reason to empty those tags where because the input "requestModel" is a complex object ie It is an Object which has other class objects inside it.
This will fail if you don't manually convert those inner objects, thus we have emptied it and extracted the data into tagsDataDict.
"""
xmlStrBytes = dicttoxml(reqDataDict, custom_root="A75RiskRatingRequestData", attr_type = False)
# Now we will add the above removed tags with their data
for parent in parentTags:
if tagsDataDict[parent] != []:
xmlStrBytes = RequestApiUtil.addNodesToParentTag(etree.fromstring(xmlStrBytes), parent, parentTagsDict[parent], tagsDataDict[parent])
if xmlStrBytes != "":
xmlStr = xmlStrBytes.decode('utf-8')
"""
NOTE:The XML we have to send has nullable data type which requires us to
send those XML elements with an attribute -> xsi:nil = "true"
Now we will have to manually add those to the required xml elements if
they are None ie Null.
"""
# Only if no value is added here do add nil attribute
# NOTE: Please keep the order of the elements same as attributesToAddBoolList
tagsToAddAttr = ["AdverseMedia/", "Networth/", "ExactIncome/", "Minor/"]
# Creating a bool array list which will indicate which attribute is not None
# NOTE: Please keep the order of the elements same as tagsToAddAttr
attributesToAddBoolList = [
requestDataModel.AdverseMedia is None,
requestDataModel.Networth is None,
requestDataModel.ExactIncome is None,
requestDataModel.Minor is None
]
# Only take tags which are necessary for adding the required attribute
tagsToAddAttr = [val for indx, val in enumerate(tagsToAddAttr) if attributesToAddBoolList[indx]]
for tags in tagsToAddAttr:
xmlStr = RequestApiUtil.addAttrToTag(xmlStr, tags)
return xmlStr
def testData():
"""
NOTE: To fill data for Optional data type make sure to set None if there is no value to be attached. Values that need to be set None if nothing is passed are:
1. Minor
2. AdverseMedia
3. ExactIncome
4. Networth
NOTE: For List[className] data type you must pass the object of the class along with the value refer the example below.
For example:
Segments = [SegmentDetail("14")]
SpecificRisk = [RiskDetail("03"), RiskDetail("02"), RiskDetail("01")]
Refer parentTagsDict on line 35 on how the class can be added to the property """
requestDataModel = A75RiskRatingRequestData()
requestDataModel.RiskCalculationFor = ""
requestDataModel.RequestId = ""
requestDataModel.RecordIdentifier = str(uuid.uuid4()) # don't edit this field requestDataModel.ApplicationRefNumber = ""
requestDataModel.IntermediaryCode = ""
requestDataModel.SourceSystemName = ""
requestDataModel.ParentCompany = ""
requestDataModel.ProposedAs = ""
requestDataModel.Segments = [SegmentDetail(14)]
requestDataModel.CustomerType = "1"
requestDataModel.CustomerSubType = ""
requestDataModel.Prefix = ""
requestDataModel.FirstName = ""
requestDataModel.MiddleName = ""
requestDataModel.LastName = ""
requestDataModel.Gender = ""
requestDataModel.MaritalStatus = ""
requestDataModel.Citizenship = [CountryDetail("IN")]
requestDataModel.CountryOfResidence = "IN"
requestDataModel.OccupationType = ""
requestDataModel.ActivitySector = ""
requestDataModel.ActivitySectorOther = ""
requestDataModel.DateOfBirth = ""
requestDataModel.CorrespondenceAddressLine1 = ""
requestDataModel.CorrespondenceAddressLine2 = ""
requestDataModel.CorrespondenceAddressLine3 = ""
requestDataModel.CorrespondenceAddressCity = ""
requestDataModel.CorrespondenceAddressState = ""
requestDataModel.CorrespondenceAddressCountry = ""
requestDataModel.CorrespondenceAddressPinCode = ""
requestDataModel.PermanentAddressLine1 = ""
requestDataModel.PermanentAddressLine2 = ""
requestDataModel.PermanentAddressLine3 = ""
requestDataModel.PermanentAddressCity = ""
requestDataModel.PermanentAddressState = ""
requestDataModel.PermanentAddressCountry = ""
requestDataModel.PermanentAddressPinCode = ""
requestDataModel.TaxResidencyAddressLine1 = ""
requestDataModel.TaxResidencyAddressLine2 = ""
requestDataModel.TaxResidencyAddressLine3 = ""
requestDataModel.TaxResidencyAddressCity = ""
requestDataModel.TaxResidencyAddressState = ""
requestDataModel.TaxResidencyAddressCountry = ""
requestDataModel.TaxResidencyAddressPinCode = ""
requestDataModel.WorkMobileISD = ""
requestDataModel.WorkMobileNumber = ""
requestDataModel.PersonalMobileISD = ""
requestDataModel.PersonalMobileNumber = ""
requestDataModel.WorkEmail = ""
requestDataModel.PersonalEmail = ""
requestDataModel.CountryOfBirth = ""
requestDataModel.BirthCity = "kolkata"
requestDataModel.ProductSegments = ""
requestDataModel.Listed = ""
requestDataModel.Minor = None
requestDataModel.Industry = ""
requestDataModel.Nationality = ""
requestDataModel.IncomeRange = ""
requestDataModel.IncomeCurrency = ""
requestDataModel.IncomeEffectiveDate = ""
requestDataModel.IncomeDescription = ""
requestDataModel.ExactIncome = None
requestDataModel.Networth = None
requestDataModel.ReputationClassification = ""
requestDataModel.NetworthCurrency = ""
requestDataModel.NetworthEffectiveDate = ""
requestDataModel.NetworthDescription = ""
requestDataModel.PEP = "PEP"
requestDataModel.PEPClassification = [PEPClassificationDetail("COREPEP5")]
requestDataModel.AdverseMedia = 1
requestDataModel.AdverseMediaClassification = ""
requestDataModel.AdverseMediaDetails = ""
requestDataModel.InsiderInformation = ""
requestDataModel.RegAMLSpecialCategoryDetails =
[RegAMLSpecialCategoryDetail("TW01"),RegAMLSpecialCategoryDetail("TW02")]
requestDataModel.NatureOfBusiness = [NatureOfBusinessDetail("TW01")]
requestDataModel.CountryofOperation = ""
requestDataModel.Tags = ""
requestDataModel.Channel = ""
requestDataModel.Links = ""
requestDataModel.AUM = ""
requestDataModel.FinancialExposure = ""
requestDataModel.ResponseDocument = "Yes"
requestDataModel.SpecificRisk = [RiskDetail("03"), RiskDetail("02"), RiskDetail("01")]
ApiToken = ""
PublicKeyPath = ""
PrivateKeyPath = ""
PrivateKeyPassword = ""
ApiUrl= ""
filePathForReport = ""
a75RequestXMLStr = creatingValidXMLFromModel(requestDataModel)
a75RequestXMLStr = RequestApiUtil.addSchemaToXML(a75RequestXMLStr)
a75ClientRequestModel = A75ClientRequestModel(a75RequestXMLStr, ApiToken, PublicKeyPath, PrivateKeyPath, PrivateKeyPassword, ApiUrl, filePathForReport)
return a75ClientRequestModel
if __name__ == "__main__":
a75ClientRequestModel = testData()
# To run without async use this
responseData = A75WebClient(a75ClientRequestModel).execute()
# To run async method use this
# responseData = asyncio.run(A75WebClient(a75ClientRequestModel).executeAsync())
print(responseData)

