Beispiel #1
0
class Dashboard:
    
    #顯示儀表板
    def showup(self):
        self.psr = Processor()
        self.root = Tk()
        self.root.title("MOPS資訊觀測站")
        frame = Frame(self.root)
        frame.grid(row=0, column=0, sticky="news")
        self.stateV = StringVar()
        self.stateV.set("日期格式:yyyymmdd")
        self.statebarL = Label(frame, textvariable=self.stateV)
        sdateL = Label(frame, text="開始日期")
        edateL = Label(frame, text="迄止日期")
        self.sdateE = Entry(frame)
        self.edateE = Entry(frame)
        self.goBtn = Button(frame, text="確定", command=self.runProcess)
        self.statebarL.grid(row=0, column=0, rowspan=1, columnspan=3, sticky="news")
        sdateL.grid(row=1, column=0, rowspan=1, columnspan=1, sticky="news")
        edateL.grid(row=2, column=0, rowspan=1, columnspan=1, sticky="news")
        self.sdateE.grid(row=1, column=1, rowspan=1, columnspan=1, sticky="news")
        self.edateE.grid(row=2, column=1, rowspan=1, columnspan=1, sticky="news")
        self.goBtn.grid(row=1, column=2, rowspan=2, columnspan=1, sticky="news")
        Grid.grid_rowconfigure(self.root, 0, weight=1)
        Grid.grid_columnconfigure(self.root, 0, weight=1)
        self.root.mainloop()
        
    #確定開始執行抓取資料
    def runProcess(self):
        self.goBtn.config(state="disabled")
        try:
            sdate = self.sdateE.get()
            edate = self.edateE.get()
            datetime.strptime(sdate, "%Y%m%d")
            datetime.strptime(edate, "%Y%m%d")
        except ValueError:
            self.stateV.set("日期格式錯誤,正確為:yyyymmdd")
            return None
        print("from " + sdate + " to " + edate)
        self.psr.setDateRange(sdate, edate)
        self.psr.registerProgressObserver(self) #observer 需實作 updateProgress
        t = Timer(0, self.psr.runProcess) #啟動另一個 thread 執行,畫面才不會「沒有回應」
        t.start()
        
    #進度更新
    def updateProgress(self, progress):
        self.stateV.set("進度:" + str(progress) + "%")
        if progress == 100:
            self.goBtn.config(state="normal")
            self.stateV.set("已完成。重新輸入日期:yyyymmdd")
Beispiel #2
0
 def showup(self):
     self.psr = Processor()
     self.root = Tk()
     self.root.title("MOPS資訊觀測站")
     frame = Frame(self.root)
     frame.grid(row=0, column=0, sticky="news")
     self.stateV = StringVar()
     self.stateV.set("日期格式:yyyymmdd")
     self.statebarL = Label(frame, textvariable=self.stateV)
     sdateL = Label(frame, text="開始日期")
     edateL = Label(frame, text="迄止日期")
     self.sdateE = Entry(frame)
     self.edateE = Entry(frame)
     self.goBtn = Button(frame, text="確定", command=self.runProcess)
     self.statebarL.grid(row=0, column=0, rowspan=1, columnspan=3, sticky="news")
     sdateL.grid(row=1, column=0, rowspan=1, columnspan=1, sticky="news")
     edateL.grid(row=2, column=0, rowspan=1, columnspan=1, sticky="news")
     self.sdateE.grid(row=1, column=1, rowspan=1, columnspan=1, sticky="news")
     self.edateE.grid(row=2, column=1, rowspan=1, columnspan=1, sticky="news")
     self.goBtn.grid(row=1, column=2, rowspan=2, columnspan=1, sticky="news")
     Grid.grid_rowconfigure(self.root, 0, weight=1)
     Grid.grid_columnconfigure(self.root, 0, weight=1)
     self.root.mainloop()
Beispiel #3
0
 def setUp(self):
     logging.basicConfig(level=logging.INFO)
     self.psr = Processor()
Beispiel #4
0
class ProcessorTest(unittest.TestCase):

    # 準備
    def setUp(self):
        logging.basicConfig(level=logging.INFO)
        self.psr = Processor()

    # 收尾
    def tearDown(self):
        pass

    # 測試 設定日期範圍
    def test_setDateRange(self):
        logging.info("ProcessorTest.test_setDateRange")
        self.assertTrue(self.psr.setDateRange("20150101", "20151231"))
        self.assertTrue(self.psr.setDateRange("20150201", "20150228"))
        self.assertFalse(self.psr.setDateRange("20150132", "20150229"))
        self.assertFalse(self.psr.setDateRange("20153112", "01012015"))

    # 測試 parse p1_data.txt (一行)
    def test_parseP1DataLine(self):
        logging.info("ProcessorTest.test_parseP1DataLine")
        aLine = '5846|#|#|#|國泰人壽|#|#|#|104/01/07|#|#|#|國泰人壽公告處分Fidelity Funds-EU HY Bond Fund (USD)|#|#|#|document.fm_t67sb07.step.value="2";document.fm_t67sb07.co_id.value="5846";document.fm_t67sb07.DATE1.value="20150107";document.fm_t67sb07.SKEY.value="2";action="/mops/web/ajax_t67sb03";ajax1(this.form,"table01");|#|#|#|'
        # return == (co_id, DATE1, SKEY)
        self.assertEqual(("5846", "20150107", "2"), self.psr.parseP1DataLine(aLine))

    # 測試 parse temp_data.txt
    def test_parseTempData(self):
        logging.info("ProcessorTest.test_parseTempData")
        self.psr.parseTempData()

    # 測試 設定日期範圍
    def test_setDateRange(self):
        logging.info("ProcessorTest.test_setDateRange")
        self.psr.setDateRange("20160101", "20160207")
        self.assertEqual(self.psr.getDateRange()[0].year, 2016)
        self.assertEqual(self.psr.getDateRange()[0].month, 1)
        self.assertEqual(self.psr.getDateRange()[1].day, 7)

    # 測試 執行抓取網頁與分析程序
    def test_process(self):
        self.psr.setDateRange("20150601", "20150731")
        self.psr.runProcess()