Hi Stefan,

Thanks for the appreciation and the ideas.

I will surely do the following change in my code.

changing to return *$tx->result->json*; from  return 
from_json($tx->result->body); 

However, following change has been tricky to me.

changing to  *json* => { periods => *$c->session('cx_current_quarter')* }, 
 from  form => { periods => encode_json([ $c->session('cx_current_quarter') 
]) },

 I, per se, tried *json* => { periods => *$c->session('cx_current_quarter')*
 } at the outset. It did not work.

The reason I found is the following:

"json =>" works for the API call without "Authorization Header"
my $tx = await $ua->post_p('http://' . $c->config->{API_IP} . 
'/api/token/refresh/' => json => { refresh => $refresh_token });

only "form =>" works for the API call with Authorization Header" 
$tx = await $ua->post_p(
            'http://' . $c->config->{API_IP} . 
'/api-app/analytics/summary/',
            { Authorization => 'Bearer ' . $access_token },
            *form *=> { periods => *$c->session('cx_current_quarter')* }, 
        );

The difference between json and form in this context was intentional or 
accidental. More comments on this will be appreciated!

Thanks.
-- Jeyaraj



On Saturday, 6 June 2020 02:55:04 UTC+5:30, Stefan Adams wrote:
>
> Great job pushing your application forward with Async/Await!  Looking at 
> your snippet, here's one small change you can probably make using the json() 
> method from Mojo::Message 
> <https://mojolicious.org/perldoc/Mojo/Message#json>:
>
>     $app->helper(summary_data => async sub ($c, $access_token) {
>         my $ua = Mojo::UserAgent->new;
>
>         my $tx = await $ua->post_p(
>             'http://' . $c->config->{API_IP} . 
> '/api-app/analytics/summary/',
>             { Authorization => 'Bearer ' . $access_token },
>             *json* => { periods => *$c->session('cx_current_quarter')* }, 
>         );
>         if ($tx->result->is_success) {
>             return *$tx->result->json*;
>         }
>         $c->flash(message_type => 'warning');
>         $c->flash(message => 'Could not get summary data');
>         return $c->redirect_to('cx-summary', status => 403);
>     });
>
>
>
> On Thu, Jun 4, 2020 at 2:31 AM Jeyaraj Durairaj <jeyaraj...@gmail.com 
> <javascript:>> wrote:
>
>> Hi,
>>
>> It works for *helpers* as well with the following declaration.
>>
>>     $app->helper(summary_data => async sub ($c, $access_token) {
>>         my $ua = Mojo::UserAgent->new;
>>
>>         my $tx = await $ua->post_p(
>>             'http://' . $c->config->{API_IP} . 
>> '/api-app/analytics/summary/',
>>             { Authorization => 'Bearer ' . $access_token },
>>             form => { periods => encode_json([ 
>> $c->session('cx_current_quarter') ]) }, 
>>         );
>>         if ($tx->result->is_success) {
>>             return from_json($tx->result->body);
>>         }
>>         $c->flash(message_type => 'warning');
>>         $c->flash(message => 'Could not get summary data');
>>         return $c->redirect_to('cx-summary', status => 403);
>>     });
>>
>>
>>
>>
>> -- Jeyaraj
>>
>> On Thursday, 4 June 2020 12:06:01 UTC+5:30, Jeyaraj Durairaj wrote:
>>>
>>> Hi,
>>>
>>> Eureka! Eureka! It works!.
>>>
>>> The solution I found (because of my error) is that I uninstalled 
>>> Mojo::AsyncAwait and installed Future::AsyncAwait.
>>> It just works!
>>>
>>> By June end, my business intelligence application will be live to serve 
>>> 100+ users with insights and analytics.
>>>
>>> (To apply icing on the cake, I have plugged in Moose also in to model 
>>> layer for my application)
>>>
>>> As Glen Hinkle said, it is really really a fun to work in Mojolicious. I 
>>> love Hypnotoad.
>>>
>>> BTW, I am doing a private project as well to help a home designer to 
>>> launch a web site for their small firm. Guess! what framework I am gonna 
>>> use.. *Mojolicious.*
>>>
>>> Thanks to Mojo group and special thanks to SRI as well.
>>>
>>> -- Jeyaraj
>>>
>>>
>>>
>>> On Thursday, 28 May 2020 14:15:04 UTC+5:30, Jeyaraj Durairaj wrote:
>>>>
>>>> any luck on the solutions?
>>>>
>>>> -- Jeyaraj
>>>>
>>>> On Thursday, 28 May 2020 00:10:48 UTC+5:30, Jeyaraj Durairaj wrote:
>>>>>
>>>>> However, the below code perfectly work for me outside Mojolicious App.
>>>>>
>>>>>
>>>>> use Modern::Perl;
>>>>> use Mojo::Base -strict, -signatures;
>>>>> use Mojo::UserAgent;
>>>>> use Mojo::Promise;
>>>>> use Mojo::IOLoop;
>>>>> use Mojo::Util 'trim';
>>>>> use Mojo::AsyncAwait;
>>>>> use LWP::UserAgent;
>>>>> use JSON;
>>>>>
>>>>>
>>>>> my $ua = Mojo::UserAgent->new;
>>>>> my $result = $ua->post('http://localhost:8000/api/token/' => json => 
>>>>> { username => 'username', password => 'mypassword' })
>>>>>                 ->result
>>>>>                 ->json;
>>>>> my $access_token = $result->{access};
>>>>> my $refresh_token = $result->{refresh};
>>>>> print "Access Token: " . $result->{access}, "\n";
>>>>> print "Refresh Token: " . $result->{refresh}, "\n\n";
>>>>>
>>>>>
>>>>> $ua = Mojo::UserAgent->new;
>>>>> $result = $ua->post('http://' . 'localhost:8000' . 
>>>>> '/api/token/refresh/' => json => { refresh => $refresh_token })
>>>>>                 ->result
>>>>>                 ->json;
>>>>>
>>>>>
>>>>> my $agent = Mojo::UserAgent->new;
>>>>> async post_user_p => sub ($url) {
>>>>>     say "\n\n", $url;
>>>>>     my $tx = await $agent->post_p(
>>>>>         $url,
>>>>>         {
>>>>>             Authorization => 'Bearer ' . $result->{access},
>>>>>         },
>>>>>         form => {"username" => "username"}, 
>>>>>
>>>>>     );
>>>>>     return trim from_json($tx->result->body)->{first_name};
>>>>> };
>>>>>
>>>>> async main => sub (@urls) {
>>>>>     my @promises = map { post_user_p($_) } @urls;
>>>>>     my @names = await Mojo::Promise->all(@promises);
>>>>>     say for map { $_->[0] } @names;
>>>>> };
>>>>>
>>>>> my @urls = (qw(
>>>>>     http://localhost:8000/api-converge/auth/user/
>>>>> ));
>>>>>
>>>>> main(@urls)->wait;
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wednesday, 27 May 2020 23:41:27 UTC+5:30, Jeyaraj Durairaj wrote:
>>>>>>
>>>>>> I tried generating an example app and copied pasted the code segment 
>>>>>> you posted here and then tried.
>>>>>>
>>>>>> "Action not found!" error is shown.
>>>>>>
>>>>>> Should I reinstall Perl again and then try?
>>>>>> Will it work under morbo or works only on Hypnotoad?
>>>>>> I am using Windows for my development, wherein morbo is the only 
>>>>>> server I can test.
>>>>>> Or can I test it on daemon mode and try>
>>>>>> Please suggest as to how I should diagnose it.
>>>>>> I would need this Async/await to be working in my system.
>>>>>> I have tried without Async, all other functionalities rock both in 
>>>>>> development and production (hypnotoad). Mojo::UserAgent is amazing to 
>>>>>> fetch 
>>>>>> API call data from Django server (running under Apache).
>>>>>>
>>>>>> I am completely counting on Mojolicious as my primary framework for 
>>>>>> my new projects. Please help.
>>>>>>
>>>>>>
>>>>>> Regards/Jeyaraj
>>>>>>
>>>>>> On Wednesday, 27 May 2020 17:46:49 UTC+5:30, Sebastian Riedel wrote:
>>>>>>>
>>>>>>> I'll assume it was you who asked the same question on IRC earlier. 
>>>>>>> Had you been sticking around for a bit longer you would have seen my 
>>>>>>> instructions for getting a working application that i tested locally.
>>>>>>>
>>>>>>>     14:08 <kraih> to be sure i did a "mojo generate app" and then 
>>>>>>> replaced the controller with http://paste.scsys.co.uk/589044
>>>>>>>
>>>>>>> That's the important part, if that doesn't work your Perl or some 
>>>>>>> module you installed is broken.
>>>>>>>
>>>>>>> --
>>>>>>> sebastian
>>>>>>>
>>>>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Mojolicious" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to mojol...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/mojolicious/debdea2d-2f67-4feb-814d-9d936d1b6732%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/mojolicious/debdea2d-2f67-4feb-814d-9d936d1b6732%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mojolicious/ae2e9c20-e50a-4b67-a7a2-b103d7d8b728o%40googlegroups.com.

Reply via email to