AddressCreation.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. class AddressCreate:
  2. """
  3. This file Define a Singleton Class AddressCreate which will have static
  4. method returnAddress to return the address in format.
  5. CountryCode**
  6. PostlCode**
  7. CityName
  8. StreetName
  9. HouseNumber
  10. AdditionalData1
  11. AdditionalData2
  12. Input: value1 = {'CountryCode':"IN",'CityName':"Mohali"} [optional]
  13. value2 = "sales_"
  14. Output: {'sales_CountryCode':"IN","sales_PostalCode":"19883",
  15. "sales_CityName":"Mohali","sales_StreeName":"32HB",
  16. "sales_AdditionalData1":"Near Hospital",
  17. "sales_AdditionData2":"Ajanta Mandis Park"}
  18. Sample Usage:
  19. Default Value
  20. >> AddressCreate.returnAddress()
  21. Pass value of ('HouseNumber', 'AdditionalData1',
  22. 'AdditionalData2', 'StreetName', 'CityName', 'PostalCode',
  23. 'CountryCode' ) to change.
  24. For example:
  25. >> Update City Name
  26. AddressCreate(value1={"CityName":"Something"})
  27. or
  28. AddressCreate({"CityName":"Something"})
  29. >> Update Country Name
  30. AddressCreate({"CountryCode":"US"})
  31. """
  32. __instance = None
  33. class __AddressCreate:
  34. """ Inner class """
  35. def __init__(self, value1={}, value2=""):
  36. addressData = {"HouseNumber": "6",
  37. "AdditionalData1": "Near MahavirChowk",
  38. "AdditionalData2": "Opposite St. Marish Church",
  39. "StreetName": "GoreGaon",
  40. "CityName": "Ambala",
  41. "PostalCode": "160055",
  42. "CountryCode": "India",
  43. }
  44. prefixData = "" # empty initially
  45. self.value1 = addressData
  46. self.value2 = prefixData
  47. # Now update the value
  48. self.updateValue(value1, value2)
  49. def updateValue(self, value1, value2):
  50. """ This function will process value1,value2 and
  51. prepare dictionary data
  52. """
  53. # value1
  54. try:
  55. value1 = dict(value1)
  56. value2 = str(value2)
  57. except Exception as e:
  58. print("Error Occured : ", e)
  59. # process only dictionary data, ignore everything else
  60. if isinstance(value1, type({})):
  61. for key, value in value1.items():
  62. if key in self.value1:
  63. self.value1[key] = value
  64. if value2.strip():
  65. self.value2 = value2.strip()
  66. def __str__(self):
  67. """ AddressCreation print information"""
  68. return "AddressCreate Instance id :{} ".format(id(self))
  69. def __repr__(self):
  70. return "AddressCreate Instance id:{}\nvalue1: {}\nvalue2: {}".format(
  71. id(self), self.value1, self.value2)
  72. @staticmethod
  73. def getInstance():
  74. if AddressCreate.__instance is None:
  75. AddressCreate.__instance = AddressCreate.__AddressCreate()
  76. return AddressCreate.__instance
  77. def __new__(cls, value1={}, value2=""):
  78. """ Get the instance and update the value """
  79. if not AddressCreate.__instance:
  80. # Create new instance
  81. AddressCreate.__instance = AddressCreate.__AddressCreate(
  82. value1, value2)
  83. else:
  84. # Update old instance
  85. AddressCreate.__instance.updateValue(value1, value2)
  86. return AddressCreate.__instance
  87. @staticmethod
  88. def returnAddress():
  89. """This function will use value1 and value2 to prepare structured
  90. Address Data
  91. """
  92. # get the instance
  93. a = AddressCreate.getInstance()
  94. data = {}
  95. for key, val in a.value1.items():
  96. # prefix_value + addresskey = addresskey_value
  97. # if prefix = "Sales" and "CountryCode" = "India"
  98. # then final data will be data['Sales_CountryCode'] = India
  99. if a.value2:
  100. # prefix is given
  101. data[a.value2 + key] = val
  102. else:
  103. data[key] = val
  104. # finally return the processed dataDict
  105. return data