How to yield a list to stream values to flask?












1















I have this list which is dynamically generated by querying the database, but for the purposes of this question, I use a static list for demonstration.



I want to stream values to a web page so I thought a generator is best to use. Below is my python code:



list111 = [1,2,3,4,5]
for i in list111:
def events():
print(i)
yield "data: %snn" % (i)
return Response(events(), content_type='text/event-stream')`


I am expecting this script to print 1 to 5 but instead it keeps on printing 1. Is it the wrong way to yield a list?



This is what I am using on the client side (for reference purposes):



if (!!window.EventSource) {
var source = new EventSource('/upload');
console.log(source)
source.onmessage = function(e) {
console.log(e)
var byte = e.data;
console.log(e.data)
}
}









share|improve this question

























  • You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

    – L3viathan
    Nov 15 '18 at 9:48











  • should I add return inside events

    – Duck_dragon
    Nov 15 '18 at 9:54











  • You want to return a generator yielding several strings? Put the loop inside events

    – L3viathan
    Nov 15 '18 at 9:59











  • @L3viathan thanks got it.

    – Duck_dragon
    Nov 15 '18 at 10:04
















1















I have this list which is dynamically generated by querying the database, but for the purposes of this question, I use a static list for demonstration.



I want to stream values to a web page so I thought a generator is best to use. Below is my python code:



list111 = [1,2,3,4,5]
for i in list111:
def events():
print(i)
yield "data: %snn" % (i)
return Response(events(), content_type='text/event-stream')`


I am expecting this script to print 1 to 5 but instead it keeps on printing 1. Is it the wrong way to yield a list?



This is what I am using on the client side (for reference purposes):



if (!!window.EventSource) {
var source = new EventSource('/upload');
console.log(source)
source.onmessage = function(e) {
console.log(e)
var byte = e.data;
console.log(e.data)
}
}









share|improve this question

























  • You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

    – L3viathan
    Nov 15 '18 at 9:48











  • should I add return inside events

    – Duck_dragon
    Nov 15 '18 at 9:54











  • You want to return a generator yielding several strings? Put the loop inside events

    – L3viathan
    Nov 15 '18 at 9:59











  • @L3viathan thanks got it.

    – Duck_dragon
    Nov 15 '18 at 10:04














1












1








1








I have this list which is dynamically generated by querying the database, but for the purposes of this question, I use a static list for demonstration.



I want to stream values to a web page so I thought a generator is best to use. Below is my python code:



list111 = [1,2,3,4,5]
for i in list111:
def events():
print(i)
yield "data: %snn" % (i)
return Response(events(), content_type='text/event-stream')`


I am expecting this script to print 1 to 5 but instead it keeps on printing 1. Is it the wrong way to yield a list?



This is what I am using on the client side (for reference purposes):



if (!!window.EventSource) {
var source = new EventSource('/upload');
console.log(source)
source.onmessage = function(e) {
console.log(e)
var byte = e.data;
console.log(e.data)
}
}









share|improve this question
















I have this list which is dynamically generated by querying the database, but for the purposes of this question, I use a static list for demonstration.



I want to stream values to a web page so I thought a generator is best to use. Below is my python code:



list111 = [1,2,3,4,5]
for i in list111:
def events():
print(i)
yield "data: %snn" % (i)
return Response(events(), content_type='text/event-stream')`


I am expecting this script to print 1 to 5 but instead it keeps on printing 1. Is it the wrong way to yield a list?



This is what I am using on the client side (for reference purposes):



if (!!window.EventSource) {
var source = new EventSource('/upload');
console.log(source)
source.onmessage = function(e) {
console.log(e)
var byte = e.data;
console.log(e.data)
}
}






python python-3.x






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 15 '18 at 10:17









martineau

68.5k1090183




68.5k1090183










asked Nov 15 '18 at 9:41









Duck_dragonDuck_dragon

628




628













  • You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

    – L3viathan
    Nov 15 '18 at 9:48











  • should I add return inside events

    – Duck_dragon
    Nov 15 '18 at 9:54











  • You want to return a generator yielding several strings? Put the loop inside events

    – L3viathan
    Nov 15 '18 at 9:59











  • @L3viathan thanks got it.

    – Duck_dragon
    Nov 15 '18 at 10:04



















  • You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

    – L3viathan
    Nov 15 '18 at 9:48











  • should I add return inside events

    – Duck_dragon
    Nov 15 '18 at 9:54











  • You want to return a generator yielding several strings? Put the loop inside events

    – L3viathan
    Nov 15 '18 at 9:59











  • @L3viathan thanks got it.

    – Duck_dragon
    Nov 15 '18 at 10:04

















You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

– L3viathan
Nov 15 '18 at 9:48





You return in the first iteration of the loop, so it only returns the events generator yielding a single "data: 1nn".

– L3viathan
Nov 15 '18 at 9:48













should I add return inside events

– Duck_dragon
Nov 15 '18 at 9:54





should I add return inside events

– Duck_dragon
Nov 15 '18 at 9:54













You want to return a generator yielding several strings? Put the loop inside events

– L3viathan
Nov 15 '18 at 9:59





You want to return a generator yielding several strings? Put the loop inside events

– L3viathan
Nov 15 '18 at 9:59













@L3viathan thanks got it.

– Duck_dragon
Nov 15 '18 at 10:04





@L3viathan thanks got it.

– Duck_dragon
Nov 15 '18 at 10:04












1 Answer
1






active

oldest

votes


















1














I got it as @L3viathan pointed out I am returning after the first iteration only. What I need to return was the for loop inside my event function.



 list111 = [1,2,3,4,5]
def events():
for i in list111:
print(i)
yield "data: %snn" % (i)
return Response(events(), content_type='text/event-stream')`





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53316455%2fhow-to-yield-a-list-to-stream-values-to-flask%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    I got it as @L3viathan pointed out I am returning after the first iteration only. What I need to return was the for loop inside my event function.



     list111 = [1,2,3,4,5]
    def events():
    for i in list111:
    print(i)
    yield "data: %snn" % (i)
    return Response(events(), content_type='text/event-stream')`





    share|improve this answer




























      1














      I got it as @L3viathan pointed out I am returning after the first iteration only. What I need to return was the for loop inside my event function.



       list111 = [1,2,3,4,5]
      def events():
      for i in list111:
      print(i)
      yield "data: %snn" % (i)
      return Response(events(), content_type='text/event-stream')`





      share|improve this answer


























        1












        1








        1







        I got it as @L3viathan pointed out I am returning after the first iteration only. What I need to return was the for loop inside my event function.



         list111 = [1,2,3,4,5]
        def events():
        for i in list111:
        print(i)
        yield "data: %snn" % (i)
        return Response(events(), content_type='text/event-stream')`





        share|improve this answer













        I got it as @L3viathan pointed out I am returning after the first iteration only. What I need to return was the for loop inside my event function.



         list111 = [1,2,3,4,5]
        def events():
        for i in list111:
        print(i)
        yield "data: %snn" % (i)
        return Response(events(), content_type='text/event-stream')`






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 15 '18 at 10:04









        Duck_dragonDuck_dragon

        628




        628
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53316455%2fhow-to-yield-a-list-to-stream-values-to-flask%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bressuire

            Vorschmack

            Quarantine