|
def get_description( |
|
resource: Dict[str, Any], |
|
description_cache: Dict[str, Any], |
|
time_passed: timedelta, |
|
): |
|
if "description" in resource and isinstance(resource["description"], str): |
|
return resource["description"] |
|
|
|
cached_value = description_cache.get(resource["id"], {}) |
|
|
|
if cached_value.get("version", None) == resource["version"] and isinstance( |
|
cached_value.get("description", None), str |
|
): |
|
return cached_value["description"] |
|
|
|
if time_passed > timedelta(minutes=30): |
|
return None |
|
|
|
new_description = load_description_from_website(resource) |
|
|
|
description_cache[resource["id"]] = { |
|
"description": new_description, |
|
"version": resource["version"], |
|
} |
|
|
|
return new_description |
|
|
|
|
|
def load_description_from_website(resource: Dict[str, Any]): |
|
identifier = resource.get("identifier", {}).get("value", None) |
|
|
|
if not isinstance(identifier, int): |
|
return None |
|
|
|
data = load_json_ld(f"https://serlo.org/{identifier}") |
|
|
|
if ( |
|
data is not None |
|
and "description" in data |
|
and isinstance(data["description"], str) |
|
): |
|
return data["description"] |
|
|
|
return None |