init-mocks.py (143 lines of code) (raw):

import os import shutil import sys mock_files_location = sys.argv[1] settings_location = "DDMock/Settings.bundle/" map = {} print("Creating map of endpoint paths and mock files...") for subdir, dirs, files in os.walk(mock_files_location): for file in files: filepath = subdir + os.sep + file if filepath.endswith(".json"): endpointPath = subdir.replace(mock_files_location, "") if endpointPath.startswith("/"): endpointPath = endpointPath.replace("/", "", 1) if endpointPath in map: files = map[endpointPath] files.append(file) else: map[endpointPath] = [file] print("Creating Settings.bundle...") if not os.path.exists(settings_location): os.makedirs(settings_location) # Root plist file root = '<?xml version="1.0" encoding="UTF-8"?>' root = root + '\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' root = root + '\n<plist version="1.0">' root = root + "\n<dict>" root = root + "\n\t<key>StringsTable</key>" root = root + "\n\t<string>Root</string>" root = root + "\n\t<key>PreferenceSpecifiers</key>" root = root + "\n\t<array>" root = root + "\n\t\t<dict>" root = root + "\n\t\t\t<key>Type</key>" root = root + "\n\t\t\t\t<string>PSToggleSwitchSpecifier</string>" root = root + "\n\t\t\t\t<key>Title</key>" root = root + "\n\t\t\t\t<string>Use real APIs</string>" root = root + "\n\t\t\t\t<key>Key</key>" root = root + "\n\t\t\t\t<string>use_real_apis</string>" root = root + "\n\t\t\t\t<key>DefaultValue</key>" root = root + "\n\t\t\t\t<false/>" root = root + "\n\t\t</dict>" root = root + "\n\t\t<dict>" root = root + "\n\t\t\t<key>Type</key>" root = root + "\n\t\t\t<string>PSGroupSpecifier</string>" root = root + "\n\t\t\t<key>Title</key>" root = root + "\n\t\t\t<string>MOCK</string>" root = root + "\n\t\t</dict>" # Endpoints plist file plist = '<?xml version="1.0" encoding="UTF-8"?>' plist = plist + '\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' plist = plist + '\n<plist version="1.0">' plist = plist + "\n<dict>" plist = plist + "\n\t<key>PreferenceSpecifiers</key>" plist = plist + "\n\t<array>" plist = plist + "\n\t\t<dict>" plist = plist + "\n\t\t\t<key>Type</key>" plist = plist + "\n\t\t\t<string>PSToggleSwitchSpecifier</string>" plist = plist + "\n\t\t\t<key>Title</key>" plist = plist + "\n\t\t\t<string>Use real API</string>" plist = plist + "\n\t\t\t<key>Key</key>" plist = plist + "\n\t\t\t<string>$endpointPathKey_use_real_api</string>" plist = plist + "\n\t\t\t<key>DefaultValue</key>" plist = plist + "\n\t\t\t<false/>" plist = plist + "\n\t\t</dict>" plist = plist + "\n\t\t<dict>" plist = plist + "\n\t\t\t<key>DefaultValue</key>" plist = plist + "\n\t\t\t<string>$endpointPathName</string>" plist = plist + "\n\t\t\t<key>Type</key>" plist = plist + "\n\t\t\t<string>PSTitleValueSpecifier</string>" plist = plist + "\n\t\t\t<key>Title</key>" plist = plist + "\n\t\t\t<string>Endpoint</string>" plist = plist + "\n\t\t\t<key>Key</key>" plist = plist + "\n\t\t\t<string>$endpointPathKey_endpoint</string>" plist = plist + "\n\t\t</dict>" plist = plist + "\n\t\t<dict>" plist = plist + "\n\t\t\t<key>Type</key>" plist = plist + "\n\t\t\t<string>PSTextFieldSpecifier</string>" plist = plist + "\n\t\t\t<key>DefaultValue</key>" plist = plist + "\n\t\t\t<string>400</string>" plist = plist + "\n\t\t\t<key>Title</key>" plist = plist + "\n\t\t\t<string>Response Time (ms)</string>" plist = plist + "\n\t\t\t<key>Key</key>" plist = plist + "\n\t\t\t<string>$endpointPathKey_response_time</string>" plist = plist + "\n\t\t</dict>" plist = plist + "\n\t\t<dict>" plist = plist + "\n\t\t\t<key>Type</key>" plist = plist + "\n\t\t\t<string>PSTextFieldSpecifier</string>" plist = plist + "\n\t\t\t<key>DefaultValue</key>" plist = plist + "\n\t\t\t<string>200</string>" plist = plist + "\n\t\t\t<key>Title</key>" plist = plist + "\n\t\t\t<string>Status Code</string>" plist = plist + "\n\t\t\t<key>Key</key>" plist = plist + "\n\t\t\t<string>$endpointPathKey_status_code</string>" plist = plist + "\n\t\t</dict>" plist = plist + "\n\t\t<dict>" plist = plist + "\n\t\t\t<key>Type</key>" plist = plist + "\n\t\t\t<string>PSMultiValueSpecifier</string>" plist = plist + "\n\t\t\t<key>Title</key>" plist = plist + "\n\t\t\t<string>Mock file</string>" plist = plist + "\n\t\t\t<key>Key</key>" plist = plist + "\n\t\t\t<string>$endpointPathKey_mock_file</string>" plist = plist + "\n\t\t\t<key>DefaultValue</key>" plist = plist + "\n\t\t\t<real>0</real>" plist = plist + "\n\t\t\t<key>Values</key>" plist = plist + "\n\t\t\t<array>" plist = plist + "\n\t\t\t\t$indexMockFiles" plist = plist + "\n\t\t\t</array>" plist = plist + "\n\t\t\t<key>Titles</key>" plist = plist + "\n\t\t\t<array>" plist = plist + "\n\t\t\t\t$mockFiles" plist = plist + "\n\t\t\t</array>" plist = plist + "\n\t\t</dict>" plist = plist + "\n\t</array>" plist = plist + "\n</dict>" plist = plist + "\n</plist>" for endpointPath, files in map.items(): filename = endpointPath.replace("/", ".") # add endpoint to root plist root = root + "\n\t\t<dict>" root = root + "\n\t\t\t<key>Type</key>" root = root + "\n\t\t\t<string>PSChildPaneSpecifier</string>" root = root + "\n\t\t\t<key>File</key>" root = root + "\n\t\t\t<string>" + filename + "</string>" root = root + "\n\t\t\t<key>Title</key>" root = root + "\n\t\t\t<string>" + filename + "</string>" root = root + "\n\t\t</dict>" print("Creating plist file for " + endpointPath + "...") with open(settings_location + filename + ".plist", "w+") as fout: newplist = plist newplist = newplist.replace("$endpointPathName", endpointPath).replace("$endpointPathKey", filename) indexes = "<integer>0</integer>" for i in range(1, len(files)): indexes = indexes + "\n\t\t\t\t<integer>" + str(i) + "</integer>" newplist = newplist.replace("$indexMockFiles", indexes) mockFiles = "<string>" + files[0] + "</string>" for i in range(1, len(files)): mockFiles = mockFiles + "\n\t\t\t\t<string>" + files[i] + "</string>" newplist = newplist.replace("$mockFiles", mockFiles) fout.write(newplist) print("Creating root plist...") root = root + "\n\t</array>" root = root + "\n</dict>" root = root + "\n</plist>" with open(settings_location + "Root.plist", "w+") as fout: fout.write(root) print("Done!")