# This script aims to fix the swagger.json file by setting the x-nullable flag to False if not present for all objects and arrays. # This prevents from generating optional (undefined) fields in the generated API client. import json path = "internal/api/v1/docs/swagger.json" with open(path, "r") as f: data = json.load(f) if isinstance(data["definitions"]["netip.Addr"], dict): # MarshalText() data["definitions"]["netip.Addr"] = { "anyOf": [{ "type": "string", "format": "ipv4" }, { "type": "string", "format": "ipv6" }], "x-nullable": False, "x-omitempty": False } def set_non_nullable(data): if not isinstance(data, dict): return if "x-nullable" not in data: data["x-nullable"] = False if "x-omitempty" not in data and data["x-nullable"] == False: data["x-omitempty"] = False if "type" not in data: return if data["type"] == "object" and "properties" in data: if "required" in data: for k, v in data["properties"].items(): if k in data["required"]: set_non_nullable(v) else: for v in data["properties"].values(): set_non_nullable(v) if data["type"] == "array": for v in data["items"]: set_non_nullable(v) def set_operation_id(data): if isinstance(data, dict): if "x-id" in data: data["operationId"] = data["x-id"] return for v in data.values(): set_operation_id(v) for key, value in data.items(): if key == "definitions": for k, v in value.items(): set_non_nullable(v) else: set_operation_id(value) with open(path, "w") as f: json.dump(data, f, indent=2)