Source code for mcph.library_manager.spigot

"""Spigot library manager."""
from typing import Any, Dict, Optional

import requests
from requests.models import Response

from mcph.library_manager.abstract import AbstractLibraryManager


[docs]class SpigotLibraryManager(AbstractLibraryManager): """Library manager for ``spigotmc.org``."""
[docs] def get_latest_version(self, plugin_name: str) -> str: """Getter for latest plugin version. Args: plugin_name: Plugin name to check. Returns: String with the latest plugin version or "Not Found" if we can't find plugin. """ plugin_data = self.get_plugin_data(plugin_name) if plugin_data is None: return "Not Found" plugin_id = plugin_data["id"] latest_version: str = self._api_request(f"resources/{plugin_id}/versions/latest").json()["name"] return latest_version
[docs] def get_plugin_data(self, plugin_name: str) -> Optional[Dict[str, Any]]: # type: ignore[misc] """Getter for plugin data. Args: plugin_name: Name of plugin to check. Returns: Parsed JSON answer or None if no plugins found. """ try: to_return: Dict[str, Any] = self._api_request( # type: ignore[misc] f"search/resources/{plugin_name}?field=name&sort=-downloads" ).json()[0] return to_return except IndexError: return None
[docs] def _api_request(self, url: str) -> Response: """Perform API requests to Spiget. Args: url: URL to request. Returns: Raw answer. """ headers = {"User-Agent": "mcph"} return requests.get("https://api.spiget.org/v2/" + url, headers=headers)