in server/api/yaml/openapi/combine.py [0:0]
def construct():
yml = {}
yml['paths'] = {}
yml['components'] = {}
apidir = os.path.abspath("%s/../../pages/" % bpath)
print("Scanning %s" % apidir)
for d in os.listdir(apidir):
cdir = os.path.abspath("%s/%s" % (apidir, d))
if os.path.isdir(cdir):
print("Scanning %s" % cdir)
for fname in os.listdir(cdir):
if fname.endswith(".py"):
fpath = "%s/%s" % (cdir, fname)
print("Scanning %s" % fpath)
contents = open(fpath, "r").read()
m = re.search(r"OPENAPI-URI: (\S+)\n##+\n([\s\S]+?)##+", contents)
if m:
apath = m.group(1)
cyml = m.group(2)
print("Weaving in API path %s" % apath)
cyml = "\n".join([line[2:] for line in cyml.split("\n")])
defs = yaml.load(cyml)
yml['paths'][apath] = defs
else:
fname = d
if fname.endswith(".py"):
fpath = "%s/%s" % (apidir, fname)
print("Scanning %s" % fpath)
contents = open(fpath, "r").read()
m = re.search(r"OPENAPI-URI: (\S+)\n##+\n([\s\S]+?)##+", contents)
if m:
apath = m.group(1)
cyml = m.group(2)
print("Weaving in API path %s" % apath)
cyml = "\n".join([line[2:] for line in cyml.split("\n")])
defs = yaml.load(cyml)
yml['paths'][apath] = defs
apidir = os.path.abspath("%s/components" % bpath)
print("Scanning %s" % apidir)
for d in os.listdir(apidir):
cdir = os.path.abspath("%s/%s" % (apidir, d))
if os.path.isdir(cdir):
print("Scanning %s" % cdir)
for fname in os.listdir(cdir):
if fname.endswith(".yaml"):
yml['components'][d] = yml['components'].get(d, {})
fpath = "%s/%s" % (cdir, fname)
print("Scanning %s" % fpath)
defs = yaml.load(open(fpath))
yml['components'][d][fname.replace(".yaml", "")] = defs
ypath = os.path.abspath("%s/../openapi.yaml" % bpath)
with open(ypath, "w") as f:
f.write(baseyaml)
f.write(yaml.dump(yml, default_flow_style=False))
f.close()
print("All done!")