Changeset View
Changeset View
Standalone View
Standalone View
swh/web/browse/snapshot_context.py
Show All 10 Lines | |||||
from django.core.cache import cache | from django.core.cache import cache | ||||
from django.shortcuts import render | from django.shortcuts import render | ||||
from django.template.defaultfilters import filesizeformat | from django.template.defaultfilters import filesizeformat | ||||
from django.utils.html import escape | from django.utils.html import escape | ||||
import sentry_sdk | import sentry_sdk | ||||
from swh.model.identifiers import persistent_identifier, snapshot_identifier | from swh.model.identifiers import ( | ||||
persistent_identifier, | |||||
snapshot_identifier, | |||||
CONTENT, | |||||
) | |||||
from swh.web.browse.utils import ( | from swh.web.browse.utils import ( | ||||
get_directory_entries, | get_directory_entries, | ||||
gen_directory_link, | gen_directory_link, | ||||
gen_revision_link, | gen_revision_link, | ||||
request_content, | request_content, | ||||
gen_content_link, | gen_content_link, | ||||
prepare_content_for_display, | prepare_content_for_display, | ||||
Show All 9 Lines | |||||
from swh.web.common import service, highlightjs | from swh.web.common import service, highlightjs | ||||
from swh.web.common.exc import handle_view_exception, NotFoundExc, BadInputExc | from swh.web.common.exc import handle_view_exception, NotFoundExc, BadInputExc | ||||
from swh.web.common.origin_visits import get_origin_visit | from swh.web.common.origin_visits import get_origin_visit | ||||
from swh.web.common.typing import ( | from swh.web.common.typing import ( | ||||
OriginInfo, | OriginInfo, | ||||
SnapshotBranchInfo, | SnapshotBranchInfo, | ||||
SnapshotReleaseInfo, | SnapshotReleaseInfo, | ||||
SnapshotContext, | SnapshotContext, | ||||
ContentMetadata, | |||||
) | ) | ||||
from swh.web.common.utils import ( | from swh.web.common.utils import ( | ||||
reverse, | reverse, | ||||
gen_path_info, | gen_path_info, | ||||
format_utc_iso_date, | format_utc_iso_date, | ||||
swh_object_icons, | swh_object_icons, | ||||
) | ) | ||||
from swh.web.config import get_config | from swh.web.config import get_config | ||||
▲ Show 20 Lines • Show All 799 Lines • ▼ Show 20 Lines | try: | ||||
branch_name=request.GET.get("branch"), | branch_name=request.GET.get("branch"), | ||||
release_name=request.GET.get("release"), | release_name=request.GET.get("release"), | ||||
revision_id=request.GET.get("revision"), | revision_id=request.GET.get("revision"), | ||||
) | ) | ||||
root_directory = snapshot_context["root_directory"] | root_directory = snapshot_context["root_directory"] | ||||
sha1_git = None | sha1_git = None | ||||
query_string = None | query_string = None | ||||
content_data = None | content_data = {} | ||||
directory_id = None | directory_id = None | ||||
split_path = path.split("/") | split_path = path.split("/") | ||||
filename = split_path[-1] | filename = split_path[-1] | ||||
filepath = path[: -len(filename)] | filepath = path[: -len(filename)] | ||||
if root_directory: | if root_directory: | ||||
content_info = service.lookup_directory_with_path(root_directory, path) | content_info = service.lookup_directory_with_path(root_directory, path) | ||||
sha1_git = content_info["target"] | sha1_git = content_info["target"] | ||||
query_string = "sha1_git:" + sha1_git | query_string = "sha1_git:" + sha1_git | ||||
content_data = request_content(query_string, raise_if_unavailable=False) | content_data = request_content(query_string, raise_if_unavailable=False) | ||||
if filepath: | if filepath: | ||||
dir_info = service.lookup_directory_with_path(root_directory, filepath) | dir_info = service.lookup_directory_with_path(root_directory, filepath) | ||||
directory_id = dir_info["target"] | directory_id = dir_info["target"] | ||||
else: | else: | ||||
directory_id = root_directory | directory_id = root_directory | ||||
except Exception as exc: | except Exception as exc: | ||||
return handle_view_exception(request, exc) | return handle_view_exception(request, exc) | ||||
revision_id = snapshot_context["revision_id"] | revision_id = snapshot_context["revision_id"] | ||||
origin_info = snapshot_context["origin_info"] | origin_info = snapshot_context["origin_info"] | ||||
visit_info = snapshot_context["visit_info"] | visit_info = snapshot_context["visit_info"] | ||||
snapshot_id = snapshot_context["snapshot_id"] | snapshot_id = snapshot_context["snapshot_id"] | ||||
content = None | if content_data.get("raw_data") is not None: | ||||
language = None | |||||
mimetype = None | |||||
if content_data and content_data["raw_data"] is not None: | |||||
content_display_data = prepare_content_for_display( | content_display_data = prepare_content_for_display( | ||||
content_data["raw_data"], content_data["mimetype"], path | content_data["raw_data"], content_data["mimetype"], path | ||||
) | ) | ||||
content = content_display_data["content_data"] | content_data.update(content_display_data) | ||||
language = content_display_data["language"] | |||||
mimetype = content_display_data["mimetype"] | |||||
# Override language with user-selected language | # Override language with user-selected language | ||||
if selected_language is not None: | if selected_language is not None: | ||||
language = selected_language | content_data["language"] = selected_language | ||||
available_languages = None | available_languages = None | ||||
if mimetype and "text/" in mimetype: | if content_data.get("mimetype") is not None and "text/" in content_data["mimetype"]: | ||||
available_languages = highlightjs.get_supported_languages() | available_languages = highlightjs.get_supported_languages() | ||||
breadcrumbs = _build_breadcrumbs(snapshot_context, filepath) | breadcrumbs = _build_breadcrumbs(snapshot_context, filepath) | ||||
breadcrumbs.append({"name": filename, "url": None}) | breadcrumbs.append({"name": filename, "url": None}) | ||||
browse_content_link = gen_content_link(sha1_git) | browse_content_link = gen_content_link(sha1_git) | ||||
content_raw_url = None | content_raw_url = None | ||||
if query_string: | if query_string: | ||||
content_raw_url = reverse( | content_raw_url = reverse( | ||||
"browse-content-raw", | "browse-content-raw", | ||||
url_args={"query_string": query_string}, | url_args={"query_string": query_string}, | ||||
query_params={"filename": filename}, | query_params={"filename": filename}, | ||||
) | ) | ||||
browse_rev_link = gen_revision_link(revision_id) | browse_rev_link = gen_revision_link(revision_id) | ||||
browse_dir_link = gen_directory_link(directory_id) | browse_dir_link = gen_directory_link(directory_id) | ||||
content_metadata = { | content_checksums = content_data.get("checksums", {}) | ||||
"context-independent content": browse_content_link, | |||||
"path": None, | |||||
"filename": None, | |||||
"directory": directory_id, | |||||
"context-independent directory": browse_dir_link, | |||||
"revision": revision_id, | |||||
"context-independent revision": browse_rev_link, | |||||
"snapshot": snapshot_id, | |||||
} | |||||
cnt_sha1_git = None | |||||
content_size = None | |||||
error_code = 200 | |||||
error_description = "" | |||||
error_message = "" | |||||
if content_data: | |||||
for checksum in content_data["checksums"].keys(): | |||||
content_metadata[checksum] = content_data["checksums"][checksum] | |||||
content_metadata["mimetype"] = content_data["mimetype"] | |||||
content_metadata["encoding"] = content_data["encoding"] | |||||
content_metadata["size"] = filesizeformat(content_data["length"]) | |||||
content_metadata["language"] = content_data["language"] | |||||
content_metadata["licenses"] = content_data["licenses"] | |||||
content_metadata["path"] = "/" + filepath | |||||
content_metadata["filename"] = filename | |||||
cnt_sha1_git = content_data["checksums"]["sha1_git"] | |||||
content_size = content_data["length"] | |||||
error_code = content_data["error_code"] | |||||
error_message = content_data["error_message"] | |||||
error_description = content_data["error_description"] | |||||
if origin_info: | |||||
content_metadata["origin url"] = origin_info["url"] | |||||
content_metadata["origin visit date"] = format_utc_iso_date(visit_info["date"]) | |||||
content_metadata["origin visit type"] = visit_info["type"] | |||||
browse_snapshot_link = gen_snapshot_link(snapshot_id) | |||||
content_metadata["context-independent snapshot"] = browse_snapshot_link | |||||
swh_objects = [ | swh_objects = [ | ||||
{"type": "content", "id": cnt_sha1_git}, | {"type": "content", "id": content_checksums.get("sha1_git")}, | ||||
{"type": "directory", "id": directory_id}, | {"type": "directory", "id": directory_id}, | ||||
{"type": "revision", "id": revision_id}, | {"type": "revision", "id": revision_id}, | ||||
{"type": "snapshot", "id": snapshot_id}, | {"type": "snapshot", "id": snapshot_id}, | ||||
] | ] | ||||
visit_date = None | |||||
visit_type = None | |||||
if visit_info: | |||||
visit_date = format_utc_iso_date(visit_info["date"]) | |||||
visit_type = visit_info["type"] | |||||
release_id = snapshot_context["release_id"] | release_id = snapshot_context["release_id"] | ||||
browse_rel_link = None | |||||
if release_id: | if release_id: | ||||
swh_objects.append({"type": "release", "id": release_id}) | swh_objects.append({"type": "release", "id": release_id}) | ||||
browse_rel_link = gen_release_link(release_id) | browse_rel_link = gen_release_link(release_id) | ||||
content_metadata["release"] = release_id | |||||
content_metadata["context-independent release"] = browse_rel_link | content_metadata = ContentMetadata( | ||||
object_type=CONTENT, | |||||
sha1=content_checksums.get("sha1"), | |||||
sha1_git=content_checksums.get("sha1_git"), | |||||
sha256=content_checksums.get("sha256"), | |||||
blake2s256=content_checksums.get("blake2s256"), | |||||
content_url=browse_content_link, | |||||
mimetype=content_data.get("mimetype"), | |||||
encoding=content_data.get("encoding"), | |||||
size=filesizeformat(content_data.get("length", 0)), | |||||
language=content_data.get("language"), | |||||
licenses=content_data.get("licenses"), | |||||
path=f"/{filepath}", | |||||
filename=filename, | |||||
directory=directory_id, | |||||
directory_url=browse_dir_link, | |||||
revision=revision_id, | |||||
revision_url=browse_rev_link, | |||||
release=release_id, | |||||
release_url=browse_rel_link, | |||||
snapshot=snapshot_id, | |||||
snapshot_url=gen_snapshot_link(snapshot_id), | |||||
origin_url=origin_url, | |||||
visit_date=visit_date, | |||||
visit_type=visit_type, | |||||
) | |||||
swh_ids = get_swh_persistent_ids(swh_objects, snapshot_context) | swh_ids = get_swh_persistent_ids(swh_objects, snapshot_context) | ||||
content_path = "/".join([bc["name"] for bc in breadcrumbs]) | content_path = "/".join([bc["name"] for bc in breadcrumbs]) | ||||
context_found = "snapshot: %s" % snapshot_context["snapshot_id"] | context_found = "snapshot: %s" % snapshot_context["snapshot_id"] | ||||
if origin_info: | if origin_info: | ||||
context_found = "origin: %s" % origin_info["url"] | context_found = "origin: %s" % origin_info["url"] | ||||
heading = "Content - %s - %s - %s" % ( | heading = "Content - %s - %s - %s" % ( | ||||
Show All 12 Lines | ): | ||||
return render( | return render( | ||||
request, | request, | ||||
"browse/content.html", | "browse/content.html", | ||||
{ | { | ||||
"heading": heading, | "heading": heading, | ||||
"swh_object_name": "Content", | "swh_object_name": "Content", | ||||
"swh_object_metadata": content_metadata, | "swh_object_metadata": content_metadata, | ||||
"content": content, | "content": content_data.get("content_data"), | ||||
"content_size": content_size, | "content_size": content_data.get("length"), | ||||
"max_content_size": content_display_max_size, | "max_content_size": content_display_max_size, | ||||
"mimetype": mimetype, | "mimetype": content_data.get("mimetype"), | ||||
"language": language, | "language": content_data.get("language"), | ||||
"available_languages": available_languages, | "available_languages": available_languages, | ||||
"breadcrumbs": breadcrumbs if root_directory else [], | "breadcrumbs": breadcrumbs if root_directory else [], | ||||
"top_right_link": top_right_link, | "top_right_link": top_right_link, | ||||
"snapshot_context": snapshot_context, | "snapshot_context": snapshot_context, | ||||
"vault_cooking": None, | "vault_cooking": None, | ||||
"show_actions_menu": True, | "show_actions_menu": True, | ||||
"swh_ids": swh_ids, | "swh_ids": swh_ids, | ||||
"error_code": error_code, | "error_code": content_data.get("error_code"), | ||||
"error_message": error_message, | "error_message": content_data.get("error_message"), | ||||
"error_description": error_description, | "error_description": content_data.get("error_description"), | ||||
}, | }, | ||||
status=error_code, | status=content_data.get("error_code", 200), | ||||
) | ) | ||||
PER_PAGE = 100 | PER_PAGE = 100 | ||||
def browse_snapshot_log(request, snapshot_id=None, origin_url=None, timestamp=None): | def browse_snapshot_log(request, snapshot_id=None, origin_url=None, timestamp=None): | ||||
""" | """ | ||||
▲ Show 20 Lines • Show All 389 Lines • Show Last 20 Lines |