From a885c4154637c11d9a407241ddd7e960b1c0c6d9 Mon Sep 17 00:00:00 2001 From: karl anderson Date: Wed, 11 Mar 2015 20:19:08 -0400 Subject: [PATCH] KAZOO-3402: handle error converting to binary for csv downloads --- applications/crossbar/src/api_resource.erl | 10 +++++++++- .../crossbar/src/modules/cb_transactions.erl | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/applications/crossbar/src/api_resource.erl b/applications/crossbar/src/api_resource.erl index eccf6b0e414..686c2634141 100644 --- a/applications/crossbar/src/api_resource.erl +++ b/applications/crossbar/src/api_resource.erl @@ -800,10 +800,18 @@ csv_header(JObj) -> -spec csv_ize(wh_json:keys()) -> iolist(). csv_ize([F|Rest]) -> [<<"\"">>, wh_util:to_binary(F), <<"\"">> - ,[[<<",\"">>, wh_util:to_binary(V), <<"\"">>] || V <- Rest] + ,[[<<",\"">>, try_to_binary(V), <<"\"">>] || V <- Rest] ,<<"\n">> ]. +-spec try_to_binary(_) -> binary(). +try_to_binary(Value) -> + try wh_util:to_binary(Value) of + V -> V + catch + _E:_R -> <<"">> + end. + -spec json_to_csv(wh_json:object()) -> iolist(). json_to_csv(JObj) -> {Vs, _} = wh_json:get_values(correct_jobj(JObj)), diff --git a/applications/crossbar/src/modules/cb_transactions.erl b/applications/crossbar/src/modules/cb_transactions.erl index 37ae47bb7f5..8f1a02dea99 100644 --- a/applications/crossbar/src/modules/cb_transactions.erl +++ b/applications/crossbar/src/modules/cb_transactions.erl @@ -134,7 +134,22 @@ fetch(Context, Options) -> {'error', _R}=Error -> send_resp(Error, Context); {'ok', Transactions} -> JObjs = maybe_filter_by_reason(Transactions, Options), - send_resp({'ok', wht_util:collapse_call_transactions(JObjs)}, Context) + send_resp(flatten(JObjs, []), Context) + end. + +-spec flatten(wh_json:objects(), wh_json:objects()) -> {'ok', wh_json:objects()}. +flatten([], Results) -> + {'ok', wht_util:collapse_call_transactions(Results)}; +flatten([JObj|JObjs], Results) -> + Metadata = wh_json:get_ne_value(<<"metadata">>, JObj), + case wh_json:is_json_object(Metadata) of + 'true' -> + Props = wh_json:to_proplist( + wh_json:delete_key(<<"account_id">>, Metadata) + ), + flatten(JObjs, [wh_json:set_values(Props, JObj)|Results]); + 'false' -> + flatten(JObjs, [JObj|Results]) end. %%--------------------------------------------------------------------