Changeset View
Changeset View
Standalone View
Standalone View
swh/web/browse/views/snapshot.py
# Copyright (C) 2018-2019 The Software Heritage developers | # Copyright (C) 2018-2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from typing import Optional | |||||
from django.http import HttpRequest, HttpResponse | |||||
from django.shortcuts import redirect | from django.shortcuts import redirect | ||||
from swh.web.browse.browseurls import browse_route | from swh.web.browse.browseurls import browse_route | ||||
from swh.web.browse.snapshot_context import ( | from swh.web.browse.snapshot_context import ( | ||||
browse_snapshot_branches, | browse_snapshot_branches, | ||||
browse_snapshot_directory, | browse_snapshot_directory, | ||||
browse_snapshot_log, | browse_snapshot_log, | ||||
browse_snapshot_releases, | browse_snapshot_releases, | ||||
get_snapshot_context, | get_snapshot_context, | ||||
) | ) | ||||
from swh.web.common.exc import BadInputExc | from swh.web.common.exc import BadInputExc | ||||
from swh.web.common.utils import redirect_to_new_route, reverse | from swh.web.common.utils import redirect_to_new_route, reverse | ||||
def get_snapshot_from_request(request): | def get_snapshot_from_request(request: HttpRequest) -> str: | ||||
snapshot = request.GET.get("snapshot") | snapshot = request.GET.get("snapshot") | ||||
if snapshot: | if snapshot: | ||||
return snapshot | return snapshot | ||||
if request.GET.get("origin_url") is None: | if request.GET.get("origin_url") is None: | ||||
raise BadInputExc("An origin URL must be provided as a query parameter.") | raise BadInputExc("An origin URL must be provided as a query parameter.") | ||||
return get_snapshot_context( | return get_snapshot_context( | ||||
origin_url=request.GET.get("origin_url"), timestamp=request.GET.get("timestamp") | origin_url=request.GET.get("origin_url"), timestamp=request.GET.get("timestamp") | ||||
)["snapshot_id"] | )["snapshot_id"] | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/", | ||||
view_name="browse-snapshot", | view_name="browse-snapshot", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_browse(request, snapshot_id): | def snapshot_browse(request: HttpRequest, snapshot_id: str) -> HttpResponse: | ||||
"""Django view for browsing the content of a snapshot. | """Django view for browsing the content of a snapshot. | ||||
The url that points to it is :http:get:`/browse/snapshot/(snapshot_id)/` | The url that points to it is :http:get:`/browse/snapshot/(snapshot_id)/` | ||||
""" | """ | ||||
browse_snapshot_url = reverse( | browse_snapshot_url = reverse( | ||||
"browse-snapshot-directory", | "browse-snapshot-directory", | ||||
url_args={"snapshot_id": snapshot_id}, | url_args={"snapshot_id": snapshot_id}, | ||||
query_params=request.GET, | query_params=request.GET, | ||||
) | ) | ||||
return redirect(browse_snapshot_url) | return redirect(browse_snapshot_url) | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/directory/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/directory/", | ||||
view_name="browse-snapshot-directory", | view_name="browse-snapshot-directory", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_directory_browse(request, snapshot_id): | def snapshot_directory_browse(request: HttpRequest, snapshot_id: str) -> HttpResponse: | ||||
"""Django view for browsing the content of a directory collected | """Django view for browsing the content of a directory collected | ||||
in a snapshot. | in a snapshot. | ||||
The URL that points to it is :http:get:`/browse/snapshot/(snapshot_id)/directory/` | The URL that points to it is :http:get:`/browse/snapshot/(snapshot_id)/directory/` | ||||
""" | """ | ||||
return browse_snapshot_directory( | return browse_snapshot_directory( | ||||
request, | request, | ||||
snapshot_id=snapshot_id, | snapshot_id=snapshot_id, | ||||
path=request.GET.get("path"), | path=request.GET.get("path"), | ||||
origin_url=request.GET.get("origin_url"), | origin_url=request.GET.get("origin_url"), | ||||
) | ) | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/directory/(?P<path>.+)/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/directory/(?P<path>.+)/", | ||||
view_name="browse-snapshot-directory-legacy", | view_name="browse-snapshot-directory-legacy", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_directory_browse_legacy(request, snapshot_id, path=None): | def snapshot_directory_browse_legacy( | ||||
request: HttpRequest, snapshot_id: str, path: Optional[str] = None | |||||
) -> HttpResponse: | |||||
"""Django view for browsing the content of a directory collected | """Django view for browsing the content of a directory collected | ||||
in a snapshot. | in a snapshot. | ||||
The URL that points to it is | The URL that points to it is | ||||
:http:get:`/browse/snapshot/(snapshot_id)/directory/(path)/` | :http:get:`/browse/snapshot/(snapshot_id)/directory/(path)/` | ||||
""" | """ | ||||
origin_url = request.GET.get("origin_url", None) | origin_url = request.GET.get("origin_url", None) | ||||
if not origin_url: | if not origin_url: | ||||
origin_url = request.GET.get("origin", None) | origin_url = request.GET.get("origin", None) | ||||
return browse_snapshot_directory( | return browse_snapshot_directory( | ||||
request, snapshot_id=snapshot_id, path=path, origin_url=origin_url | request, snapshot_id=snapshot_id, path=path, origin_url=origin_url | ||||
) | ) | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/content/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/content/", | ||||
view_name="browse-snapshot-content", | view_name="browse-snapshot-content", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_content_browse(request, snapshot_id): | def snapshot_content_browse(request: HttpRequest, snapshot_id: str) -> HttpResponse: | ||||
""" | """ | ||||
This route is deprecated; use http:get:`/browse/content` instead | This route is deprecated; use http:get:`/browse/content` instead | ||||
Django view that produces an HTML display of a content | Django view that produces an HTML display of a content | ||||
collected in a snapshot. | collected in a snapshot. | ||||
The url that points to it is :http:get:`/browse/snapshot/(snapshot_id)/content/` | The url that points to it is :http:get:`/browse/snapshot/(snapshot_id)/content/` | ||||
""" | """ | ||||
return redirect_to_new_route(request, "browse-content") | return redirect_to_new_route(request, "browse-content") | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/content/(?P<path>.+)/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/content/(?P<path>.+)/", | ||||
view_name="browse-snapshot-content-legacy", | view_name="browse-snapshot-content-legacy", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_content_browse_legacy(request, snapshot_id, path): | def snapshot_content_browse_legacy( | ||||
request: HttpRequest, snapshot_id: str, path: str | |||||
) -> HttpResponse: | |||||
""" | """ | ||||
This route is deprecated; use http:get:`/browse/content` instead | This route is deprecated; use http:get:`/browse/content` instead | ||||
Django view that produces an HTML display of a content | Django view that produces an HTML display of a content | ||||
collected in a snapshot. | collected in a snapshot. | ||||
The url that points to it is | The url that points to it is | ||||
:http:get:`/browse/snapshot/(snapshot_id)/content/(path)/` | :http:get:`/browse/snapshot/(snapshot_id)/content/(path)/` | ||||
""" | """ | ||||
return redirect_to_new_route(request, "browse-content") | return redirect_to_new_route(request, "browse-content") | ||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/log/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/log/", | ||||
r"snapshot/log/", | r"snapshot/log/", | ||||
view_name="browse-snapshot-log", | view_name="browse-snapshot-log", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_log_browse(request, snapshot_id=None): | def snapshot_log_browse( | ||||
request: HttpRequest, snapshot_id: Optional[str] = None | |||||
) -> HttpResponse: | |||||
"""Django view that produces an HTML display of revisions history (aka | """Django view that produces an HTML display of revisions history (aka | ||||
the commit log) collected in a snapshot. | the commit log) collected in a snapshot. | ||||
The URLs that point to it are | The URLs that point to it are | ||||
:http:get:`/browse/snapshot/(snapshot_id)/log/` and | :http:get:`/browse/snapshot/(snapshot_id)/log/` and | ||||
:http:get:`/browse/snapshot/log/` | :http:get:`/browse/snapshot/log/` | ||||
""" | """ | ||||
if snapshot_id is None: | if snapshot_id is None: | ||||
Show All 16 Lines | |||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/branches/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/branches/", | ||||
r"snapshot/branches/", | r"snapshot/branches/", | ||||
view_name="browse-snapshot-branches", | view_name="browse-snapshot-branches", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_branches_browse(request, snapshot_id=None): | def snapshot_branches_browse( | ||||
request: HttpRequest, snapshot_id: Optional[str] = None | |||||
) -> HttpResponse: | |||||
"""Django view that produces an HTML display of the list of branches | """Django view that produces an HTML display of the list of branches | ||||
collected in a snapshot. | collected in a snapshot. | ||||
The URLs that point to it are | The URLs that point to it are | ||||
:http:get:`/browse/snapshot/(snapshot_id)/branches/` and | :http:get:`/browse/snapshot/(snapshot_id)/branches/` and | ||||
:http:get:`/browse/snapshot/branches/` | :http:get:`/browse/snapshot/branches/` | ||||
""" | """ | ||||
if snapshot_id is None: | if snapshot_id is None: | ||||
Show All 18 Lines | |||||
@browse_route( | @browse_route( | ||||
r"snapshot/(?P<snapshot_id>[0-9a-f]+)/releases/", | r"snapshot/(?P<snapshot_id>[0-9a-f]+)/releases/", | ||||
r"snapshot/releases/", | r"snapshot/releases/", | ||||
view_name="browse-snapshot-releases", | view_name="browse-snapshot-releases", | ||||
checksum_args=["snapshot_id"], | checksum_args=["snapshot_id"], | ||||
) | ) | ||||
def snapshot_releases_browse(request, snapshot_id=None): | def snapshot_releases_browse( | ||||
request: HttpRequest, snapshot_id: Optional[str] = None | |||||
) -> HttpResponse: | |||||
"""Django view that produces an HTML display of the list of releases | """Django view that produces an HTML display of the list of releases | ||||
collected in a snapshot. | collected in a snapshot. | ||||
The URLs that point to it are | The URLs that point to it are | ||||
:http:get:`/browse/snapshot/(snapshot_id)/releases/` | :http:get:`/browse/snapshot/(snapshot_id)/releases/` | ||||
:http:get:`/browse/snapshot/releases/` | :http:get:`/browse/snapshot/releases/` | ||||
""" | """ | ||||
if snapshot_id is None: | if snapshot_id is None: | ||||
Show All 18 Lines |