Refactor/remove paper references

This commit is contained in:
amcmanu3 2024-05-04 20:01:13 -04:00
parent 3c0df76c4a
commit 33f2693bee
2 changed files with 12 additions and 110 deletions

View File

@ -13,8 +13,6 @@ from app.classes.shared.websocket_manager import WebSocketManager
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Temp type var until sjars restores generic fetchTypes0 # Temp type var until sjars restores generic fetchTypes0
SERVERJARS_TYPES = ["modded", "proxies", "servers", "vanilla"]
PAPERJARS = ["paper", "folia"]
class BigBucket: class BigBucket:
@ -23,68 +21,7 @@ class BigBucket:
self.base_url = "https://jars.arcadiatech.org" self.base_url = "https://jars.arcadiatech.org"
self.paper_base = "https://api.papermc.io" self.paper_base = "https://api.papermc.io"
@staticmethod def _read_cache(self) -> dict:
def get_paper_jars():
return PAPERJARS
def get_paper_versions(self, project):
"""
Retrieves a list of versions for a specified project from the PaperMC API.
Parameters:
project (str): The project name to query for available versions.
Returns:
list: A list of version strings available for the project. Returns an empty
list if the API call fails or if no versions are found.
This function makes a GET request to the PaperMC API to fetch available project
versions, The versions are returned in reverse order, with the most recent
version first.
"""
try:
response = requests.get(
f"{self.paper_base}/v2/projects/{project}/", timeout=2
)
response.raise_for_status()
api_data = response.json()
except Exception as e:
logger.error(f"Error loading project versions for {project}: {e}")
return []
versions = api_data.get("versions", [])
versions.reverse() # Ensure the most recent version comes first
return versions
def get_paper_build(self, project, version):
"""
Fetches the latest build for a specified project and version from PaperMC API.
Parameters:
project (str): Project name, typically a server software like 'paper'.
version (str): Project version to fetch the build number for.
Returns:
int or None: Latest build number if successful, None if not or on error.
This method attempts to query the PaperMC API for the latest build and
handles exceptions by logging errors and returning None.
"""
try:
response = requests.get(
f"{self.paper_base}/v2/projects/{project}/versions/{version}/builds/",
timeout=2,
)
response.raise_for_status()
api_data = response.json()
except Exception as e:
logger.error(f"Error fetching build for {project} {version}: {e}")
return None
builds = api_data.get("builds", [])
return builds[-1] if builds else None
def _read_cache(self):
cache_file = self.helper.big_bucket_cache cache_file = self.helper.big_bucket_cache
cache = {} cache = {}
try: try:
@ -100,14 +37,17 @@ class BigBucket:
data = self._read_cache() data = self._read_cache()
return data.get("types") return data.get("types")
def _check_bucket_alive(self): def _check_bucket_alive(self) -> bool:
logger.info("Checking Big Bucket status") logger.info("Checking Big Bucket status")
check_url = f"{self.base_url}/manifest.json" check_url = f"{self.base_url}/healthcheck"
try: try:
response = requests.get(check_url, timeout=2) response = requests.get(check_url, timeout=2)
response_json = response.json()
if response.status_code in [200, 201]: if (
response.status_code in [200, 201]
and response_json.get("status") == "ok"
):
logger.info("Big bucket is alive and responding as expected") logger.info("Big bucket is alive and responding as expected")
return True return True
except Exception as e: except Exception as e:
@ -186,16 +126,10 @@ class BigBucket:
logger.info("Automatic cache refresh initiated due to old cache.") logger.info("Automatic cache refresh initiated due to old cache.")
self._refresh_cache() self._refresh_cache()
def get_fetch_url(self, server, version): def get_fetch_url(self, server, version) -> str:
""" """
Constructs the URL for downloading a server JAR file based on the server type. Constructs the URL for downloading a server JAR file based on the server type.
Supports two main types of server JAR sources:
- big bucket API for servers not in PAPERJARS.
- Paper API for servers available through the Paper project.
Parameters: Parameters:
jar (str): Name of the JAR file.
server (str): Server software name (e.g., "paper"). server (str): Server software name (e.g., "paper").
version (str): Server version. version (str): Server version.
@ -203,38 +137,9 @@ class BigBucket:
str or None: URL for downloading the JAR file, or None if URL cannot be str or None: URL for downloading the JAR file, or None if URL cannot be
constructed or an error occurs. constructed or an error occurs.
""" """
print(self._read_cache()["types"][server]["versions"][version]["url"][0])
try: try:
# Check if the server type is not specifically handled by Paper. # Read cache file for URL that is in a list of one item
if server not in PAPERJARS: return self._read_cache()["types"][server]["versions"][version]["url"][0]
return self._read_cache()["types"][server]["versions"][version]["url"][
0
]
# For Paper servers, attempt to get the build for the specified version.
paper_build_info = self.get_paper_build(server, version)
if paper_build_info is None:
# Log an error or handle the case where paper_build_info is None
logger.error(
"Error: Unable to get build information for server:"
f" {server}, version: {version}"
)
return None
build = paper_build_info.get("build")
if not build:
# Log an error or handle the case where build is None or not found
logger.error(
f"Error: Build number not found for server:"
f" {server}, version: {version}"
)
return None
# Construct and return the URL for downloading the Paper server JAR.
return (
f"{self.paper_base}/v2/projects/{server}/versions/{version}/"
f"builds/{build}/downloads/{server}-{version}-{build}.jar"
)
except Exception as e: except Exception as e:
logger.error(f"An error occurred while constructing fetch URL: {e}") logger.error(f"An error occurred while constructing fetch URL: {e}")
return None return None

View File

@ -569,10 +569,7 @@ class Controller:
if data["create_type"] == "minecraft_java": if data["create_type"] == "minecraft_java":
if root_create_data["create_type"] == "download_jar": if root_create_data["create_type"] == "download_jar":
# modded update urls from server jars will only update the installer # modded update urls from server jars will only update the installer
if ( if create_data["type"] != "forge-installer":
create_data["type"] != "forge-installer"
and create_data["type"] not in BigBucket.get_paper_jars()
):
server_obj = self.servers.get_server_obj(new_server_id) server_obj = self.servers.get_server_obj(new_server_id)
url = self.big_bucket.get_fetch_url( url = self.big_bucket.get_fetch_url(
create_data["type"], create_data["version"] create_data["type"], create_data["version"]