def update_device_info(registration_id: str): """ Task used to fetch device status information from the google Instance ID service """ if not settings.FCM_API_KEY: return push_service = FCMNotification(api_key=settings.FCM_API_KEY) response = push_service.registration_info_request(registration_id) if response.status_code == 200: # expect the device to be known response_json = response.json() device = FCMDevice.objects.get(registration_id=registration_id) device_updated = False if not device.is_active: device.is_active = True device_updated = True if device.platform != response_json.get('platform'): device.platform = response_json.get('platform') device_updated = True # connectDate is optional if response_json.get('connectDate'): connect_date = datetime.strptime(response_json.get('connectDate'), '%Y-%m-%d').date() if device.connect_date != connect_date: device.connect_date = connect_date device_updated = True if device.app_version != response_json.get('applicationVersion'): device.app_version = response_json.get('applicationVersion') device_updated = True if device_updated: device.save() return response.json() if response.status_code == 404: # {"error": "No information found about this instance id."} try: device = FCMDevice.objects.get(registration_id=registration_id) except FCMDevice.DoesNotExist: return response.json() if device.is_active: device.is_active = False device.save() return response.json() else: # raise appropriate RequestException response.raise_for_status()