Skip to content

Commit 94f05a1

Browse files
committed
show now shows EOL data for all CPython version levels
1 parent 34f8923 commit 94f05a1

4 files changed

Lines changed: 104 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ v1.1.0 (in development)
22
-----------------------
33
- Use pydantic internally for parsing & validating version databases
44
- `eol_date()` and `is_eol()` now accept major and micro versions
5+
- The `show` command now outputs the EOL date and EOL state for all CPython
6+
version levels
57

68
v1.0.0 (2021-11-04)
79
-------------------

docs/command.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ Sample outputs:
8989
Release-date: 2008-12-03
9090
Is-released: yes
9191
Is-supported: yes
92+
EOL-Date: UNKNOWN
93+
Is-EOL: no
9294
Subversions: 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9
9395
9496
.. code:: console
@@ -111,6 +113,8 @@ Sample outputs:
111113
Release-date: 2021-05-03
112114
Is-released: yes
113115
Is-supported: yes
116+
EOL-Date: 2025-10-01
117+
Is-EOL: no
114118
115119
.. code:: console
116120

src/pyversion_info/__main__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ def show(
143143
data.append(("is_supported", "Is-Supported", info.is_supported(v)))
144144
if isinstance(v, MajorVersion):
145145
data.insert(1, ("level", "Level", "major"))
146+
if isinstance(info, CPythonVersionInfo):
147+
data.append(("eol_date", "EOL-Date", info.eol_date(v)))
148+
data.append(("is_eol", "Is-EOL", info.is_eol(v)))
146149
data.append(
147150
(
148151
"subversions",
@@ -185,6 +188,9 @@ def show(
185188
else:
186189
assert isinstance(v, MicroVersion)
187190
data.insert(1, ("level", "Level", "micro"))
191+
if isinstance(info, CPythonVersionInfo):
192+
data.append(("eol_date", "EOL-Date", info.eol_date(v)))
193+
data.append(("is_eol", "Is-EOL", info.is_eol(v)))
188194
if isinstance(info, PyPyVersionInfo):
189195
data.append(("cpython", "CPython", info.supported_cpython(v)))
190196
if do_json:

test/test_cmd_cpython.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
533533
"release_date": "1994-01-26",
534534
"is_released": True,
535535
"is_supported": False,
536+
"eol_date": None,
537+
"is_eol": True,
536538
"subversions": ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6"],
537539
},
538540
(
@@ -541,6 +543,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
541543
"Release-Date: 1994-01-26\n"
542544
"Is-Released: yes\n"
543545
"Is-Supported: no\n"
546+
"EOL-Date: UNKNOWN\n"
547+
"Is-EOL: yes\n"
544548
"Subversions: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6\n"
545549
),
546550
),
@@ -553,6 +557,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
553557
"release_date": "1994-01-26",
554558
"is_released": True,
555559
"is_supported": False,
560+
"eol_date": None,
561+
"is_eol": True,
556562
"subversions": ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6"],
557563
},
558564
(
@@ -561,6 +567,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
561567
"Release-Date: 1994-01-26\n"
562568
"Is-Released: yes\n"
563569
"Is-Supported: no\n"
570+
"EOL-Date: UNKNOWN\n"
571+
"Is-EOL: yes\n"
564572
"Subversions: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6\n"
565573
),
566574
),
@@ -573,6 +581,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
573581
"release_date": "1994-01-26",
574582
"is_released": True,
575583
"is_supported": False,
584+
"eol_date": None,
585+
"is_eol": True,
576586
"subversions": [],
577587
},
578588
(
@@ -581,6 +591,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
581591
"Release-Date: 1994-01-26\n"
582592
"Is-Released: yes\n"
583593
"Is-Supported: no\n"
594+
"EOL-Date: UNKNOWN\n"
595+
"Is-EOL: yes\n"
584596
"Subversions: \n"
585597
),
586598
),
@@ -593,6 +605,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
593605
"release_date": "1994-01-26",
594606
"is_released": True,
595607
"is_supported": False,
608+
"eol_date": None,
609+
"is_eol": True,
596610
"subversions": [],
597611
},
598612
(
@@ -601,6 +615,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
601615
"Release-Date: 1994-01-26\n"
602616
"Is-Released: yes\n"
603617
"Is-Supported: no\n"
618+
"EOL-Date: UNKNOWN\n"
619+
"Is-EOL: yes\n"
604620
"Subversions: \n"
605621
),
606622
),
@@ -613,6 +629,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
613629
"release_date": "2000-10-16",
614630
"is_released": True,
615631
"is_supported": True,
632+
"eol_date": None,
633+
"is_eol": False,
616634
"subversions": ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"],
617635
},
618636
(
@@ -621,6 +639,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
621639
"Release-Date: 2000-10-16\n"
622640
"Is-Released: yes\n"
623641
"Is-Supported: yes\n"
642+
"EOL-Date: UNKNOWN\n"
643+
"Is-EOL: no\n"
624644
"Subversions: 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7\n"
625645
),
626646
),
@@ -633,6 +653,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
633653
"release_date": "2000-10-16",
634654
"is_released": True,
635655
"is_supported": True,
656+
"eol_date": None,
657+
"is_eol": False,
636658
"subversions": ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"],
637659
},
638660
(
@@ -641,6 +663,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
641663
"Release-Date: 2000-10-16\n"
642664
"Is-Released: yes\n"
643665
"Is-Supported: yes\n"
666+
"EOL-Date: UNKNOWN\n"
667+
"Is-EOL: no\n"
644668
"Subversions: 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7\n"
645669
),
646670
),
@@ -653,6 +677,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
653677
"release_date": "2000-10-16",
654678
"is_released": True,
655679
"is_supported": True,
680+
"eol_date": None,
681+
"is_eol": False,
656682
"subversions": ["2.7"],
657683
},
658684
(
@@ -661,6 +687,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
661687
"Release-Date: 2000-10-16\n"
662688
"Is-Released: yes\n"
663689
"Is-Supported: yes\n"
690+
"EOL-Date: UNKNOWN\n"
691+
"Is-EOL: no\n"
664692
"Subversions: 2.7\n"
665693
),
666694
),
@@ -673,6 +701,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
673701
"release_date": "2000-10-16",
674702
"is_released": True,
675703
"is_supported": True,
704+
"eol_date": None,
705+
"is_eol": False,
676706
"subversions": ["2.7"],
677707
},
678708
(
@@ -681,6 +711,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
681711
"Release-Date: 2000-10-16\n"
682712
"Is-Released: yes\n"
683713
"Is-Supported: yes\n"
714+
"EOL-Date: UNKNOWN\n"
715+
"Is-EOL: no\n"
684716
"Subversions: 2.7\n"
685717
),
686718
),
@@ -889,6 +921,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
889921
"release_date": "2008-12-03",
890922
"is_released": True,
891923
"is_supported": True,
924+
"eol_date": None,
925+
"is_eol": False,
892926
"subversions": ["3.0", "3.1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.7"],
893927
},
894928
(
@@ -897,6 +931,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
897931
"Release-Date: 2008-12-03\n"
898932
"Is-Released: yes\n"
899933
"Is-Supported: yes\n"
934+
"EOL-Date: UNKNOWN\n"
935+
"Is-EOL: no\n"
900936
"Subversions: 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7\n"
901937
),
902938
),
@@ -909,6 +945,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
909945
"release_date": "2008-12-03",
910946
"is_released": True,
911947
"is_supported": True,
948+
"eol_date": None,
949+
"is_eol": False,
912950
"subversions": [
913951
"3.0",
914952
"3.1",
@@ -927,6 +965,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
927965
"Release-Date: 2008-12-03\n"
928966
"Is-Released: yes\n"
929967
"Is-Supported: yes\n"
968+
"EOL-Date: UNKNOWN\n"
969+
"Is-EOL: no\n"
930970
"Subversions: 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8\n"
931971
),
932972
),
@@ -939,6 +979,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
939979
"release_date": "2008-12-03",
940980
"is_released": True,
941981
"is_supported": True,
982+
"eol_date": None,
983+
"is_eol": False,
942984
"subversions": ["3.5", "3.6", "3.7", "3.8"],
943985
},
944986
(
@@ -947,6 +989,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
947989
"Release-Date: 2008-12-03\n"
948990
"Is-Released: yes\n"
949991
"Is-Supported: yes\n"
992+
"EOL-Date: UNKNOWN\n"
993+
"Is-EOL: no\n"
950994
"Subversions: 3.5, 3.6, 3.7, 3.8\n"
951995
),
952996
),
@@ -959,6 +1003,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
9591003
"release_date": "2008-12-03",
9601004
"is_released": True,
9611005
"is_supported": True,
1006+
"eol_date": None,
1007+
"is_eol": False,
9621008
"subversions": ["3.5", "3.6", "3.7"],
9631009
},
9641010
(
@@ -967,6 +1013,8 @@ def test_cmd_list_micro(mode: str, versions: List[str]) -> None:
9671013
"Release-Date: 2008-12-03\n"
9681014
"Is-Released: yes\n"
9691015
"Is-Supported: yes\n"
1016+
"EOL-Date: UNKNOWN\n"
1017+
"Is-EOL: no\n"
9701018
"Subversions: 3.5, 3.6, 3.7\n"
9711019
),
9721020
),
@@ -1096,13 +1144,17 @@ def test_show(version: str, subversions: str, data: dict, headers: str) -> None:
10961144
"release_date": None,
10971145
"is_released": True,
10981146
"is_supported": False,
1147+
"eol_date": None,
1148+
"is_eol": True,
10991149
},
11001150
(
11011151
"Version: 0.9.2\n"
11021152
"Level: micro\n"
11031153
"Release-Date: UNKNOWN\n"
11041154
"Is-Released: yes\n"
11051155
"Is-Supported: no\n"
1156+
"EOL-Date: UNKNOWN\n"
1157+
"Is-EOL: yes\n"
11061158
),
11071159
),
11081160
(
@@ -1113,13 +1165,17 @@ def test_show(version: str, subversions: str, data: dict, headers: str) -> None:
11131165
"release_date": "2013-05-15",
11141166
"is_released": True,
11151167
"is_supported": False,
1168+
"eol_date": "2017-09-29",
1169+
"is_eol": True,
11161170
},
11171171
(
11181172
"Version: 3.3.2\n"
11191173
"Level: micro\n"
11201174
"Release-Date: 2013-05-15\n"
11211175
"Is-Released: yes\n"
11221176
"Is-Supported: no\n"
1177+
"EOL-Date: 2017-09-29\n"
1178+
"Is-EOL: yes\n"
11231179
),
11241180
),
11251181
(
@@ -1130,13 +1186,17 @@ def test_show(version: str, subversions: str, data: dict, headers: str) -> None:
11301186
"release_date": "2017-03-21",
11311187
"is_released": True,
11321188
"is_supported": True,
1189+
"eol_date": "2021-12-23",
1190+
"is_eol": False,
11331191
},
11341192
(
11351193
"Version: 3.6.1\n"
11361194
"Level: micro\n"
11371195
"Release-Date: 2017-03-21\n"
11381196
"Is-Released: yes\n"
11391197
"Is-Supported: yes\n"
1198+
"EOL-Date: 2021-12-23\n"
1199+
"Is-EOL: no\n"
11401200
),
11411201
),
11421202
(
@@ -1147,13 +1207,17 @@ def test_show(version: str, subversions: str, data: dict, headers: str) -> None:
11471207
"release_date": "2019-06-24",
11481208
"is_released": False,
11491209
"is_supported": False,
1210+
"eol_date": "2023-06-27",
1211+
"is_eol": False,
11501212
},
11511213
(
11521214
"Version: 3.7.4\n"
11531215
"Level: micro\n"
11541216
"Release-Date: 2019-06-24\n"
11551217
"Is-Released: no\n"
11561218
"Is-Supported: no\n"
1219+
"EOL-Date: 2023-06-27\n"
1220+
"Is-EOL: no\n"
11571221
),
11581222
),
11591223
],
@@ -1172,6 +1236,34 @@ def test_show_micro(version: str, subversions: str, data: dict, headers: str) ->
11721236
assert json.loads(r.output) == data
11731237

