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")
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 setUp(self): logging.basicConfig(level=logging.INFO) self.psr = Processor()
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()