1515# You should have received a copy of the GNU General Public License
1616# along with repology. If not, see <http://www.gnu.org/licenses/>.
1717
18- from typing import Collection
19-
2018import flask
2119
22- from repologyapp .db import get_db
23- from repologyapp .globals import repometadata
2420from repologyapp .view_registry import Response , ViewRegistrar
2521
2622
27- def _get_filtered_args (wanted_args : Collection [str ]) -> dict [str , str ]:
28- return {
29- key : val
30- for key , val in flask .request .args .to_dict ().items ()
31- if key in wanted_args
32- }
33-
34-
35- def _get_projects_args () -> dict [str , str ]:
36- return _get_filtered_args ({
37- 'category' ,
38- 'families' ,
39- 'families_newest' ,
40- 'has_related' ,
41- 'inrepo' ,
42- 'maintainer' ,
43- 'newest' ,
44- 'notinrepo' ,
45- 'outdated' ,
46- 'problematic' ,
47- 'repos' ,
48- 'repos_newest' ,
49- 'search' ,
50- })
51-
52-
53- # /metapackages/*: logs are poluted by spam requests from huawei cloud, recheck after banning it
54- @ViewRegistrar ('/metapackages/all/' )
55- @ViewRegistrar ('/metapackages/all/<bound>/' )
56- def metapackages_all (bound : str | None = None ) -> Response :
57- return flask .redirect (flask .url_for ('projects' , bound = bound , search = flask .request .args .to_dict ().get ('search' )), 301 )
58-
59-
60- @ViewRegistrar ('/metapackages/unique/' )
61- @ViewRegistrar ('/metapackages/unique/<bound>/' )
62- def metapackages_unique (bound : str | None = None ) -> Response :
63- return flask .redirect (flask .url_for ('projects' , bound = bound , families = 1 , search = flask .request .args .to_dict ().get ('search' )), 301 )
64-
65-
66- @ViewRegistrar ('/metapackages/widespread/' )
67- @ViewRegistrar ('/metapackages/widespread/<bound>/' )
68- def metapackages_widespread (bound : str | None = None ) -> Response :
69- return flask .redirect (flask .url_for ('projects' , bound = bound , families = '10-' , search = flask .request .args .to_dict ().get ('search' )), 301 )
70-
71-
72- @ViewRegistrar ('/metapackages/in-repo/<repo>/' )
73- @ViewRegistrar ('/metapackages/in-repo/<repo>/<bound>/' )
74- def metapackages_in_repo (repo : str , bound : str | None = None ) -> Response :
75- if repo not in repometadata .active_names ():
76- flask .abort (404 )
77-
78- return flask .redirect (flask .url_for ('projects' , bound = bound , inrepo = repo , search = flask .request .args .to_dict ().get ('search' )), 301 )
79-
80-
81- @ViewRegistrar ('/metapackages/outdated-in-repo/<repo>/' )
82- @ViewRegistrar ('/metapackages/outdated-in-repo/<repo>/<bound>/' )
83- def metapackages_outdated_in_repo (repo : str , bound : str | None = None ) -> Response :
84- if repo not in repometadata .active_names ():
85- flask .abort (404 )
86-
87- return flask .redirect (flask .url_for ('projects' , bound = bound , inrepo = repo , outdated = 1 , search = flask .request .args .to_dict ().get ('search' )), 301 )
88-
89-
90- @ViewRegistrar ('/metapackages/not-in-repo/<repo>/' )
91- @ViewRegistrar ('/metapackages/not-in-repo/<repo>/<bound>/' )
92- def metapackages_not_in_repo (repo : str , bound : str | None = None ) -> Response :
93- if repo not in repometadata .active_names ():
94- flask .abort (404 )
95-
96- return flask .redirect (flask .url_for ('projects' , bound = bound , notinrepo = repo , search = flask .request .args .to_dict ().get ('search' )), 301 )
97-
98-
99- @ViewRegistrar ('/metapackages/candidates-for-repo/<repo>/' )
100- @ViewRegistrar ('/metapackages/candidates-for-repo/<repo>/<bound>/' )
101- def metapackages_candidates_for_repo (repo : str , bound : str | None = None ) -> Response :
102- if repo not in repometadata .active_names ():
103- flask .abort (404 )
104-
105- return flask .redirect (flask .url_for ('projects' , bound = bound , inrepo = repo , families = '5-' , search = flask .request .args .to_dict ().get ('search' )), 301 )
106-
107-
108- @ViewRegistrar ('/metapackages/unique-in-repo/<repo>/' )
109- @ViewRegistrar ('/metapackages/unique-in-repo/<repo>/<bound>/' )
110- def metapackages_unique_in_repo (repo : str , bound : str | None = None ) -> Response :
111- if repo not in repometadata .active_names ():
112- flask .abort (404 )
113-
114- return flask .redirect (flask .url_for ('projects' , bound = bound , inrepo = repo , families = 1 , search = flask .request .args .to_dict ().get ('search' )), 301 )
115-
116-
117- # /metapackages/by-maintainer/alicef@gentoo.org/ from https://wiki.gentoo.org/
118- @ViewRegistrar ('/metapackages/by-maintainer/<maintainer>/' )
119- @ViewRegistrar ('/metapackages/by-maintainer/<maintainer>/<bound>/' )
120- def metapackages_by_maintainer (maintainer : str , bound : str | None = None ) -> Response :
121- return flask .redirect (flask .url_for ('projects' , bound = bound , maintainer = maintainer , search = flask .request .args .to_dict ().get ('search' )), 301 )
122-
123-
124- @ViewRegistrar ('/metapackages/outdated-by-maintainer/<maintainer>/' )
125- @ViewRegistrar ('/metapackages/outdated-by-maintainer/<maintainer>/<bound>/' )
126- def metapackages_outdated_by_maintainer (maintainer : str , bound : str | None = None ) -> Response :
127- return flask .redirect (flask .url_for ('projects' , bound = bound , maintainer = maintainer , outdated = 1 , search = flask .request .args .to_dict ().get ('search' )), 301 )
128-
129-
130- @ViewRegistrar ('/metapackages/' )
131- @ViewRegistrar ('/metapackages/<bound>/' )
132- def metapackages (bound : str | None = None ) -> Response :
133- return flask .redirect (flask .url_for ('projects' , bound = bound , ** _get_projects_args ()), 301 )
134-
135-
13623@ViewRegistrar ('/project/<name>' )
13724@ViewRegistrar ('/project/<name>/' )
13825def project (name : str ) -> Response :
@@ -155,31 +42,6 @@ def metapackage_packages(name: str) -> Response:
15542 return flask .redirect (flask .url_for ('project_packages' , name = name ), 301 )
15643
15744
158- @ViewRegistrar ('/metapackage/<name>/information' )
159- def metapackage_information (name : str ) -> Response :
160- return flask .redirect (flask .url_for ('project_information' , name = name ), 301 )
161-
162-
163- @ViewRegistrar ('/metapackage/<name>/history' )
164- def metapackage_history (name : str ) -> Response :
165- return flask .redirect (flask .url_for ('project_history' , name = name ), 301 )
166-
167-
168- @ViewRegistrar ('/metapackage/<name>/related' )
169- def metapackage_related (name : str ) -> Response :
170- return flask .redirect (flask .url_for ('project_related' , name = name ), 301 )
171-
172-
173- @ViewRegistrar ('/metapackage/<name>/badges' )
174- def metapackage_badges (name : str ) -> Response :
175- return flask .redirect (flask .url_for ('project_badges' , name = name ), 301 )
176-
177-
178- @ViewRegistrar ('/metapackage/<name>/report' , methods = ['GET' , 'POST' ])
179- def metapackage_report (name : str ) -> Response :
180- return flask .redirect (flask .url_for ('project_report' , name = name ), 301 )
181-
182-
18345# active badges on smartmontools.org, lyx.org and others
18446@ViewRegistrar ('/badge/version-only-for-repo/<repo>/<name>.svg' )
18547def badge_version_only_for_repo (repo : str , name : str ) -> Response :
@@ -193,49 +55,3 @@ def badge_version_only_for_repo(repo: str, name: str) -> Response:
19355 ),
19456 301
19557 )
196-
197-
198- # /maintainer/*/problems: logs are poluted by spam requests from huawei cloud, recheck after banning it
199- # XXX: don't forget to remove test and get_db import along with this
200- @ViewRegistrar ('/maintainer/<maintainer>/problems' )
201- def maintainer_problems_legacy (maintainer : str ) -> Response :
202- # actual problems listing is tied to repository+maintainer pair,
203- # so determine most active repo and redirect to it
204-
205- maintainer = maintainer .lower ()
206-
207- maintainer_info = get_db ().get_maintainer_information (maintainer )
208-
209- if not maintainer_info or not maintainer_info ['num_projects_newest_per_repo' ]:
210- return (flask .render_template ('maintainer/404.html' , maintainer = maintainer ), 404 )
211-
212- bestrepo = max (
213- (
214- maintainer_info ['num_projects_newest_per_repo' ][repo ],
215- - maintainer_info ['num_projects_outdated_per_repo' ][repo ],
216- repometadata [repo ]['num_metapackages_newest' ],
217- repo
218- )
219- for repo in maintainer_info ['num_projects_newest_per_repo' ].keys ()
220- )[- 1 ]
221-
222- return flask .redirect (
223- flask .url_for (
224- 'maintainer_problems' ,
225- repo = bestrepo ,
226- maintainer = maintainer
227- ),
228- 301
229- )
230-
231-
232- # reposiotry template was pointing here, recheck after this is fixed
233- @ViewRegistrar ('/addrepo' )
234- def addrepo () -> Response :
235- return flask .redirect (flask .url_for ('docs_requirements' ), 301 )
236-
237-
238- # internal performance testing tool accessed it, recheck after this is fixed
239- @ViewRegistrar ('/about' )
240- def about () -> Response :
241- return flask .redirect (flask .url_for ('docs_about' ), 301 )
0 commit comments