Fix get top billionaires BROKEN file (#8970)

* updating DIRECTORY.md

* fix(get-top-billionaires): Handle timestamp before epoch

* updating DIRECTORY.md

* revert(pyproject): Re-implement ignore lru_cache

* fix(age): Update age to current year

* fix(doctest): Make years since dynamic

---------

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
Caeden Perelli-Harris 2023-08-18 13:13:38 +01:00 committed by GitHub
parent 72c7b05caa
commit 5f7819e1cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 7 deletions

View File

@ -1221,6 +1221,7 @@
* [Get Amazon Product Data](web_programming/get_amazon_product_data.py)
* [Get Imdb Top 250 Movies Csv](web_programming/get_imdb_top_250_movies_csv.py)
* [Get Imdbtop](web_programming/get_imdbtop.py)
* [Get Top Billionaires](web_programming/get_top_billionaires.py)
* [Get Top Hn Posts](web_programming/get_top_hn_posts.py)
* [Get User Tweets](web_programming/get_user_tweets.py)
* [Giphy](web_programming/giphy.py)

View File

@ -3,7 +3,7 @@ CAUTION: You may get a json.decoding error.
This works for some of us but fails for others.
"""
from datetime import datetime
from datetime import UTC, datetime, timedelta
import requests
from rich import box
@ -20,18 +20,31 @@ API_URL = (
)
def calculate_age(unix_date: int) -> str:
def calculate_age(unix_date: float) -> str:
"""Calculates age from given unix time format.
Returns:
Age as string
>>> calculate_age(-657244800000)
'73'
>>> calculate_age(46915200000)
'51'
>>> from datetime import datetime, UTC
>>> years_since_create = datetime.now(tz=UTC).year - 2022
>>> int(calculate_age(-657244800000)) - years_since_create
73
>>> int(calculate_age(46915200000)) - years_since_create
51
"""
birthdate = datetime.fromtimestamp(unix_date / 1000).date()
# Convert date from milliseconds to seconds
unix_date /= 1000
if unix_date < 0:
# Handle timestamp before epoch
epoch = datetime.fromtimestamp(0, tz=UTC)
seconds_since_epoch = (datetime.now(tz=UTC) - epoch).seconds
birthdate = (
epoch - timedelta(seconds=abs(unix_date) - seconds_since_epoch)
).date()
else:
birthdate = datetime.fromtimestamp(unix_date, tz=UTC).date()
return str(
TODAY.year
- birthdate.year