Search code examples
pythonflaskredmine

How to make an endless loop in flask


from flask import *
from redmine import Redmine
import sys

app = Flask(__name__)


REDMINE_KEY='sdfsdfsdfsdfsd'
REDMINE_URL='http://blabla/redmine'


redmine = Redmine(REDMINE_URL)
redmine = Redmine(REDMINE_URL, key=REDMINE_KEY)

neu = []
bearbeitung = []
erledigt = []

id_thema = ""
thema = ""
project = ""
zugewiesen = ""

def ticket_zugewiesen(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        alleticket.assigned_to
    except:
        return True


def ticket_infos(diesTicket):
    alleticket = redmine.issue.get(diesTicket)
    try:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name
        zugewiesen = alleticket.assigned_to
    except:
        id_thema = alleticket.id
        thema = alleticket.subject
        project = alleticket.project.name

    return

neueIssues = redmine.issue.filter(status_id='1')
for i in neueIssues:
    neu.append(i.id)

neueIssues = redmine.issue.filter(status_id='2')
for i in neueIssues:
    bearbeitung.append(i.id)

neueIssues = redmine.issue.filter(status_id='5')
for i in neueIssues:
    erledigt.append(i.id)



@app.route('/_sendinfo')
def info():
    return jsonify(result=id_thema,thema=thema, project=project, zugewiesen=zugewiesen)

@app.route('/')
def home():
    while True:
        neu2 = []
        bearbeitung2 = []
        erledigt2 = []

        neueIssues = redmine.issue.filter(status_id='1')
        for neues in neueIssues:
            neu2.append(neues.id)

        neueIssues = redmine.issue.filter(status_id='2')
        for bearbeitetes in neueIssues:
            bearbeitung2.append(bearbeitetes.id)

        neueIssues = redmine.issue.filter(status_id='5')
        for erledigtes in neueIssues:
            erledigt2.append(erledigtes.id)

        for i in neu2:
            if i not in neu:
                janein = ticket_zugewiesen(i)
                if janein is True:
                    l = ticket_infos(i)
                else:
                    pass

        neu = neu2

        for ii in bearbeitung2:
            if ii not in bearbeitung:
                if ii in erledigt:
                    l = ticket_infos(ii)
                    erledigt = erledigt2
        bearbeitung = bearbeitung2

        for iii in erledigt2:
            if iii not in erledigt:
                l = ticket_infos(iii)
        erledigt = erledigt2
    return render_template("index.html")

if __name__ == '__main__':
    app.run()

How can I make this endless loop in home() work in flask? Now it does not work. Or is there a better way to get data from redmine?

I will check every round, that the endless loop make, if the three lists neu2, bearbeitung2, erledigt2 are equal to neu, bearbeitung, erledigt. And if there is a number more in "list2" i will display some information on the frontend (Browser) dynamically.


Solution

  • If I understand you correctly, you want to keep pushing updates to the browser from a single Flask route. Sadly, that is not possible. You will need to look into using browser-side JavaScript and either polling with AJAX, or websockets to push real-time updates.

    The choice between AJAX and WS depends on your specific use case. Try looking into both. AJAX is probably simpler to set up, but Flask has some WS support as far as I can tell: https://github.com/miguelgrinberg/Flask-SocketIO

    EDIT: You can also try using Server-Sent Events, if you don't need to support old browsers (though there seem to be polyfills, which provide support in old browsers as well). They are well explained here: How to implement server push in Flask framework? and seem really easy to use, though I've never personally tried.