Skip to content

Commit

Permalink
feat: add support for swagger using JSON format (#1420)
Browse files Browse the repository at this point in the history
  • Loading branch information
sborrazas committed Jun 27, 2023
1 parent f0ba7b4 commit 79618f9
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 15 deletions.
17 changes: 13 additions & 4 deletions lib/ae_mdw_web/controllers/util_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ defmodule AeMdwWeb.UtilController do

alias AeMdw.Db.Status
alias AeMdw.Error.Input
alias AeMdwWeb.Util
alias Plug.Conn

@spec status(Conn.t(), map()) :: Conn.t()
Expand All @@ -14,12 +15,20 @@ defmodule AeMdwWeb.UtilController do

@spec no_route(Conn.t(), map()) :: Conn.t()
def no_route(conn, _params),
do: AeMdwWeb.Util.send_error(conn, Input.NotFound, "no such route")
do: Util.send_error(conn, Input.NotFound, "no such route")

@spec static_file(Conn.t(), map()) :: Conn.t()
def static_file(%Conn{assigns: %{filepath: filepath}} = conn, _params) do
filepath = Path.join(:code.priv_dir(:ae_mdw), filepath)
def static_file(
%Conn{assigns: %{filepath: filepath}, query_params: query_params} = conn,
_params
) do
format = Map.get(query_params, "format", "yaml")
filepath = Path.join(:code.priv_dir(:ae_mdw), "#{filepath}.#{format}")

send_file(conn, 200, filepath)
if File.exists?(filepath) do
send_file(conn, 200, filepath)
else
Util.send_error(conn, Input.NotFound, "no such route")
end
end
end
6 changes: 2 additions & 4 deletions lib/ae_mdw_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,7 @@ defmodule AeMdwWeb.Router do
get "/minerstats", StatsController, :miners
get "/wealth", WealthController, :wealth

get "/api", UtilController, :static_file,
assigns: %{filepath: "static/swagger/swagger_v2.yaml"}
get "/api", UtilController, :static_file, assigns: %{filepath: "static/swagger/swagger_v2"}

scope "/swagger" do
get "/", SwaggerForward, :index_v2
Expand Down Expand Up @@ -215,8 +214,7 @@ defmodule AeMdwWeb.Router do
end
end

get "/api", UtilController, :static_file,
assigns: %{filepath: "static/swagger/swagger_v1.yaml"}
get "/api", UtilController, :static_file, assigns: %{filepath: "static/swagger/swagger_v1"}

match :*, "/*path", UtilController, :no_route
end
Expand Down
19 changes: 12 additions & 7 deletions scripts/swagger-docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,22 @@

import yaml
import os
import json
from glob import glob
from pathlib import Path

SWAGGER_DOCS_DIR = 'docs/swagger_v2/'
MDW_VERSION_FILE = 'AEMDW_VERSION'
SWAGGER_OUTPUT_DIR = 'priv/static/swagger'

# Read YAML file
schemas = {}
paths = {}
base_yaml = None
swagger = None
mdw_version = None

with open(os.path.join(SWAGGER_DOCS_DIR, 'base.yaml')) as base_stream:
base_yaml = yaml.safe_load(base_stream)
swagger = yaml.safe_load(base_stream)

with open(MDW_VERSION_FILE) as mdw_version_file:
mdw_version = mdw_version_file.read().strip()
Expand All @@ -26,9 +28,12 @@
schemas = {**schemas, **data_loaded['schemas']}
paths = {**paths, **data_loaded['paths']}

base_yaml['paths'] = paths
base_yaml['components']['schemas'] = {**base_yaml['components']['schemas'], **schemas}
base_yaml['info']['version'] = mdw_version
swagger['paths'] = paths
swagger['components']['schemas'] = {**swagger['components']['schemas'], **schemas}
swagger['info']['version'] = mdw_version

# Output YAML
print(yaml.dump(base_yaml, default_flow_style=False, allow_unicode=True))
with open(os.path.join(SWAGGER_OUTPUT_DIR, "swagger_v2.yaml"), 'w') as yamlfile:
yamlfile.write(yaml.dump(swagger, default_flow_style=False, allow_unicode=True))

with open(os.path.join(SWAGGER_OUTPUT_DIR, "swagger_v2.json"), 'w') as jsonfile:
json.dump(swagger, jsonfile, indent=2)

0 comments on commit 79618f9

Please sign in to comment.