Crow/scripts/nginx_mime2cpp.py
The-EDev 78c88bbbb7
Updated mime_types script:
Made script generated code format compliant
Added option to have the script download the source file directly
Added generation date

Also updated the header file to the latest nginx mime.types
2021-12-03 06:41:30 +03:00

69 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
#get mime.types file from the nginx repository at nginx/conf/mime.types
#typical output filename: mime_types.h
import sys
from datetime import date
if (len(sys.argv) != 3) and (len(sys.argv) != 2):
print("Usage (local file): {} <NGINX_MIME_TYPE_FILE_PATH> <CROW_OUTPUT_HEADER_PATH>".format(sys.argv[0]))
print("(downloads file) : {} <CROW_OUTPUT_HEADER_PATH>".format(sys.argv[0]))
sys.exit(1)
if len(sys.argv) == 3:
file_path = sys.argv[1]
output_path = sys.argv[2]
elif len(sys.argv) == 2:
import requests
open("mime.types", "wb").write(requests.get("https://hg.nginx.org/nginx/raw-file/tip/conf/mime.types").content)
file_path = "mime.types"
output_path = sys.argv[1]
tabspace = " "
tabandahalfspace = " "
def main():
outLines = []
outLines.append("// This file is generated from nginx/conf/mime.types using nginx_mime2cpp.py on " + date.today().strftime('%Y-%m-%d') + ".")
outLines.extend([
"#include <unordered_map>",
"#include <string>",
"",
"namespace crow",
"{",
tabspace + "const std::unordered_map<std::string, std::string> mime_types{"])
with open(file_path, "r") as mtfile:
incomplete = ""
incompleteExists = False
for line in mtfile:
if ('{' not in line and '}' not in line):
splitLine = line.split()
if (';' not in line):
incomplete += line
incompleteExists = True
continue
elif (incompleteExists):
splitLine = incomplete.split()
splitLine.extend(line.split())
incomplete = ""
incompleteExists = False
outLines.extend(mime_line_to_cpp(splitLine))
outLines[-1] = outLines[-1][:-1] + "};"
outLines.append("}")
with open(output_path, "w") as mtcppfile:
mtcppfile.writelines(x + '\n' for x in outLines)
def mime_line_to_cpp(mlist):
#print("recieved: " + str(mlist))
stringReturn = []
for i in range (len(mlist)):
if (mlist[i].endswith(";")):
mlist[i] = mlist[i][:-1]
for i in range (len(mlist)-1, 0, -1):
stringReturn.append(tabandahalfspace + "{\"" + mlist[i] + "\", \"" + mlist[0] + "\"},")
#print("created: " + stringReturn)
return stringReturn
main()