From a270e3f20cf17e0e9d49cd0221eb937ca203b4a0 Mon Sep 17 00:00:00 2001 From: Wil Chung Date: Sun, 24 Sep 2017 10:18:07 -0700 Subject: [PATCH 1/4] format of api_config uses discoveryRestUrl now --- lib/google_apis.ex | 2 +- lib/google_apis/api_config.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/google_apis.ex b/lib/google_apis.ex index 222aa9eed2..3f02bb9de7 100644 --- a/lib/google_apis.ex +++ b/lib/google_apis.ex @@ -51,7 +51,7 @@ defmodule GoogleApis do def fetch(api_config) do file = ApiConfig.google_spec_file(api_config) - with {:ok, body} = GoogleApis.Discovery.fetch(api_config.url), + with {:ok, body} = GoogleApis.Discovery.fetch(api_config.discoveryRestUrl), :ok <- File.mkdir_p(Path.dirname(file)), :ok <- File.write(file, body) do diff --git a/lib/google_apis/api_config.ex b/lib/google_apis/api_config.ex index 9c13c1bd24..069f3e4161 100644 --- a/lib/google_apis/api_config.ex +++ b/lib/google_apis/api_config.ex @@ -14,7 +14,7 @@ defmodule GoogleApis.ApiConfig do - defstruct [:name, :version, :url] + defstruct [:name, :version, :url, :discoveryRestUrl] def file(%{name: name, version: version}), do: "#{name}-#{version}.json" From 274c14baa0b15a04fde6cb1042d2882bf7684be4 Mon Sep 17 00:00:00 2001 From: Wil Chung Date: Sun, 24 Sep 2017 10:20:29 -0700 Subject: [PATCH 2/4] fetch now writes to directory. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It wasn’t writing before, because body was {body, “default”}, which is a keymap, and not a string. And the with statement didn’t have the mechanism to report what was wrong. --- lib/google_apis.ex | 28 +++++++++++++++++++++++----- lib/google_apis/discovery.ex | 2 +- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/google_apis.ex b/lib/google_apis.ex index 3f02bb9de7..6a84229bcb 100644 --- a/lib/google_apis.ex +++ b/lib/google_apis.ex @@ -51,14 +51,32 @@ defmodule GoogleApis do def fetch(api_config) do file = ApiConfig.google_spec_file(api_config) - with {:ok, body} = GoogleApis.Discovery.fetch(api_config.discoveryRestUrl), - :ok <- File.mkdir_p(Path.dirname(file)), - :ok <- File.write(file, body) - do - {:ok, file} + case GoogleApis.Discovery.fetch(api_config.discoveryRestUrl) do + {:ok, body} -> + case File.mkdir_p(Path.dirname(file)) do + :ok -> + case File.write(file, body) do + :ok -> + {:ok, file} + {:error, posix} -> + msg = "Cannot write file. Error: #{posix}" + Logger.warn msg + {:error, msg} + end + _ -> + msg = "Cannot make #{Path.dirname(file)}" + Logger.warn msg + {:error, msg} + end + _ -> + msg = "Cannot Fetch from #{api_config.discoveryRestUrl}" + Logger.warn msg + {:error, msg} end end + + def convert_spec(api_config = %ApiConfig{}) do converter = Application.get_env(:google_apis, :spec_converter) converter.convert(api_config) diff --git a/lib/google_apis/discovery.ex b/lib/google_apis/discovery.ex index 2651cea7a1..c0c59798f5 100644 --- a/lib/google_apis/discovery.ex +++ b/lib/google_apis/discovery.ex @@ -21,7 +21,7 @@ defmodule GoogleApis.Discovery do try_formats(base, query, ["GOOGLE_REST_SIMPLE_URI", format]) nil -> {:ok, body} = fetch_direct(url) - {:ok, {body, "default"}} + {:ok, body} end end From 6ff76b8eb1e187e54e6f198d12c79f7c4dd702e0 Mon Sep 17 00:00:00 2001 From: Wil Chung Date: Sun, 24 Sep 2017 10:21:25 -0700 Subject: [PATCH 3/4] =?UTF-8?q?convert=20wasn=E2=80=99t=20writing=20to=20d?= =?UTF-8?q?irectory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That’s because it needed the openapi directory to exist, and it wasn’t already created. --- .../converter/api_spec_converter.ex | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/google_apis/converter/api_spec_converter.ex b/lib/google_apis/converter/api_spec_converter.ex index 68efa254a3..ec35c48552 100644 --- a/lib/google_apis/converter/api_spec_converter.ex +++ b/lib/google_apis/converter/api_spec_converter.ex @@ -23,13 +23,23 @@ defmodule GoogleApis.Converter.ApiSpecConverter do output = ApiConfig.openapi_spec_file(api_config) Logger.info("Converting #{file} to #{output}") - with {swagger, 0} <- System.cmd("npm", ["run", "-s", "api-spec-converter", "--", file, "-f", "google", "-t", "swagger_2"]), - :ok <- File.write(output, swagger) - do - {:ok, output} - else - {"", exit_code} -> {:error, "convert failed. exit code #{exit_code}"} - {:error, reason} -> {:error, reason} + case System.cmd("npm", ["run", "-s", "api-spec-converter", "--", file, "-f", "google", "-t", "swagger_2"]) do + {swagger, 0} -> + case File.mkdir_p(Path.dirname(output)) do + :ok -> + case File.write(output, swagger) do + :ok -> + {:ok, output} + {:error, posix} -> + msg = "Cannot write file. Error: #{posix}" + Logger.warn msg + {:error, msg} + end + {:error, posix} -> + msg = "Cannot make dir #{Path.dirname(output)}. Error: #{posix}" + Logger.warn msg + {:error, msg} + end end end From 4633dc8e7c6d89701f61acfc6e2e21275039fa6e Mon Sep 17 00:00:00 2001 From: Wil Chung Date: Sun, 24 Sep 2017 10:25:16 -0700 Subject: [PATCH 4/4] Use the current version of swagger-codegen-cli --- README.md | 10 ++++++++-- config/config.exs | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 34ebe04c4a..e46227c844 100644 --- a/README.md +++ b/README.md @@ -92,13 +92,19 @@ The default generator uses Docker and an image based off the [swagger-codegen pr You can further configure this converter by modifying the `config/config.exs` setting: ```elixir -config :google_apis, swagger_cli_image: "swagger-cli" +config :google_apis, swagger_cli_image: "swaggerapi/swagger-codegen-cli" +``` + +To get the current version of swagger cli: + +```bash +docker pull swaggerapi/swagger-codegen-cli ``` You can also limit which APIs to generate by providing an API name argument to the mix task: ```bash -$> mix google_apis.generate CloudTrace +$> mix google_apis.build CloudTrace ``` ## Contributing diff --git a/config/config.exs b/config/config.exs index 3d802b5858..29e14a1d3a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -29,7 +29,7 @@ use Mix.Config # # import_config "#{Mix.env}.exs" -config :google_apis, +config :google_apis, spec_converter: GoogleApis.Converter.ApiSpecConverter, client_generator: GoogleApis.Generator.SwaggerCli, - swagger_cli_image: "swagger-cli" + swagger_cli_image: "swaggerapi/swagger-codegen-cli"