Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

87 linhas
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