""" Author: PH01L Email: phoil@osrsbox.com Website: https://www.osrsbox.com Description: Script to update JSON files. Copyright (c) 2019, PH01L ############################################################################### This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ############################################################################### """ import json import collections import os from pathlib import Path import argparse import config from osrsbox import items_api from osrsbox import monsters_api from osrsbox import prayers_api def generate_items_complete(): """Generate the `docs/items-complete.json` file.""" # Read in the item database content path_to_items_json = Path(config.DOCS_PATH / "items-json") all_db_items = items_api.all_items.AllItems(path_to_items_json) items = {} for item in all_db_items: json_out = item.construct_json() items[item.id] = json_out # Save all items to docs/items_complete.json out_fi = Path(config.DOCS_PATH / "items-complete.json") with open(out_fi, "w") as f: json.dump(items, f) # Save all items to osrsbox/docs/items_complete.json out_fi = Path(config.PACKAGE_PATH / "docs" / "items-complete.json") with open(out_fi, "w") as f: json.dump(items, f) def generate_item_slot_files(): """Generate the `docs/items-slot/` JSON files.""" # Read in the item database content all_db_items = items_api.load() items = collections.defaultdict(list) # Fetch every equipable item with an item slot value for item in all_db_items: if item.equipable_by_player: items[item.equipment.slot].append(item) # Process each item found, and add to an individual file for each equipment slot for slot in items: json_out = {} for item in items[slot]: json_out_temp = item.construct_json() json_out[item.id] = json_out_temp out_fi = Path(config.DOCS_PATH / "items-json-slot" / f"items-{slot}.json") os.makedirs(os.path.dirname(out_fi), exist_ok=True) with open(out_fi, "w") as f: json.dump(json_out, f) def generate_monsters_complete(): """Generate the `docs/monsters-complete.json` file.""" # Read in the monster database content path_to_monsters_json = Path(config.DOCS_PATH / "monsters-json") all_db_monsters = monsters_api.all_monsters.AllMonsters(path_to_monsters_json) monsters = {} for monster in all_db_monsters: json_out = monster.construct_json() monsters[monster.id] = json_out # Save all monsters to docs/monsters-complete.json out_fi = Path(config.DOCS_PATH / "monsters-complete.json") with open(out_fi, "w") as f: json.dump(monsters, f) # Save all monsters to osrsbox/docs/monsters-complete.json out_fi = Path(config.PACKAGE_PATH / "docs" / "monsters-complete.json") with open(out_fi, "w") as f: json.dump(monsters, f) def generate_prayers_complete(): """Generate the `docs/prayers-complete.json` file.""" # Read in the item database content path_to_prayers_json = Path(config.DOCS_PATH / "prayers-json") all_db_prayers = prayers_api.all_prayers.AllPrayers(path_to_prayers_json) prayers = {} for prayer in all_db_prayers: json_out = prayer.construct_json() prayers[prayer.id] = json_out # Save all prayers to docs/prayers-complete.json out_fi = Path(config.DOCS_PATH / "prayers-complete.json") with open(out_fi, "w") as f: json.dump(prayers, f) # Save all prayers to osrsbox/docs/prayers-complete.json out_fi = Path(config.PACKAGE_PATH / "docs" / "prayers-complete.json") with open(out_fi, "w") as f: json.dump(prayers, f) def generate_items_search_file(): """Generate the `docs/items-search.json` file.""" # Read in the item database content path_to_items_json = Path(config.DOCS_PATH / "items-json") all_db_items = items_api.all_items.AllItems(path_to_items_json) items_search = {} for item in all_db_items: # Make a temporary dictionary for each item temp_dict = dict() # Add id, name, type and duplicate status temp_dict["id"] = item.id temp_dict["name"] = item.name temp_dict["type"] = None if item.noted: temp_dict["type"] = "noted" elif item.placeholder: temp_dict["type"] = "placeholder" else: temp_dict["type"] = "normal" temp_dict["duplicate"] = item.duplicate # Add temp_dict to all items items_search[item.id] = temp_dict # Save search file to docs/items_complete.json out_fi = Path(config.DOCS_PATH / "items-search.json") with open(out_fi, "w") as f: json.dump(items_search, f, indent=4) def main(args): """The main function for generating the static JSON files.""" if args.items: print("Generating items-complete.json file...") generate_items_complete() print("Generating items-json-slot JSON files...") generate_item_slot_files() print("Generating items-search.json file...") generate_items_search_file() if args.monsters: print("Generating monsters-complete.json file...") generate_monsters_complete() if args.prayers: print("Generating prayers-complete.json file...") generate_prayers_complete() if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--monsters', default=False, required=False, help='A boolean of whether to generate monsters.') parser.add_argument('--items', default=False, required=False, help='A boolean of whether to generate items.') parser.add_argument('--prayers', default=False, required=False, help='A boolean of whether to generate prayers.') args = parser.parse_args() main(args)