mirror of
https://github.com/iiab/iiab.git
synced 2025-02-12 19:22:24 +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()
|