Source code for swh.vault.interface
# Copyright (C) 2017-2023  The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
from datetime import timedelta
from typing import Any, Dict, List, Optional, Tuple
from typing_extensions import Protocol, runtime_checkable
from swh.core.api import remote_api_endpoint
from swh.model.swhids import CoreSWHID
[docs]
@runtime_checkable
class VaultInterface(Protocol):
    """
    Backend Interface for the Software Heritage vault.
    """
[docs]
    @remote_api_endpoint("fetch")
    def fetch(self, bundle_type: str, swhid: CoreSWHID) -> Optional[bytes]:
        """Fetch information from a bundle"""
        ... 
[docs]
    @remote_api_endpoint("download_url")
    def download_url(
        self,
        bundle_type: str,
        swhid: CoreSWHID,
        content_disposition: Optional[str] = None,
        expiry: Optional[timedelta] = None,
    ) -> Optional[str]:
        """Obtain bundle direct download link if the vault cache backend supports it."""
        ... 
[docs]
    @remote_api_endpoint("cook")
    def cook(
        self, bundle_type: str, swhid: CoreSWHID, email: Optional[str] = None
    ) -> Dict[str, Any]:
        """Main entry point for cooking requests. This starts a cooking task if
        needed, and add the given e-mail to the notify list"""
        ... 
[docs]
    @remote_api_endpoint("progress")
    def progress(self, bundle_type: str, swhid: CoreSWHID): ... 
    # Cookers endpoints
[docs]
    @remote_api_endpoint("set_progress")
    def set_progress(self, bundle_type: str, swhid: CoreSWHID, progress: str) -> None:
        """Set the cooking progress of a bundle"""
        ... 
[docs]
    @remote_api_endpoint("set_status")
    def set_status(self, bundle_type: str, swhid: CoreSWHID, status: str) -> bool:
        """Set the cooking status of a bundle"""
        ... 
[docs]
    @remote_api_endpoint("put_bundle")
    def put_bundle(self, bundle_type: str, swhid: CoreSWHID, bundle):
        """Store bundle in vault cache"""
        ... 
[docs]
    @remote_api_endpoint("send_notif")
    def send_notif(self, bundle_type: str, swhid: CoreSWHID):
        """Send all the e-mails in the notification list of a bundle"""
        ... 
    # Batch endpoints
[docs]
    @remote_api_endpoint("batch_cook")
    def batch_cook(self, batch: List[Tuple[str, str]]) -> int:
        """Cook a batch of bundles and returns the cooking id."""
        ... 
[docs]
    @remote_api_endpoint("batch_progress")
    def batch_progress(self, batch_id: int) -> Dict[str, Any]:
        """Fetch information from a batch of bundles"""
        ...