@ -20,9 +20,42 @@ parser.add_argument('project', metavar='project', help='which project to query f
parser . add_argument ( ' action ' , metavar = ' action ' , help = ' what action to execute ' )
parser . add_argument ( ' subAction ' , metavar = ' subAction ' , help = ' what sub action to execute ' )
parser . add_argument ( ' -o ' , nargs = " ? " , help = ' Optional: Specify output filepath ' )
parser . add_argument ( ' -v ' , nargs = " ? " , help = ' Specify Minecraft Version to target ' )
args = parser . parse_args ( )
print ( " mcUp.py, written by Caleb Fontenot " )
print ( args . o )
#Downloader function
def download ( project , what ) :
versionToDownload = what
output = parsers . modrinth . getDownloadURL ( project , what )
response = requests . get ( output [ 0 ] , stream = True , timeout = 1 )
if args . o != None : # Check if user set an output filepath
output_file = args . o
else :
output_file = output [ 2 ]
with response as raw :
with open ( output_file , ' wb ' ) as file_object :
shutil . copyfileobj ( raw . raw , file_object )
print ( " Downloaded " + versionToDownload + " to " + output_file )
#Calculate hash, compare with API given hash
h_sha1 = hashlib . sha1 ( )
with open ( output_file , ' rb ' ) as file_object :
chunk = 0
while chunk != b ' ' :
chunk = file_object . read ( 1024 )
h_sha1 . update ( chunk )
print ( " API SHA 1: " + str ( output [ 1 ] ) )
print ( " Our calculated SHA 1: " + str ( h_sha1 . hexdigest ( ) ) )
if h_sha1 . hexdigest ( ) == output [ 1 ] :
print ( " sha1sum of downloaded file matches the sum that the API gave, jar is safe to use " )
else :
raise MismatchSHA1Error
# determine if args.v has a value
def version_for_minecraft ( ) :
if args . v != None :
return True
else :
return False
# PaperMC command functions
def paperMC ( project , action , subAction ) :
if action == " get " :
@ -70,37 +103,19 @@ def modrinth(project, action, subAction):
print ( parsers . modrinth . getLatestStable ( project ) )
if subAction == " get_URL " :
print ( parsers . modrinth . getDownloadURL ( project , parsers . modrinth . getLatestVersion ( project ) ) )
if action == " download " :
if subAction == " stable " :
download ( project , parsers . modrinth . getLatestStable ( project ) )
if version_for_minecraft ( ) == True :
download ( project , parsers . modrinth . getForMinecraftVersion ( project , args . v , " stable " ) )
else :
download ( project , parsers . modrinth . getLatestStable ( project ) )
if subAction == " latest " :
download ( project , parsers . modrinth . getLatestVersion ( project ) )
def download ( project , what ) :
versionToDownload = what
output = parsers . modrinth . getDownloadURL ( project , what )
response = requests . get ( output [ 0 ] , stream = True , timeout = 1 )
if args . o != None : # Check if user set an output filepath
output_file = args . o
else :
output_file = output [ 2 ]
with response as raw :
with open ( output_file , ' wb ' ) as file_object :
shutil . copyfileobj ( raw . raw , file_object )
print ( " Downloaded " + versionToDownload + " to " + output_file )
#Calculate hash, compare with API given hash
h_sha1 = hashlib . sha1 ( )
with open ( output_file , ' rb ' ) as file_object :
chunk = 0
while chunk != b ' ' :
chunk = file_object . read ( 1024 )
h_sha1 . update ( chunk )
print ( " API SHA 1: " + str ( output [ 1 ] ) )
print ( " Our calculated SHA 1: " + str ( h_sha1 . hexdigest ( ) ) )
if h_sha1 . hexdigest ( ) == output [ 1 ] :
print ( " sha1sum of downloaded file matches the sum that the API gave, jar is safe to use " )
else :
raise MismatchSHA1Error
if version_for_minecraft ( ) == True :
download ( project , parsers . modrinth . getForMinecraftVersion ( project , args . v , " latest " ) )
else :
download ( project , parsers . modrinth . getLatestVersion ( project ) )
#print(parsers.modrinth.getForMinecraftVersion(project, args.v))
# Determine which API parser to use:
if args . api == " paperMC " :