You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

87 regels
4.1 KiB

  1. from . import coerce_methods as coerce_methods
  2. from collections import OrderedDict
  3. DEBUG = False
  4. def mapper(mapping, data):
  5. """
  6. MDG - 27/01/2021
  7. This method handles the mapping declared within the endpoint.
  8. For each parameter, it applies the coerce method (if present) or simply renames the parameter key.
  9. Usage example:
  10. Declare within the endpoint a Dict similar to this:
  11. mapping = {
  12. "cards_mapping": {
  13. "firstname": ("fn", coerce_methods.coerce_fn_to_microsip_firstname, None),
  14. "lastname": ("fn", coerce_methods.coerce_fn_to_microsip_lastname, None),
  15. "phone": ("tel", coerce_methods.clean_phone_number_from_symbols, None),
  16. "address": ("adr", coerce_methods.coerce_adr_to_microsip_address, None),
  17. "city": ("adr", coerce_methods.coerce_adr_to_microsip_city, None),
  18. "state": ("adr", coerce_methods.coerce_adr_to_microsip_state, None),
  19. "zip": ("adr", coerce_methods.coerce_adr_to_microsip_zip, None),
  20. "email": ("email", None, None)
  21. #("categories": "", None),
  22. },
  23. "base_mapping": {
  24. "items": ("cards", None, "cards_mapping"),
  25. }
  26. }
  27. The "base_mapping" is the first level mapping.
  28. In -> "items": ("cards", None, "cards_mapping"),
  29. - "items" is the parameter name in which the parameter to handle will be renamed
  30. - "cards" is the parameter name to handle (that comes from logics)
  31. - "None" is the coerce method to eventually apply
  32. - "cards_mapping" is the sub level mapping (the mapping of the single objects within the cards array)
  33. The mapping can be recursive (infinite level of sub mapping)
  34. IMPORTANT: the base level mapping has to be named "base_mapping". The sub level mappings have to be named with the dict key used for that mapping.
  35. """
  36. currentMapping = mapping
  37. if isinstance(data, list):
  38. responseData = []
  39. if DEBUG: print("[DEBUG] Data input in mapping:")
  40. if DEBUG: print(data)
  41. for item in data:
  42. responseItem = OrderedDict()
  43. for key, value in currentMapping.items():
  44. responseParameter = key
  45. majornetParameter, coerceMethod, subMapping = value
  46. if majornetParameter in item:
  47. if DEBUG: print("[DEBUG] Handling majornetParameter: ")
  48. if DEBUG: print(majornetParameter)
  49. if subMapping:
  50. mapper(subMapping, mapping_item[majornetParameter])
  51. if coerceMethod:
  52. responseItem[responseParameter] = coerceMethod(item[majornetParameter])
  53. else:
  54. responseItem[responseParameter] = item[majornetParameter]
  55. if DEBUG: print("[DEBUG] Mapping to responseParameter: ")
  56. if DEBUG: print(responseParameter)
  57. if DEBUG: print("[DEBUG] Result item: ")
  58. if DEBUG: print(responseItem)
  59. if DEBUG: print("\n")
  60. responseData.append(responseItem)
  61. if DEBUG: print("\n\n\n[DEBUG] Result response data in list:")
  62. if DEBUG: print(responseData)
  63. else:
  64. responseData = OrderedDict()
  65. if 'base_mapping' in mapping:
  66. currentMapping = mapping['base_mapping']
  67. for key, value in currentMapping.items():
  68. responseParameter = key
  69. majornetParameter, coerceMethod, subMapping = value
  70. if majornetParameter in data:
  71. if subMapping:
  72. responseData[responseParameter] = mapper(mapping[subMapping], data[majornetParameter])
  73. else:
  74. responseData[responseParameter] = data[majornetParameter]
  75. if coerceMethod:
  76. responseData[responseParameter] = coerceMethod(data[responseParameter])
  77. if DEBUG: print("[DEBUG] Result response data returning from mapping:")
  78. if DEBUG: print(responseData)
  79. return responseData