Packages
API client library for any MediaWiki-based site, such as Wikipedia or Wikimedia Commons. Provides the Action API, realtime feed ingestion, and ORES scoring.
Current section
Files
Jump to
Current section
Files
lib/util.ex
defmodule Wiki.Util do
@moduledoc """
Internal utilities.
"""
@version Mix.Project.config()[:version]
@doc false
@spec default_user_agent() :: String.t()
def default_user_agent do
"mediawiki_client_ex/#{@version} (techwish-devs@wikimedia.de)"
end
end
defmodule Wiki.Error do
@moduledoc false
# TODO: more nuanced error types that can be matched by consumers.
@doc false
defexception [:message]
end
defmodule Wiki.ReqDebug do
@moduledoc false
require Logger
@doc false
@spec attach(Req.Request.t(), keyword) :: Req.Request.t()
def attach(%Req.Request{} = request, opts) do
request
|> step_maybe_debug(opts[:debug])
end
defp step_maybe_debug(request, true) do
Req.Request.append_response_steps(request,
debug: fn {request, response} ->
debug_query = fn
nil -> []
query -> "Query: #{query}"
end
debug_headers = fn headers ->
Enum.map(headers, fn {k, v} -> [k, ": ", v, ?\n] end)
end
debug_body = fn body ->
# TODO: pretty-print json and multi-part
inspect(body)
end
[
"\n>>> REQUEST >>>\n",
debug_query.(request.url.query),
?\n,
debug_headers.(request.headers),
?\n,
debug_body.(request.body),
?\n,
"\n<<< RESPONSE <<<\n",
debug_headers.(response.headers),
?\n,
debug_body.(response.body)
]
|> Logger.debug()
{request, response}
end
)
end
defp step_maybe_debug(request, _), do: request
end