Minecraft-Updater/parsers/paperMC.py

77 lines
2.7 KiB
Python
Raw Normal View History

from os import error
2021-12-14 18:09:16 -06:00
import requests
debug = False
if debug == True:
import logging
from requests import api
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
timeoutTime = 1
base_api_url = "https://papermc.io/api/v2"
def failCheck(response):
print("Status Code is: "+str(response.status_code))
if response.status_code != 200:
raise error
# Data Caching
dataCache = {}
def cacheData(function_name, cached_data):
print("Caching data!")
dataCache[function_name] = cached_data
2021-12-14 18:09:16 -06:00
# This function returns the versions from a project from the Paper API.
def getVersions(project):
2021-12-14 20:02:16 -06:00
print("Calling getVersions()...")
if "getVersions" in dataCache:
return dataCache["getVersions"]
2021-12-14 18:09:16 -06:00
response = requests.get(base_api_url+"/projects/"+project, timeout=timeoutTime)
failCheck(response)
2021-12-14 18:09:16 -06:00
api_response = response.json()
cacheData("getVersions", api_response['versions'])
2021-12-14 18:09:16 -06:00
return api_response['versions']
def getLatest(project):
2021-12-14 20:02:16 -06:00
print("Calling getLatest()...")
2021-12-14 18:09:16 -06:00
versions = getVersions(project)
return versions[-1]
def getBuildNumber(project, version):
2021-12-14 20:02:16 -06:00
print("Calling getBuildNumber()...")
if "getBuildNumber" in dataCache:
return dataCache["getBuildNumber"]
2021-12-14 18:09:16 -06:00
response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version, timeout=timeoutTime)
failCheck(response)
2021-12-14 18:09:16 -06:00
api_response = response.json()
cacheData("getBuildNumber", api_response['builds'])
2021-12-14 18:09:16 -06:00
return api_response['builds']
2021-12-14 20:02:16 -06:00
def getBuildInfo(project, version):
print("Calling getBuildInfo()...")
if "getBuildInfo" in dataCache:
return dataCache["getBuildInfo"]
2021-12-14 20:02:16 -06:00
buildID1 = getBuildNumber(project, version)
buildID = str(buildID1[-1])
response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID, timeout=timeoutTime)
failCheck(response)
2021-12-14 20:02:16 -06:00
api_response = response.json()
cacheData("getBuildInfo", api_response)
2021-12-14 20:02:16 -06:00
return api_response
2021-12-14 18:09:16 -06:00
2021-12-14 20:02:16 -06:00
def getJarInfo(project, version):
print("Calling getJarInfo()...")
buildInfo = getBuildInfo(project, version)
workingDict = buildInfo["downloads"]
workingDict2 = workingDict["application"]
return workingDict2
2021-12-14 18:09:16 -06:00
2021-12-14 20:02:16 -06:00
def downloadVersion(project, version):
print("Calling downloadVersion()...")
jarName = getJarInfo(project, version)
buildID1 = getBuildNumber(project, version)
buildID = str(buildID1[-1])
response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID+"/downloads/"+jarName["name"], stream=True, timeout=timeoutTime)
failCheck(response)
2021-12-14 20:02:16 -06:00
return response