.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)