<div dir="ltr">Alex, I don't get why generators are bad for sans io? For me It's just simple state holder. Some things need multiply steps for making one high-level action. And in this case you can make class, which will hold state between calls and switch with "ugly" if/elif/elif/.../elif/else or you can use generator, so protocol code will have readable flow and looks like it is with io. Probably I missed something about generators?<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 24, 2016 at 8:08 PM, MultiSosnooley . <span dir="ltr"><<a href="mailto:multisosnooley@gmail.com" target="_blank">multisosnooley@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Hi.<br><br></div>I'm trying to make sans-io library.<br><ol><li>Protocol works over http, so I've just passing Request object with method, url, data, etc. fields to user and receive Response object (json in this case).</li><li>I'm using generators for simplification of holding state of multirequest actions. Something like this:<br><br>def login():<br></li></ol></div></div><div style="margin-left:40px">    response = yield Request(...)  # check server state<br></div></div></div><div style="margin-left:40px">    # update state with response<br></div><div style="margin-left:40px">    response = yield Request(...)  # actually login<br>    yield None<br></div></div><div style="margin-left:40px"><br></div><div style="margin-left:40px">def act(generator):<br></div><div style="margin-left:40px">    response = None<br></div><div style="margin-left:40px">    while True:<br></div><div style="margin-left:40px">        request = generator.send(response)<br></div><div style="margin-left:40px">        if request is None:<br></div><div style="margin-left:40px">            return response<br></div><div style="margin-left:40px">        response =  # do io<br><br></div><div style="margin-left:40px">act(login())<br><br></div><div><div style="margin-left:40px">This solve problem multistep actions. The downside is that all your protocol functions, event if they have only one request and don't need response at all, must be generators.<br></div><br></div><div>Is it ok to send just abstract Request and receive abstract Response (not just bytes)?<br></div><div>Is there a better solution for multirequest actions?<br></div></div>
</blockquote></div><br></div></div></div>