(
data: Dict[str, Any],
fields: List[str],
log: Any,
attribute: Optional[str] = None,
)
| 232 | |
| 233 | |
| 234 | def build_data( |
| 235 | data: Dict[str, Any], |
| 236 | fields: List[str], |
| 237 | log: Any, |
| 238 | attribute: Optional[str] = None, |
| 239 | ) -> Dict[str, Dict[str, Dict]]: |
| 240 | result: Dict[str, Dict[str, Optional[Dict]]] = dict() |
| 241 | |
| 242 | def process_data(m_id: str, flds: List[str], d: Dict[str, Any]) -> Dict[str, Any]: |
| 243 | out: Dict[str, Any] = {} |
| 244 | for field in flds: |
| 245 | try: |
| 246 | out[to_snake_case(field)] = d[field] |
| 247 | except KeyError: |
| 248 | log.debug(f"Could not find field: {field} in data: {d}") |
| 249 | out[to_snake_case(field)] = None |
| 250 | return out |
| 251 | |
| 252 | try: |
| 253 | if attribute is not None: |
| 254 | data_items = data[attribute] |
| 255 | else: |
| 256 | data_items = [{"MemberId": k, **v} for k, v in data.items()] |
| 257 | log.debug(f"build_data: data_items count={len(data_items)}") |
| 258 | for d in data_items: |
| 259 | member_id = d.get("MemberId") |
| 260 | result[member_id] = {} |
| 261 | result[member_id] = process_data(member_id, fields, d) |
| 262 | except (KeyError, TypeError, AttributeError) as e: |
| 263 | log.error(f"Can't build data: {e}") |
| 264 | raise |
| 265 | return normalize_dict(result) |
| 266 | |
| 267 | |
| 268 | def _resolve_path(endpoint: Endpoint, path: str) -> Endpoint: |
no test coverage detected