@@ -81,8 +81,20 @@ def iter_plugins():
81
81
if re .match (r"pytest(?![-.\w])" , requirement ):
82
82
requires = requirement
83
83
break
84
+
85
+ def version_sort_key (version_string ):
86
+ """
87
+ Return the sort key for the given version string
88
+ returned by the API.
89
+ """
90
+ try :
91
+ return packaging .version .parse (version_string )
92
+ except packaging .version .InvalidVersion :
93
+ # Use a hard-coded pre-release version.
94
+ return packaging .version .Version ("0.0.0alpha" )
95
+
84
96
releases = response .json ()["releases" ]
85
- for release in sorted (releases , key = packaging . version . parse , reverse = True ):
97
+ for release in sorted (releases , key = version_sort_key , reverse = True ):
86
98
if releases [release ]:
87
99
release_date = datetime .date .fromisoformat (
88
100
releases [release ][- 1 ]["upload_time_iso_8601" ].split ("T" )[0 ]
@@ -124,7 +136,7 @@ def main():
124
136
reference_dir = pathlib .Path ("doc" , "en" , "reference" )
125
137
126
138
plugin_list = reference_dir / "plugin_list.rst"
127
- with plugin_list .open ("w" ) as f :
139
+ with plugin_list .open ("w" , encoding = "UTF-8" ) as f :
128
140
f .write (FILE_HEAD )
129
141
f .write (f"This list contains { len (plugins )} plugins.\n \n " )
130
142
f .write (".. only:: not latex\n \n " )
0 commit comments