from __future__ import annotations import typing as t import sys from metashape.runtime import get_walker from metashape.outputs.openapi import emit class Team: name: str members: t.List[Person] class Person: team: Team name: str age: int nickname: t.Optional[str] parents: t.List[Person] emit(get_walker(aggressive=True), output=sys.stdout)
paths = ctx.result.result["paths"] = {} path_item = paths.get(path) if path_item is None: path_item = paths[path] = {} path_parameters = extract_parameters(_f, path) if path_parameters: parameters = path_item.get("parameters") if parameters is None: parameters = path_item["parameters"] = [] for p in path_parameters: parameters.append( { "name": p, "in": "path", "required": True, "schema": {"type": "string"}, } ) operation = {method: {"responses": {"200": {"content": {"*/*": {"schema": "<>"}}}}}} # description # operationID # tags path_item.update(operation) paths = [ Path("/people", "GET", response=t.List[Person]), Path("/people/{person_id}", "GET", response=Person), ] emit(ctx, output=sys.stdout)
from metashape.runtime import get_walker from metashape.outputs.openapi import emit class Person: name: str w = get_walker(aggressive=True) emit(w)
# self references class Person: name: str spouse: t.Optional[Person] # reverse: spouse, synmetric one-to-one friends: t.Set[Person] # reverse: friends, synmetric many-to-many manager: t.Optional[Person] # reverse: employees, one side of non-synmetric employees: t.Set[Person] # reverse: manager, another side of non-synmetric # multiple relationships between two entities class User: name: str tweets: t.Set[Tweet] # reverse: author favorites: t.Set[Tweet] # reverse: favorited class Tweet: text: str author: User # reverse tweets favorited: t.Set[User] # reverse favorites import sys from metashape.runtime import get_walker from metashape.outputs.openapi import emit w = get_walker([User, Person], aggressive=True, recursive=True) emit(w, output=sys.stdout)
from metashape.outputs.openapi import emit from metashape.runtime import get_walker class Person: name: str emit(get_walker(aggressive=True))