From cf38983bc4ef9a4a9287693624c29f023518913c Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 17:25:39 -0300 Subject: [PATCH 1/9] fix: modify the depracated code and add new tests --- web_programming/get_top_billionaires.py | 34 ++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 703b635eef82..727221807a9a 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -3,15 +3,17 @@ This works for some of us but fails for others. """ -from datetime import UTC, date, datetime +import doctest +from datetime import date, datetime import requests +from pytz import utc from rich import box from rich import console as rich_console from rich import table as rich_table LIMIT = 10 -TODAY = datetime.now(tz=UTC) +TODAY = datetime.now(tz=utc) API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" @@ -44,7 +46,7 @@ def years_old(birth_timestamp: int, today: date | None = None) -> int: True """ today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp, tz=UTC).date() + birth_date = datetime.fromtimestamp(birth_timestamp, tz=utc).date() return (today.year - birth_date.year) - ( (today.month, today.day) < (birth_date.month, birth_date.day) ) @@ -65,7 +67,7 @@ def get_forbes_real_time_billionaires() -> list[dict[str, int | str]]: "Country": person["countryOfCitizenship"], "Gender": person["gender"], "Worth ($)": f"{person['finalWorth'] / 1000:.1f} Billion", - "Age": years_old(person["birthDate"]), + "Age": str(years_old(person["birthDate"] / 1000)), } for person in response_json["personList"]["personsLists"] ] @@ -77,6 +79,29 @@ def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> Non Args: forbes_billionaires (list): Forbes top 10 real-time billionaires + + Example: + >>> billionaires = [ + ... {"Name": "João Silva", "Source": "Tech", "Country": "USA", "Gender": "M", + ... "Worth ($)": "50.0 Billion", "Age": "50"}, + ... {"Name": "Maria Santos", "Source": "Finance", "Country": "UK", + ... "Gender": "F", "Worth ($)": "40.0 Billion", "Age": "45"} + ... ] + >>> from io import StringIO + >>> import sys + >>> old_stdout = sys.stdout + >>> sys.stdout = buffer = StringIO() + >>> display_billionaires(billionaires) + >>> sys.stdout = old_stdout + >>> output = buffer.getvalue() + >>> output = '\\n'.join(output.split('\\n')[1:]) + >>> print(output.strip()) + ┌──────────────┬─────────┬─────────┬────────┬──────────────┬─────┐ + │ Name │ Source │ Country │ Gender │ Worth ($) │ Age │ + ├──────────────┼─────────┼─────────┼────────┼──────────────┼─────┤ + │ João Silva │ Tech │ USA │ M │ 50.0 Billion │ 50 │ + │ Maria Santos │ Finance │ UK │ F │ 40.0 Billion │ 45 │ + └──────────────┴─────────┴─────────┴────────┴──────────────┴─────┘ """ table = rich_table.Table( @@ -95,4 +120,5 @@ def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> Non if __name__ == "__main__": + doctest.testmod() display_billionaires(get_forbes_real_time_billionaires()) From a9a5786f7270561aa7bb24fc83f115e4b6df394d Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 17:30:06 -0300 Subject: [PATCH 2/9] fix: remove test from pr --- web_programming/get_top_billionaires.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 727221807a9a..55fef24c70d5 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -79,29 +79,6 @@ def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> Non Args: forbes_billionaires (list): Forbes top 10 real-time billionaires - - Example: - >>> billionaires = [ - ... {"Name": "João Silva", "Source": "Tech", "Country": "USA", "Gender": "M", - ... "Worth ($)": "50.0 Billion", "Age": "50"}, - ... {"Name": "Maria Santos", "Source": "Finance", "Country": "UK", - ... "Gender": "F", "Worth ($)": "40.0 Billion", "Age": "45"} - ... ] - >>> from io import StringIO - >>> import sys - >>> old_stdout = sys.stdout - >>> sys.stdout = buffer = StringIO() - >>> display_billionaires(billionaires) - >>> sys.stdout = old_stdout - >>> output = buffer.getvalue() - >>> output = '\\n'.join(output.split('\\n')[1:]) - >>> print(output.strip()) - ┌──────────────┬─────────┬─────────┬────────┬──────────────┬─────┐ - │ Name │ Source │ Country │ Gender │ Worth ($) │ Age │ - ├──────────────┼─────────┼─────────┼────────┼──────────────┼─────┤ - │ João Silva │ Tech │ USA │ M │ 50.0 Billion │ 50 │ - │ Maria Santos │ Finance │ UK │ F │ 40.0 Billion │ 45 │ - └──────────────┴─────────┴─────────┴────────┴──────────────┴─────┘ """ table = rich_table.Table( From ebb5f023415a0abd35a10703aef6579223d4ab78 Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 17:43:08 -0300 Subject: [PATCH 3/9] fix: remove the useless utc import --- web_programming/get_top_billionaires.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 55fef24c70d5..62a6523e6ec1 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -7,13 +7,12 @@ from datetime import date, datetime import requests -from pytz import utc from rich import box from rich import console as rich_console from rich import table as rich_table LIMIT = 10 -TODAY = datetime.now(tz=utc) +TODAY = datetime.now() API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" @@ -46,7 +45,7 @@ def years_old(birth_timestamp: int, today: date | None = None) -> int: True """ today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp, tz=utc).date() + birth_date = datetime.fromtimestamp(birth_timestamp).date() return (today.year - birth_date.year) - ( (today.month, today.day) < (birth_date.month, birth_date.day) ) From d20730e3b28aa87d4ca9a600b0dd96a628257be1 Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 17:45:40 -0300 Subject: [PATCH 4/9] fix: add explicit tz argument --- web_programming/get_top_billionaires.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 62a6523e6ec1..cbfdfadc3289 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -12,7 +12,7 @@ from rich import table as rich_table LIMIT = 10 -TODAY = datetime.now() +TODAY = datetime.now(tz=datetime.timetz) API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" @@ -45,7 +45,7 @@ def years_old(birth_timestamp: int, today: date | None = None) -> int: True """ today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp).date() + birth_date = datetime.fromtimestamp(birth_timestamp, tz=datetime.timetz).date() return (today.year - birth_date.year) - ( (today.month, today.day) < (birth_date.month, birth_date.day) ) From 9809d95e1783c1b46f87f37f36e542d9c2f1a344 Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 17:55:13 -0300 Subject: [PATCH 5/9] fix: fixes ruff checking --- web_programming/get_top_billionaires.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index cbfdfadc3289..d30de63305cf 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -4,7 +4,7 @@ """ import doctest -from datetime import date, datetime +from datetime import date, datetime, timezone import requests from rich import box @@ -12,7 +12,7 @@ from rich import table as rich_table LIMIT = 10 -TODAY = datetime.now(tz=datetime.timetz) +TODAY = datetime.now(tz=timezone.utc) # noqa: UP017 API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" @@ -45,7 +45,7 @@ def years_old(birth_timestamp: int, today: date | None = None) -> int: True """ today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp, tz=datetime.timetz).date() + birth_date = datetime.fromtimestamp(birth_timestamp, tz=timezone.utc).date() # noqa: UP017 return (today.year - birth_date.year) - ( (today.month, today.day) < (birth_date.month, birth_date.day) ) From fa4d963c66b46665b7d8f97e02bad0e2cd6a9ff2 Mon Sep 17 00:00:00 2001 From: Julio Vinicius Date: Sun, 16 Jun 2024 18:42:17 -0300 Subject: [PATCH 6/9] Remove UP017 #noqa comments from code --- web_programming/get_top_billionaires.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index d30de63305cf..11c88047f653 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -4,7 +4,7 @@ """ import doctest -from datetime import date, datetime, timezone +from datetime import date, datetime, timedelta, timezone import requests from rich import box @@ -12,7 +12,9 @@ from rich import table as rich_table LIMIT = 10 -TODAY = datetime.now(tz=timezone.utc) # noqa: UP017 +UTC_OFFSET = timedelta(hours=0) +UTC = timezone(UTC_OFFSET) +TODAY = datetime.now(tz=UTC) API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" @@ -45,7 +47,7 @@ def years_old(birth_timestamp: int, today: date | None = None) -> int: True """ today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp, tz=timezone.utc).date() # noqa: UP017 + birth_date = datetime.fromtimestamp(birth_timestamp, tz=UTC).date() return (today.year - birth_date.year) - ( (today.month, today.day) < (birth_date.month, birth_date.day) ) From 5c76cb4ddf00573cf999d6f9c4d33609c739ba90 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 16 Jun 2024 18:10:47 -0400 Subject: [PATCH 7/9] Update get_top_billionaires.py --- web_programming/get_top_billionaires.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 11c88047f653..e291da7f0d7e 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -4,7 +4,7 @@ """ import doctest -from datetime import date, datetime, timedelta, timezone +from datetime import UTC, date, datetime import requests from rich import box @@ -12,8 +12,6 @@ from rich import table as rich_table LIMIT = 10 -UTC_OFFSET = timedelta(hours=0) -UTC = timezone(UTC_OFFSET) TODAY = datetime.now(tz=UTC) API_URL = ( "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" @@ -98,5 +96,7 @@ def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> Non if __name__ == "__main__": - doctest.testmod() + from doctest import testmod + + testmod() display_billionaires(get_forbes_real_time_billionaires()) From 9198f4fe4be3f9f04b4600ddb00dedd1d7781aec Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 22:11:08 +0000 Subject: [PATCH 8/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- web_programming/get_top_billionaires.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index e291da7f0d7e..13e16208c9eb 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -97,6 +97,6 @@ def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> Non if __name__ == "__main__": from doctest import testmod - + testmod() display_billionaires(get_forbes_real_time_billionaires()) From 189791621861b36a934cef8e733278afcd44fd36 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 16 Jun 2024 18:11:32 -0400 Subject: [PATCH 9/9] Update get_top_billionaires.py --- web_programming/get_top_billionaires.py | 1 - 1 file changed, 1 deletion(-) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py index 13e16208c9eb..f1a3a07b343a 100644 --- a/web_programming/get_top_billionaires.py +++ b/web_programming/get_top_billionaires.py @@ -3,7 +3,6 @@ This works for some of us but fails for others. """ -import doctest from datetime import UTC, date, datetime import requests