11741238

1239+
def test_show_recent(mocker: MockerFixture) -> None:
1240+
mocker.patch("time.time", return_value=1635992101)
1241+
r = CliRunner().invoke(main, ["-d", DATA_FILE, "show", "2"])
1242+
assert r.exit_code == 0, show_result(r)
1243+
assert r.output == (
1244+
"Version: 2\n"
1245+
"Level: major\n"
1246+
"Release-Date: 2000-10-16\n"
1247+
"Is-Released: yes\n"
1248+
"Is-Supported: no\n"
1249+
"EOL-Date: 2020-01-01\n"
1250+
"Is-EOL: yes\n"
1251+
"Subversions: 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7\n"
1252+
)
1253+
r = CliRunner().invoke(main, ["-d", DATA_FILE, "show", "--json", "2"])
1254+
assert r.exit_code == 0, show_result(r)
1255+
assert json.loads(r.output) == {
1256+
"version": "2",
1257+
"level": "major",
1258+
"release_date": "2000-10-16",
1259+
"is_released": True,
1260+
"is_supported": False,
1261+
"eol_date": "2020-01-01",
1262+
"is_eol": True,
1263+
"subversions": ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"],
1264+
}
1265+
1266+
11751267
@pytest.mark.parametrize("v", ["", "1.2.3.4", "1.2.3rc1", "foobar", "a.b.c"])
11761268
def test_show_invalid_version(v: str) -> None:
11771269
r = CliRunner().invoke(main, ["-d", DATA_FILE, "show", v], standalone_mode=False)

0 commit comments

Comments
 (0)