Comments (6)
Consider returning empty string so instead of return value be binary() | nil
itβs just binary
. At least Finch does that but it might vary between http clients.
from aws-elixir.
I'm going to tackle this one :)
from aws-elixir.
If using nil
value then places like these two places have to be updated:
https://github.com/aws-beam/aws-elixir/blob/master/lib/aws/request.ex#L103-L113
https://github.com/aws-beam/aws-elixir/blob/master/lib/aws/request.ex#L44
FWIW, this is the current HTTP client impl I'm using to resolve this:
defmodule MyApp.AwsHttpClient do
require Logger
# TODO: Waiting for upstream fix https://github.com/aws-beam/aws-elixir/issues/59
def request(method, url, body, headers, options) do
ensure_hackney_running!()
options = [:with_body | options]
case :hackney.request(method, url, headers, body, options) do
{:ok, status_code, response_headers, body} ->
{:ok, %{status_code: status_code, headers: response_headers, body: body}}
{:ok, status_code, response_headers} ->
{:ok, %{status_code: status_code, headers: response_headers, body: ""}}
{:error, reason} ->
{:error, reason}
end
end
defp ensure_hackney_running!() do
unless Code.ensure_loaded?(:hackney) do
Logger.error("""
Could not find hackney dependency.
Please add :hackney to your dependencies:
{:hackney, "~> 1.16"}
Or provide your own #{__MODULE__} implementation:
%AWS.Client{http_client: {MyCustomHTTPClient, []}}
""")
raise "missing hackney dependency"
end
{:ok, _apps} = Application.ensure_all_started(:hackney)
end
end
from aws-elixir.
@danschultzer good catch! I was using a custom HTTP client and I didn't see this problem.
The specs for http client expects body to be a binary, but I think either the body should be optional, or it should be permit nil value:
The HEAD requests should not return a body, so I think we should return nil
as the body for those requests, and change the appropriate places.
Would you mind to send a PR?
from aws-elixir.
And thank you for opening the issue :)
from aws-elixir.
Wojtek has a good point. Returning only binary()
makes things easier, since clients don't need to worry about treating nil
values. So I am π on returning an empty string.
from aws-elixir.
Related Issues (20)
- AWS.ApiGatewayManagementApi, URL and headers with stage HOT 1
- S3 put_object returns {:error, :timeout} but uploads file correctly HOT 5
- `AWS.S3.delete_objects` content md5 header HOT 5
- SelectObjectContent response HOT 1
- `AWS.STS.assume_role_with_web_identity` should not rely on access_key_id and secret_access_key
- Error calling textractor HOT 3
- Setting endpoint to `amazonaws.com` results in different behaviour as not setting an endpoint HOT 1
- AWS.S3.get_object always returns {:error, :timeout} with hackney > 1.18.1 HOT 5
- Streaming response handling HOT 10
- `put_bucket_cors` request is incorrect HOT 5
- Setup pipeline to automatically roll out new releases upon tagging
- S3 ListParts returns wrong types HOT 7
- QLDB Commit Transaction HOT 2
- NXDOMAIN when calling CostExplorer.get_cost_and_usage HOT 5
- Cannot get AWS Polly synthesize_speech to work HOT 3
- :nxdomain when calling AWS.CloudFront.list_distributions HOT 5
- Wrong region for Route53 requests HOT 12
- AWS.TimestreamWrite does not work. HOT 5
- Support array member names
- New spec is specific to keys in requests being strings
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aws-elixir.