def assemble(): #repo = git.Repo(".") #commit = repo.head.commit definitions = {} doc_dir = Path("docs") for f in doc_dir.rglob("*.yaml"): if f.name in SKIP_FILES: continue component = f.parent.name if component not in definitions: definitions[component] = {} definitions[component].update(get_yaml(f)) write_yaml(definitions, "tests/tmp.bundle.yaml") r = OpenapiResolver(definitions, str(f)) resolved = r.resolve() write_yaml(resolved, "tmp.bundle.resolverd.yaml") # Prepare metadata output. info = get_yaml(Path("info.yaml")) if "info" not in info: raise ValueError("Error: info.yaml does not contain 'info' section.") # if not repo.head.is_detached: # version = repo.active_branch.name # else: # version_tag = next( # (tag for tag in repo.tags if tag.commit == repo.head.commit), None # ) # if not version_tag: # raise NotImplementedError( # "The current state should be an active_branch or a tag." # ) # version = version_tag.name # # info["info"].update( # { # "commit": str(commit), # "date": commit.committed_date, # "version": version, # } # ) # committed_datetime = datetime.fromtimestamp( # commit.committed_date # ).isoformat() p = Path("docs/definitions.yaml") with p.open("w") as fh: # fh.write(f"# {committed_datetime}\n") fh.write(OpenapiResolver.yaml_dump_pretty(info)) fh.write( OpenapiResolver.yaml_dump_pretty(resolved).replace( "#/components/", "#/"))
def show_component(url): U = urlparse(url) fragment = U.fragment.strip('/').split('/') ret = yaml.safe_load(get(url).content) for k in fragment: ret = ret[k] return OpenapiResolver.yaml_dump_pretty(ret)
def write_yaml(src, dst): p = Path(dst) p.write_text(OpenapiResolver.yaml_dump_pretty(src))