2015-09-23 39 views
-1
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() 

我怎樣才能使這個無盡的循環在home()工作在燒瓶? 現在它不起作用。 或者有更好的方式從redmine獲取數據嗎?如何在燒瓶中製作一個無限循環

我會檢查每一輪,無限循環,如果三個列表neu2,bearbeitung2,erledigt2等於neu,bearbeitung,erledigt。如果在「list2」中有更多的數字,我會動態地在前端(瀏覽器)上顯示一些信息。

回答

0

如果我正確理解你,你想繼續從一個Flask路由推送更新到瀏覽器。可悲的是,這是不可能的。您將需要考慮使用瀏覽器端JavaScript並使用AJAX進行輪詢,或者使用websockets來推送實時更新。

AJAX和WS之間的選擇取決於您的具體使用情況。試着看着兩者。 AJAX可能更容易設置,但Flask有一些WS支持,據我所知:https://github.com/miguelgrinberg/Flask-SocketIO

編輯:你也可以嘗試使用服務器發送事件,如果你不需要支持舊瀏覽器(儘管似乎還有polyfills,它們也在舊瀏覽器中提供支持)。他們在這裏很好地解釋了:How to implement server push in Flask framework?並且看起來非常容易使用,儘管我從未親自嘗試過。

+0

是的,這是正確的!我會將更新推送到網站。那麼,我怎麼能用AJAX進行輪詢?我不知道我該如何做到這一點。你能給我一個簡單的例子嗎? – Samhamsam

+0

你需要使用JavaScript來做到這一點。我不認爲在SO評論中解釋AJAX是有道理的。谷歌周圍。我也編輯了我對SSE的回答。你可以嘗試他們,我鏈接的問題帶有一個完整的例子。 – ralh

+0

好的,謝謝。我會嘗試服務器發送的事件。對我來說似乎很容易。讓我們來看看。 – Samhamsam