mirror of
				https://github.com/iiab/iiab.git
				synced 2025-03-09 15:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			183 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python3
 | |
| # Auto-calculate IIAB + EduPack disk space needs, in advance [& design review]
 | |
| # https://github.com/iiab/iiab/pull/3594
 | |
| 
 | |
| import os, sys, syslog
 | |
| from datetime import date
 | |
| import pwd, grp
 | |
| import shutil
 | |
| import argparse
 | |
| import sqlite3
 | |
| import iiab.iiab_lib as iiab
 | |
| import iiab.adm_lib as adm
 | |
| import requests
 | |
| import json
 | |
| 
 | |
| all_menu_defs = adm.get_all_menu_defs()
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(description="Get size for item.")
 | |
|     parser.add_argument("name", help="Name item.")
 | |
| 
 | |
|     # menu_dir
 | |
|     args =  parser.parse_args()
 | |
| 
 | |
|     name = args.name
 | |
| 
 | |
|     content= get_item_size(name)
 | |
| 
 | |
|     #print('size: ',iiab.human_readable(content["size"]))
 | |
|     print(f'content ', content)
 | |
| 
 | |
|     sys.exit()
 | |
| 
 | |
| def get_zims_size_from_header(url):
 | |
|     #url = 'https://download.kiwix.org/zim/other/mdwiki_en_all_2023-03.zim'
 | |
|     response = requests.head(url, allow_redirects=True)
 | |
|     size = 0
 | |
|     if (response.status_code == 200):
 | |
|         size = int(response.headers.get('Content-Length', 0))
 | |
|     return size
 | |
| 
 | |
| def get_zims_size_from_file(name):
 | |
|     data_output = {}
 | |
|     data_output['download_url']= ''
 | |
|     data_output['size'] = 0
 | |
| 
 | |
|     with open('/etc/iiab/kiwix_catalog.json') as json_file:
 | |
|         data = json.load(json_file)['zims']
 | |
|         result = { data[element]['perma_ref']: data[element]  for element in  list(data.keys())}
 | |
|         if result.get(name) is not None:
 | |
|             data_output['download_url']= result[name]['download_url']
 | |
|             data_output['size']= (int(result[name].get('size',0)) * 1024) + 1023
 | |
|     return data_output
 | |
| 
 | |
| def get_zims_size(name):
 | |
|     data = get_zims_size_from_file(name)
 | |
|     #if data['size'] <= 1023:
 | |
|     #    data['size'] = get_zims_size_from_header(data['download_url'])
 | |
|     return data
 | |
| 
 | |
| def get_oer2go_size_from_file(name):
 | |
|     data_output = {}
 | |
|     data_output['download_url']= ''
 | |
|     data_output['size'] = 0
 | |
| 
 | |
|     with open('/etc/iiab/oer2go_catalog.json') as json_file:
 | |
|         data = json.load(json_file)['modules']
 | |
|         if data.get(name) is not None:
 | |
|             data_output['download_url']= data[name]['rsync_url']
 | |
|             data_output['size']= (int(data[name].get('ksize',0)) * 1024) + 1023
 | |
|     return data_output
 | |
| 
 | |
| def get_map_size_from_file(name):
 | |
|     data_output = {}
 | |
|     data_output['download_url']= ''
 | |
|     data_output['size'] = 0
 | |
| 
 | |
|     with open('/etc/iiab/map-catalog.json') as json_file:
 | |
|         data = json.load(json_file)['base']
 | |
|         result = { data[element]['perma_ref']: data[element]  for element in  list(data.keys())}
 | |
|         if result.get(name) is not None:
 | |
|             data_output['download_url']= result[name]['archive_url']
 | |
|             data_output['size']= (int(result[name].get('size',0))) + 1023
 | |
|     return data_output
 | |
| 
 | |
| 
 | |
| def get_item_size(name_input):
 | |
| 	return [get_size(element) for element in [name_input]]
 | |
| 
 | |
| def get_items_size(name_input):	
 | |
| 	return [get_size(element) for element in name_input]
 | |
| 
 | |
| def element_unknown(name):
 | |
| 	return {"size":0}
 | |
| 
 | |
| def build_otput(name, type_element, function):
 | |
|     data = function(name)
 | |
|     if data['size']== 0:
 | |
|         print(name, ": the size of this",type_element,"element is unknown")
 | |
| 
 | |
|     return {
 | |
|         "name": name
 | |
|         ,"type": type_element
 | |
|         ,"size": data['size']
 | |
|     }
 | |
| 
 | |
| 
 | |
| intended_use_dict = {
 | |
|     "azuracast":{
 | |
|         "name":"name"
 | |
|         ,"type":"azuracast"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"calibre":{
 | |
|         "name":"name"
 | |
|         ,"type":"calibre"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"external":{
 | |
|         "name":"name"
 | |
|         ,"type":"external"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"html":{
 | |
|         "name":"moddir"
 | |
|         ,"type":"module"
 | |
|         ,"function":get_oer2go_size_from_file
 | |
|     }
 | |
|     ,"info":{
 | |
|         "name":"name"
 | |
|         ,"type":"info"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"internetarchive":{
 | |
|         "name":"name"
 | |
|         ,"type":"internetarchive"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"kalite":{
 | |
|         "name":"name"
 | |
|         ,"type":"kalite"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"kolibri":{
 | |
|         "name":"name"
 | |
|         ,"type":"kolibri"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"map":{
 | |
|         "name":"name"
 | |
|         ,"type":"map"
 | |
|         ,"function":get_map_size_from_file
 | |
|     }
 | |
|     ,"webroot":{
 | |
|         "name":"name"
 | |
|         ,"type":"webroot"
 | |
|         ,"function":element_unknown
 | |
|     }
 | |
|     ,"zim":{
 | |
|         "name":"zim_name"
 | |
|         ,"type":"zim"
 | |
|         ,"function":get_zims_size
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| def get_size(name_input):
 | |
|     if name_input in all_menu_defs:
 | |
|         info = all_menu_defs[name_input]
 | |
|         intended_use = info["intended_use"]
 | |
| 
 | |
|         try:
 | |
|             data_intend = intended_use_dict[intended_use]
 | |
|             name_element = info[data_intend["name"]]
 | |
|             return build_otput(name_element, data_intend["type"], data_intend["function"])
 | |
|         except:
 | |
|             pass
 | |
|                     
 | |
|     return build_otput(name_input, "unknown", element_unknown)
 | |
| 
 | |
| # Now start the application
 | |
| if __name__ == "__main__":
 | |
|     main()
 |