|
- from . import coerce_methods as coerce_methods
- from collections import OrderedDict
-
-
- DEBUG = False
-
- def mapper(mapping, data):
- """
- MDG - 27/01/2021
- This method handles the mapping declared within the endpoint.
- For each parameter, it applies the coerce method (if present) or simply renames the parameter key.
- Usage example:
- Declare within the endpoint a Dict similar to this:
-
- mapping = {
- "cards_mapping": {
- "firstname": ("fn", coerce_methods.coerce_fn_to_microsip_firstname, None),
- "lastname": ("fn", coerce_methods.coerce_fn_to_microsip_lastname, None),
- "phone": ("tel", coerce_methods.clean_phone_number_from_symbols, None),
- "address": ("adr", coerce_methods.coerce_adr_to_microsip_address, None),
- "city": ("adr", coerce_methods.coerce_adr_to_microsip_city, None),
- "state": ("adr", coerce_methods.coerce_adr_to_microsip_state, None),
- "zip": ("adr", coerce_methods.coerce_adr_to_microsip_zip, None),
- "email": ("email", None, None)
- #("categories": "", None),
- },
- "base_mapping": {
- "items": ("cards", None, "cards_mapping"),
- }
- }
-
- The "base_mapping" is the first level mapping.
- In -> "items": ("cards", None, "cards_mapping"),
- - "items" is the parameter name in which the parameter to handle will be renamed
- - "cards" is the parameter name to handle (that comes from logics)
- - "None" is the coerce method to eventually apply
- - "cards_mapping" is the sub level mapping (the mapping of the single objects within the cards array)
- The mapping can be recursive (infinite level of sub mapping)
-
- 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.
- """
- currentMapping = mapping
- if isinstance(data, list):
- responseData = []
- if DEBUG: print("[DEBUG] Data input in mapping:")
- if DEBUG: print(data)
- for item in data:
- responseItem = OrderedDict()
- for key, value in currentMapping.items():
- responseParameter = key
- majornetParameter, coerceMethod, subMapping = value
- if majornetParameter in item:
- if DEBUG: print("[DEBUG] Handling majornetParameter: ")
- if DEBUG: print(majornetParameter)
- if subMapping:
- mapper(subMapping, mapping_item[majornetParameter])
- if coerceMethod:
- responseItem[responseParameter] = coerceMethod(item[majornetParameter])
- else:
- responseItem[responseParameter] = item[majornetParameter]
- if DEBUG: print("[DEBUG] Mapping to responseParameter: ")
- if DEBUG: print(responseParameter)
- if DEBUG: print("[DEBUG] Result item: ")
- if DEBUG: print(responseItem)
- if DEBUG: print("\n")
- responseData.append(responseItem)
- if DEBUG: print("\n\n\n[DEBUG] Result response data in list:")
- if DEBUG: print(responseData)
- else:
- responseData = OrderedDict()
- if 'base_mapping' in mapping:
- currentMapping = mapping['base_mapping']
- for key, value in currentMapping.items():
- responseParameter = key
- majornetParameter, coerceMethod, subMapping = value
- if majornetParameter in data:
- if subMapping:
- responseData[responseParameter] = mapper(mapping[subMapping], data[majornetParameter])
- else:
- responseData[responseParameter] = data[majornetParameter]
- if coerceMethod:
- responseData[responseParameter] = coerceMethod(data[responseParameter])
- if DEBUG: print("[DEBUG] Result response data returning from mapping:")
- if DEBUG: print(responseData)
- return responseData
|