| 19 | |
| 20 | |
| 21 | class SCIMResponse: |
| 22 | url: str |
| 23 | status_code: int |
| 24 | headers: Dict[str, Any] |
| 25 | raw_body: Optional[str] |
| 26 | body: Optional[Dict[str, Any]] |
| 27 | snake_cased_body: Optional[Dict[str, Any]] |
| 28 | |
| 29 | errors: Optional[Errors] |
| 30 | |
| 31 | @property |
| 32 | def snake_cased_body(self) -> Optional[Dict[str, Any]]: |
| 33 | if self._snake_cased_body is None: |
| 34 | self._snake_cased_body = _to_snake_cased(self.body) |
| 35 | return self._snake_cased_body |
| 36 | |
| 37 | @property |
| 38 | def errors(self) -> Optional[Errors]: |
| 39 | errors = self.snake_cased_body.get("errors") |
| 40 | if errors is None: |
| 41 | return None |
| 42 | return Errors(**errors) |
| 43 | |
| 44 | def __init__( |
| 45 | self, |
| 46 | *, |
| 47 | url: str, |
| 48 | status_code: int, |
| 49 | raw_body: Optional[str], |
| 50 | headers: dict, |
| 51 | ): |
| 52 | self.url = url |
| 53 | self.status_code = status_code |
| 54 | self.headers = headers |
| 55 | self.raw_body = raw_body |
| 56 | self.body = json.loads(raw_body) if raw_body is not None and raw_body.startswith("{") else None |
| 57 | self._snake_cased_body = None # build this when it's accessed for the first time |
| 58 | |
| 59 | def __repr__(self): |
| 60 | dict_value = {} |
| 61 | for key, value in vars(self).items(): |
| 62 | dict_value[key] = value.to_dict() if hasattr(value, "to_dict") else value |
| 63 | |
| 64 | if dict_value: |
| 65 | return f"<slack_sdk.scim.v1.{self.__class__.__name__}: {dict_value}>" |
| 66 | else: |
| 67 | return self.__str__() |
| 68 | |
| 69 | |
| 70 | # --------------------------------- |
no outgoing calls