diff --git a/json_creator/json_creator.py b/json_creator/json_creator.py new file mode 100644 index 0000000..0c8d559 --- /dev/null +++ b/json_creator/json_creator.py @@ -0,0 +1,103 @@ +import os +import json + +def generate_root_json(directory): + data = { + "metadata": { + "page": "main", + "author": "Benjamyn Love + JMH" + }, + "roms": {}, + "utilities": [] + } + excluded_dirs = ["emulation", "@recycle", "poobs"] # Add your excluded directory names here + for dir_name in os.listdir(directory): + dir_path = os.path.join(directory, dir_name) + uri = "/" + dir_name.lower().replace(" ", "-") + if os.path.isdir(dir_path): + if dir_name in excluded_dirs: + utilities_entry = { + "name": dir_name, + "uri": uri + } + data["utilities"].append(utilities_entry) + else: + console_name = dir_name + subdirectories = 0 + files = 0 + for entry in os.scandir(dir_path): + if entry.is_dir(): + subdirectories += 1 + elif entry.is_file(): + files += 1 + + uri = "/" + console_name.lower().replace(" ", "-") + + console = { + "name": console_name, + "uri": uri, + "subdirectories": subdirectories, + "files": files + } + data["roms"][console_name.lower()] = console + # Save the JSON data to a file + with open('game_consoles2.json', 'w') as json_file: + json.dump(data, json_file, indent=4) + +directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/' +json_data = generate_root_json(directory) + +def generate_roms_json(directories): + '''NEEDS WORK!''' + data = { + "roms": [] + } + + for directory in directories: + dir_name = directory["name"] + dir_path = directory["path"] + console_entry = { + "name": dir_name, + "uri": "/" + dir_name.lower().replace(" ", "-"), + "contents": { + "base": {}, + "updates": [], + "dlc": [] + } + } + base_rom = None + updates = [] + dlc = [] + + for entry in os.scandir(dir_path): + if entry.is_file(): + file_name = entry.name + file_path = entry.path + file_size = os.path.getsize(file_path) + + if file_name.lower().endswith(".nsp"): + if "[v0]" in file_name: + base_rom = { + "name": file_name, + "size": file_size + } + elif "[v" in file_name: + updates.append({ + "name": file_name, + "size": file_size + }) + else: + dlc.append({ + "name": file_name, + "size": file_size + }) + + console_entry["contents"]["base"] = base_rom + console_entry["contents"]["updates"] = updates + console_entry["contents"]["dlc"] = dlc + + data["roms"].append(console_entry) + + return data + + diff --git a/json_creator/testing.ipynb b/json_creator/testing.ipynb new file mode 100644 index 0000000..c7e9511 --- /dev/null +++ b/json_creator/testing.ipynb @@ -0,0 +1,547 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'module' object is not callable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [2], line 27\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[39mreturn\u001b[39;00m data\n\u001b[1;32m 26\u001b[0m directory \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39m/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/\u001b[39m\u001b[39m'\u001b[39m\n\u001b[0;32m---> 27\u001b[0m json_data \u001b[39m=\u001b[39m generate_json(directory)\n\u001b[1;32m 29\u001b[0m \u001b[39m# Save the JSON data to a file\u001b[39;00m\n\u001b[1;32m 30\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[39mopen\u001b[39m(\u001b[39m'\u001b[39m\u001b[39mgame_consoles.json\u001b[39m\u001b[39m'\u001b[39m, \u001b[39m'\u001b[39m\u001b[39mw\u001b[39m\u001b[39m'\u001b[39m) \u001b[39mas\u001b[39;00m json_file:\n", + "Cell \u001b[0;32mIn [2], line 12\u001b[0m, in \u001b[0;36mgenerate_json\u001b[0;34m(directory)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mgenerate_json\u001b[39m(directory):\n\u001b[1;32m 5\u001b[0m data \u001b[39m=\u001b[39m {\n\u001b[1;32m 6\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mmetadata\u001b[39m\u001b[39m\"\u001b[39m: {\n\u001b[1;32m 7\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mpage\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mmain\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mroms\u001b[39m\u001b[39m\"\u001b[39m: {}\n\u001b[1;32m 11\u001b[0m }\n\u001b[0;32m---> 12\u001b[0m \u001b[39mfor\u001b[39;00m root, dirs, files \u001b[39min\u001b[39;00m os\u001b[39m.\u001b[39;49mpath(directory):\n\u001b[1;32m 13\u001b[0m console_name \u001b[39m=\u001b[39m os\u001b[39m.\u001b[39mpath\u001b[39m.\u001b[39mbasename(root)\n\u001b[1;32m 14\u001b[0m rom_count \u001b[39m=\u001b[39m \u001b[39mlen\u001b[39m(files)\n", + "\u001b[0;31mTypeError\u001b[0m: 'module' object is not callable" + ] + } + ], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"metadata\": {\n", + " \"page\": \"main\",\n", + " \"author\": \"Benjamyn Love\"\n", + " },\n", + " \"roms\": {}\n", + " }\n", + " for root, dirs, files in os.walk(directory):\n", + " console_name = os.path.basename(root)\n", + " rom_count = len(files)\n", + " uri = \"/\" + console_name.lower().replace(\" \", \"-\")\n", + " \n", + " console = {\n", + " \"name\": console_name,\n", + " \"uri\": uri,\n", + " \"count\": rom_count\n", + " }\n", + " data[\"roms\"][console_name.lower()] = console\n", + " \n", + " return data\n", + "\n", + "directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('game_consoles.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"metadata\": {\n", + " \"page\": \"main\",\n", + " \"author\": \"Benjamyn Love\"\n", + " },\n", + " \"roms\": {}\n", + " }\n", + " for root, dirs, files in os.walk(directory):\n", + " for dir_name in dirs:\n", + " console_name = dir_name\n", + " dir_path = os.path.join(root, dir_name)\n", + " rom_count = len(os.listdir(dir_path))\n", + " uri = \"/\" + console_name.lower().replace(\" \", \"-\")\n", + " \n", + " console = {\n", + " \"name\": console_name,\n", + " \"uri\": uri,\n", + " \"count\": rom_count\n", + " }\n", + " data[\"roms\"][console_name.lower()] = console\n", + " \n", + " return data\n", + "\n", + "directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('game_consoles.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"metadata\": {\n", + " \"page\": \"main\",\n", + " \"author\": \"Benjamyn Love\"\n", + " },\n", + " \"roms\": {}\n", + " }\n", + " for dir_name in os.listdir(directory):\n", + " dir_path = os.path.join(directory, dir_name)\n", + " if os.path.isdir(dir_path):\n", + " console_name = dir_name\n", + " subdirectories = 0\n", + " files = 0\n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_dir():\n", + " subdirectories += 1\n", + " elif entry.is_file():\n", + " files += 1\n", + "\n", + " uri = \"/\" + console_name.lower().replace(\" \", \"-\")\n", + " \n", + " console = {\n", + " \"name\": console_name,\n", + " \"uri\": uri,\n", + " \"subdirectories\": subdirectories,\n", + " \"files\": files\n", + " }\n", + " data[\"roms\"][console_name.lower()] = console\n", + " \n", + " return data\n", + "\n", + "directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('game_consoles.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"metadata\": {\n", + " \"page\": \"main\",\n", + " \"author\": \"Benjamyn Love\"\n", + " },\n", + " \"roms\": {}\n", + " }\n", + " excluded_dirs = [\"excluded_dir1\", \"excluded_dir2\"] # Add your excluded directory names here\n", + " for dir_name in os.listdir(directory):\n", + " if dir_name in excluded_dirs:\n", + " continue\n", + "\n", + " dir_path = os.path.join(directory, dir_name)\n", + " if os.path.isdir(dir_path):\n", + " console_name = dir_name\n", + " subdirectories = 0\n", + " files = 0\n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_dir():\n", + " subdirectories += 1\n", + " elif entry.is_file():\n", + " files += 1\n", + "\n", + " uri = \"/\" + console_name.lower().replace(\" \", \"-\")\n", + "\n", + " console = {\n", + " \"name\": console_name,\n", + " \"uri\": uri,\n", + " \"subdirectories\": subdirectories,\n", + " \"files\": files\n", + " }\n", + " data[\"roms\"][console_name.lower()] = console\n", + "\n", + " return data\n", + "\n", + "directory = '/path/to/your/directory'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('game_consoles.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"metadata\": {\n", + " \"page\": \"main\",\n", + " \"author\": \"Benjamyn Love + JMH\"\n", + " },\n", + " \"roms\": {},\n", + " \"utilities\": []\n", + " }\n", + " excluded_dirs = [\"emulation\", \"@recycle\", \"poobs\"] # Add your excluded directory names here\n", + " for dir_name in os.listdir(directory):\n", + " dir_path = os.path.join(directory, dir_name)\n", + " uri = \"/\" + dir_name.lower().replace(\" \", \"-\")\n", + " if os.path.isdir(dir_path):\n", + " if dir_name in excluded_dirs:\n", + " utilities_entry = {\n", + " \"name\": dir_name,\n", + " \"uri\": uri\n", + " }\n", + " data[\"utilities\"].append(utilities_entry)\n", + " else:\n", + " console_name = dir_name\n", + " subdirectories = 0\n", + " files = 0\n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_dir():\n", + " subdirectories += 1\n", + " elif entry.is_file():\n", + " files += 1\n", + "\n", + " uri = \"/\" + console_name.lower().replace(\" \", \"-\")\n", + "\n", + " console = {\n", + " \"name\": console_name,\n", + " \"uri\": uri,\n", + " \"subdirectories\": subdirectories,\n", + " \"files\": files\n", + " }\n", + " data[\"roms\"][console_name.lower()] = console\n", + "\n", + " return data\n", + "\n", + "directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('game_consoles2.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"roms\": []\n", + " }\n", + "\n", + " for dir_name in os.listdir(directory):\n", + " dir_path = os.path.join(directory, dir_name)\n", + " if os.path.isdir(dir_path):\n", + " console_entry = {\n", + " \"name\": dir_name,\n", + " \"uri\": \"/\" + dir_name.lower().replace(\" \", \"-\"),\n", + " \"contents\": {\n", + " \"base\": {},\n", + " \"updates\": [],\n", + " \"dlc\": []\n", + " }\n", + " }\n", + " base_rom = None\n", + " updates = []\n", + " dlc = []\n", + " \n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_file():\n", + " file_name = entry.name\n", + " file_path = entry.path\n", + " file_size = os.path.getsize(file_path)\n", + "\n", + " if file_name.lower().endswith(\".nsp\"):\n", + " if \"[v0]\" in file_name:\n", + " base_rom = {\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " }\n", + " elif \"[v\" in file_name:\n", + " updates.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + " else:\n", + " dlc.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + "\n", + " console_entry[\"contents\"][\"base\"] = base_rom\n", + " console_entry[\"contents\"][\"updates\"] = updates\n", + " console_entry[\"contents\"][\"dlc\"] = dlc\n", + "\n", + " data[\"roms\"].append(console_entry)\n", + "\n", + " return data\n", + "\n", + "directory = '/path/to/your/directory'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('roms.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'name': 'ps4', 'path': '/ps4'}, {'name': '@recycle', 'path': '/@recycle'}, {'name': 'switch', 'path': '/switch'}]\n" + ] + } + ], + "source": [ + "import json\n", + "\n", + "def generate_directory_list(json_file):\n", + " directories = []\n", + "\n", + " with open(json_file, 'r') as file:\n", + " data = json.load(file)\n", + "\n", + " roms_data = data.get('roms', {})\n", + " for console_name, console_entry in roms_data.items():\n", + " console_path = console_entry.get('uri', '')\n", + "\n", + " directory = {\n", + " 'name': console_name,\n", + " 'path': console_path\n", + " }\n", + " directories.append(directory)\n", + "\n", + " return directories\n", + "\n", + "json_file = 'game_consoles2.json' # Replace with the path to your JSON file\n", + "directory_list = generate_directory_list(json_file)\n", + "\n", + "print(directory_list)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directories):\n", + " data = {\n", + " \"roms\": []\n", + " }\n", + "\n", + " for directory in directories:\n", + " dir_name = directory[\"name\"]\n", + " dir_path = directory[\"path\"]\n", + " console_entry = {\n", + " \"name\": dir_name,\n", + " \"uri\": \"/\" + dir_name.lower().replace(\" \", \"-\"),\n", + " \"contents\": {\n", + " \"base\": {},\n", + " \"updates\": [],\n", + " \"dlc\": []\n", + " }\n", + " }\n", + " base_rom = None\n", + " updates = []\n", + " dlc = []\n", + "\n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_file():\n", + " file_name = entry.name\n", + " file_path = entry.path\n", + " file_size = os.path.getsize(file_path)\n", + "\n", + " if file_name.lower().endswith(\".nsp\"):\n", + " if \"[v0]\" in file_name:\n", + " base_rom = {\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " }\n", + " elif \"[v\" in file_name:\n", + " updates.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + " else:\n", + " dlc.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + "\n", + " console_entry[\"contents\"][\"base\"] = base_rom\n", + " console_entry[\"contents\"][\"updates\"] = updates\n", + " console_entry[\"contents\"][\"dlc\"] = dlc\n", + "\n", + " data[\"roms\"].append(console_entry)\n", + "\n", + " return data\n", + "\n", + "# List of directories obtained from previous JSON file\n", + "directories = [\n", + " {\n", + " \"name\": \"Shin Megami Tensai V\",\n", + " \"path\": \"/path/to/Shin Megami Tensai V\"\n", + " },\n", + " {\n", + " \"name\": \"Astral Chain\",\n", + " \"path\": \"/path/to/Astral Chain\"\n", + " },\n", + " {\n", + " \"name\": \"Dead Cells\",\n", + " \"path\": \"/path/to/Dead Cells\"\n", + " }\n", + "]\n", + "\n", + "json_data = directory_list\n", + "\n", + "# Save the JSON data to a file\n", + "with open('roms.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "\n", + "def generate_json(directory):\n", + " data = {\n", + " \"roms\": []\n", + " }\n", + "\n", + " for dir_name in os.listdir(directory):\n", + " dir_path = os.path.join(directory, dir_name)\n", + " if os.path.isdir(dir_path):\n", + " console_entry = {\n", + " \"name\": dir_name,\n", + " \"uri\": \"/\" + dir_name.lower().replace(\" \", \"-\"),\n", + " \"contents\": {\n", + " \"base\": {},\n", + " \"updates\": [],\n", + " \"dlc\": []\n", + " }\n", + " }\n", + " base_rom = None\n", + " updates = []\n", + " dlc = []\n", + " \n", + " for entry in os.scandir(dir_path):\n", + " if entry.is_file():\n", + " file_name = entry.name\n", + " file_path = entry.path\n", + " file_size = os.path.getsize(file_path)\n", + "\n", + " if file_name.lower().endswith(\".nsp\"):\n", + " if \"[v0]\" in file_name:\n", + " base_rom = {\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " }\n", + " elif \"[v\" in file_name:\n", + " updates.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + " else:\n", + " dlc.append({\n", + " \"name\": file_name,\n", + " \"size\": file_size\n", + " })\n", + "\n", + " console_entry[\"contents\"][\"base\"] = base_rom\n", + " console_entry[\"contents\"][\"updates\"] = updates\n", + " console_entry[\"contents\"][\"dlc\"] = dlc\n", + "\n", + " data[\"roms\"].append(console_entry)\n", + "\n", + " return data\n", + "\n", + "directory = '/Users/jordanmartin/stuff/rm_site_dir_test/10.6.9.5/'\n", + "json_data = generate_json(directory)\n", + "\n", + "# Save the JSON data to a file\n", + "with open('roms.json', 'w') as json_file:\n", + " json.dump(json_data, json_file, indent=4)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}