def get_pod_state(event_type: str, event: Mapping) -> 'PodStateConfig': labels = event['metadata']['labels'] node_name = event['spec']['node_name'] pod_phase = event['status']['phase'] deletion_timestamp = event['metadata']['deletion_timestamp'] pod_conditions = event['status']['conditions'] container_statuses = event['status']['container_statuses'] container_statuses_by_name = {} if container_statuses: container_statuses_by_name = { container_status['name']: { 'ready': container_status['ready'], 'state': container_status['state'], } for container_status in container_statuses } if pod_conditions: pod_conditions = {c['type']: { 'status': c['status'], 'reason': c['reason'], 'message': c.get('message') } for c in pod_conditions} return PodStateConfig.from_dict({ 'event_type': event_type, 'labels': labels, 'phase': pod_phase, 'deletion_timestamp': str(deletion_timestamp) if deletion_timestamp else None, 'pod_conditions': pod_conditions, 'container_statuses': container_statuses_by_name, 'node_name': node_name })
def test_pod_state_config(self): config_dict = self.create_pod_state() config = PodStateConfig.from_dict(config_dict) config_to_dict = config.to_dict() assert config_to_dict == config_dict config_to_dict = config.to_dict(humanize_values=True) assert config_to_dict.pop('deletion_timestamp') == 'a few seconds ago'