der erste WKNcharts Prototyp steht

This commit is contained in:
age 2006-06-15 16:12:27 +00:00
parent 10498dc99f
commit 739d448c00
6 changed files with 166 additions and 106 deletions

View file

@ -1,15 +1,17 @@
= TODO = = TODO =
[.] bilder im programm anzeigen [.] bilder im programm anzeigen
- pyview integrieren [*] pyview integrieren
[!] pyview laesst sich nur einmal starten
[ ] download abbrechbar machen [ ] download abbrechbar machen
[ ] intervallcheckboxen auswerten
[ ] zielverzeichnis auswerten
[ ] dateinamen fuer downloads besser vergeben, datum einbringen [ ] dateinamen fuer downloads besser vergeben, datum einbringen
[ ] libglade wrapper nutzen [ ] libglade wrapper nutzen
[ ] einstellungen rueckgaengig machen [ ] einstellungen rueckgaengig machen
= DONE = = DONE =
[*] loggen in threads erzeugt Speicherzugriffsfehler [*] loggen in threads erzeugt Speicherzugriffsfehler
[*] wkn datei auswaehlen
[*] zielverzeichnis auswaehlen
[*] intervallcheckboxen auswerten
----- -----

View file

@ -27,7 +27,7 @@ class WKNCharts:
def readwkndictfromstring(self, wknstring): def readwkndictfromstring(self, wknstring):
'''takes the given string into a "wkn name" dictionary''' '''takes the given string into a "wkn name" dictionary'''
tmp2 = wknstring.splitlines() tmp2 = wknstring.splitlines()
print len(tmp2) #print len(tmp2)
for i in tmp2: for i in tmp2:
tmp = i.split() tmp = i.split()
if tmp[0] and tmp[1]: self.wkn_dict[tmp[0]] = tmp[1] if tmp[0] and tmp[1]: self.wkn_dict[tmp[0]] = tmp[1]
@ -47,12 +47,13 @@ class WKNCharts:
'seite':"kurse", 'seite':"kurse",
'herkunft':123 'herkunft':123
}) })
print "ich hole jetzt \"%s\" %i:" % (self.wkn_dict[wkn], time) #print "ich hole jetzt \"%s\" %i:" % (self.wkn_dict[wkn], time)
print host + params #print host + params
###self.gui.add_log("%s %s" % (host, params)) ###self.gui.add_log("%s %s" % (host, params))
try: try:
f = urllib.urlopen(host + params) f = urllib.urlopen(host + params)
png = open("images/"+self.wkn_dict[wkn]+str(time)+".png", "w") png = open(self.dstdir+"/"+self.wkn_dict[wkn]+str(time)+".png", "w")
png.write(f.read()) png.write(f.read())
png.close() png.close()
import time import time
@ -63,7 +64,11 @@ class WKNCharts:
def set_times(self, times): def set_times(self, times):
self.times = times self.times = times
def set_dstdir(self, dstdir):
self.dstdir = dstdir
def getallchartsnogui(self) : def getallchartsnogui(self) :
'''TODO: this is obsolete, merge it with 'getallcharts' '''
for wkn in self.wkn_dict.keys(): for wkn in self.wkn_dict.keys():
for time in self.times: for time in self.times:
self.getchart(wkn, time) self.getchart(wkn, time)
@ -72,11 +77,17 @@ class WKNCharts:
def getallcharts(self, gui) : def getallcharts(self, gui) :
self.gui = gui self.gui = gui
from os import path
if not path.isdir(self.dstdir):
gui.add_log("Achtung: Zielverzeichnis %s nicht gefunden. Kein Download!" % self.dstdir, 1)
return
gui.add_log("Beginne Download nach: %s" % self.dstdir, 2)
for wkn in self.wkn_dict.keys(): for wkn in self.wkn_dict.keys():
self.gui.add_log("hole: %s (%s)" % (self.wkn_dict[wkn], wkn)) self.gui.add_log(" hole gerade: %s (%s) %s" % (self.wkn_dict[wkn], wkn, str(self.times)),2)
for time in self.times: for time in self.times:
self.getchart(wkn, time) self.getchart(wkn, time)
print "Download fertig" gui.add_log("Download Ende",2)
return return

View file

@ -80,8 +80,9 @@ class PyView(libglade.GladeWrapper):
#self.status.push(self.status_id,size+" bytes") #self.status.push(self.status_id,size+" bytes")
self.status.push(self.status_id,os.getcwd()+"/"+filename) self.status.push(self.status_id,os.getcwd()+"/"+filename)
#def quit(self, *args): def quit(self, *args):
#gtk.main_quit() #gtk.main_quit()
pass
def on_pyview_destroy(self, event): def on_pyview_destroy(self, event):
self.quit() self.quit()
@ -91,6 +92,6 @@ if __name__ == "__main__":
if len(sys.argv) == 2: if len(sys.argv) == 2:
start_dir=sys.argv[1] start_dir=sys.argv[1]
else: else:
start_dir="./images" start_dir="./"
pv = PyView("./pyview.glade", "pyview", start_dir) pv = PyView("./pyview.glade", "pyview", start_dir)
pv.show_window() pv.show_window()

View file

@ -9,19 +9,20 @@ class WknGUI:
""" """
import sys, time import sys, time
from threading import Thread from threading import Thread
configs = {}
wkns = "" wkns = ""
log = "" log = ""
maxloglevel = 1 maxloglevel = 3
'''0:no logging; 1:errors; 2:status messages; 3:all ''' '''0:no logging; 1:errors; 2:status messages; 3:debug '''
def __init__(self, gtk): def __init__(self, gtk):
self.gladefile = "wkncharts.glade" self.gladefile = "wkncharts.glade"
self.gtk = gtk self.gtk = gtk
self.gladefile = "wkncharts.glade"
self.wkngui = self.gtk.glade.XML(self.gladefile) self.wkngui = self.gtk.glade.XML(self.gladefile)
actions = { "on_read_settings_clicked": self.clicked_read_settings, actions = { "on_read_settings_clicked": self.clicked_read_settings,
"on_cancel_settings_clicked": self.clicked_cancel_settings, "on_cancel_settings_clicked": self.clicked_cancel_settings,
"on_choose_srcfile_clicked": self.clicked_choose_srcfile, "on_choose_srcfile_clicked": self.clicked_choose_srcfile,
"on_choose_dstdir_clicked": self.clicked_choose_dstdir,
"on_bu_wget_charts_clicked": self.clicked_wget_charts, "on_bu_wget_charts_clicked": self.clicked_wget_charts,
"on_bu_pics_clicked": self.clicked_show_pics, "on_bu_pics_clicked": self.clicked_show_pics,
"on_bu_exit_clicked": self.exit, "on_bu_exit_clicked": self.exit,
@ -33,50 +34,66 @@ class WknGUI:
def clicked_wget_charts(self, widget): def clicked_wget_charts(self, widget):
import getWKNcharts import getWKNcharts
'''the real download logic lies in getWKNcharts '''the real download logic is in getWKNcharts
that's why, we let it read in the wkn file''' that's why, we let it read in the wkn file'''
charts = getWKNcharts.WKNCharts() charts = getWKNcharts.WKNCharts()
charts.readwkndictfromstring(self.wkns) charts.readwkndictfromstring(self.wkns)
#charts.set_times([30, 300]) #charts.set_times([30, 300])
charts.set_times([30]) charts.set_times(self.configs["times"])
self.add_log("beginne Download der WKNS",2) charts.set_dstdir(self.configs["tf_dstdir"])
## downlaoding in threads, so the gui won't hang ## downlaoding in threads, so the gui won't hang
## giving it 'self', so that it can use the logging window ## giving it 'self', so that it can use the logging window
self.Thread(target=charts.getallcharts,args=(self,)).start() self.Thread(target=charts.getallcharts,args=(self,)).start()
## unthreaded version ## unthreaded version
#charts.getallcharts(self) #charts.getallcharts(self)
self.add_log("Download abgeschlossen",2)
def clicked_read_settings(self, widget): def clicked_read_settings(self, widget):
self.outputfield = self.wkngui.get_widget("tf_srcfile") configs = self.configs
self.textbuffer = self.outputfield.get_buffer() ## textfield values are stored in 'configs'
file = self.textbuffer.get_text(*self.textbuffer.get_bounds ()) textfieldnames = ["tf_srcfile", "tf_dstdir"]
for name in textfieldnames:
## fill 'configs' with values from regarding textfields
self.outputfield = self.wkngui.get_widget(name)
self.textbuffer = self.outputfield.get_buffer()
configs[name] = self.textbuffer.get_text(*self.textbuffer.get_bounds ())
## checkboxes are also stored in 'configs'
checkboxnames = {"cb_time1":30,"cb_time2":300,"cb_time3":30000,"cb_time4":100000}
configs["times"] = []
for name in checkboxnames.keys():
if self.wkngui.get_widget(name).get_active():
configs["times"].append(checkboxnames[name])
print configs["times"]
self.add_log(("configs: %s %s" % (configs.keys(), configs.values())), 3)
self.read_wknlist()
self.check_dstdir()
def read_wknlist(self):
try: try:
tmpfile = open(file, "r") tmpfile = open(self.configs["tf_srcfile"], "r")
filecontent = tmpfile.read() filecontent = tmpfile.read()
tmpfile.close() tmpfile.close()
log = "\"%s\" erfolgreich eingelesen" % file log = "\"%s\" erfolgreich eingelesen" % self.configs["tf_srcfile"]
self.add_log(log, 2) self.add_log(log, 2)
except: except:
log = "Achtung: Konnte \"%s\" nicht einlesen!" % file log = "Achtung: Konnte \"%s\" nicht einlesen!" % self.configs["tf_srcfile"]
self.add_log("verdammt: "+str(self.sys.exc_info()[0]),1) self.add_log("verdammt: "+str(self.sys.exc_info()[0]),1)
self.add_log(log, 1) self.add_log(log, 1)
return raise
self.wkns = (filecontent) self.wkns = (filecontent)
self.tf_wknlist = self.wkngui.get_widget("tf_wknlist") self.tf_wknlist = self.wkngui.get_widget("tf_wknlist")
self.wknlistbuffer = self.tf_wknlist.get_buffer() self.wknlistbuffer = self.tf_wknlist.get_buffer()
self.wknlistbuffer.set_text(self.wkns) self.wknlistbuffer.set_text(self.wkns)
self.add_log("neue Einstellungen gespeichert", 2) self.add_log("neue Einstellungen gespeichert", 2)
def clicked_cancel_settings(self, widget): def clicked_cancel_settings(self, widget):
'''TODO: '''TODO:'''
self.add_log("alte Einstellungen wieder hergestellt") self.add_log("da war age faul B)",2)
'''
pass
def clicked_choose_srcfile(self, widget): def clicked_choose_srcfile(self, widget):
import filechooser
try: try:
import filechooser
fcd = filechooser.FileChooserDialog() fcd = filechooser.FileChooserDialog()
filename = fcd.getfilename() filename = fcd.getfilename()
except: except:
@ -85,11 +102,44 @@ class WknGUI:
raise raise
self.outputfield = self.wkngui.get_widget("tf_srcfile") self.outputfield = self.wkngui.get_widget("tf_srcfile")
self.textbuffer = self.outputfield.get_buffer() self.textbuffer = self.outputfield.get_buffer()
if filename: if filename:
self.textbuffer.set_text(filename) self.textbuffer.set_text(filename)
else: else:
self.textbuffer.set_text("keine Datei ausgewaehlt") self.textbuffer.set_text("keine Datei ausgewaehlt")
def clicked_choose_dstdir(self, widget):
gtk = self.gtk
try:
dialog = gtk.FileChooserDialog("Bilderverzeichnis auswaehlen..", \
None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, \
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
dialog.set_default_response(gtk.RESPONSE_OK)
response = dialog.run()
if response == gtk.RESPONSE_OK:
self.add_log("Verzeichnis: %s" % dialog.get_current_folder(),2)
elif response == gtk.RESPONSE_CANCEL:
self.add_log("Kein Verzeichnis ausgewaehlt",1)
self.configs["tf_dstdir"] = dialog.get_current_folder()
dialog.destroy()
self.outputfield = self.wkngui.get_widget("tf_dstdir")
self.textbuffer = self.outputfield.get_buffer()
self.textbuffer.set_text(self.configs["tf_dstdir"])
except:
self.add_log("Dateiauswahl Dialog konnte nicht gestartet werden",1)
self.add_log("verdammt: "+str(self.sys.exc_info()[0]),1)
raise
def check_dstdir(self):
from os import path
self.tf_wknlist = self.wkngui.get_widget("tf_dstdir")
if self.configs["tf_dstdir"] and path.isdir(self.configs["tf_dstdir"]):
self.outputfield = self.wkngui.get_widget("tf_dstdir")
self.textbuffer = self.outputfield.get_buffer()
self.textbuffer.set_text(self.configs["tf_dstdir"])
else:
self.add_log("Verzeichnis nicht gefunden",1)
def add_log(self, text, loglevel=2): def add_log(self, text, loglevel=2):
if loglevel <= self.maxloglevel: if loglevel <= self.maxloglevel:
self.logbuch = self.wkngui.get_widget("tf_logbook") self.logbuch = self.wkngui.get_widget("tf_logbook")
@ -100,14 +150,14 @@ class WknGUI:
self.buffer.set_text(self.log) self.buffer.set_text(self.log)
def clicked_show_pics(self, widget): def clicked_show_pics(self, widget):
'''this is for now 'cause i'm to lazy to implement the viewer '''this is just for a rapid prototype'''
in a better way''' ## set an image to display
#self.ci = self.wkngui.get_widget("chartimage") #self.ci = self.wkngui.get_widget("chartimage")
#self.ci.set_from_file("foo.png") #self.ci.set_from_file("foo.png")
self.add_log("Bildbetrachter gestartet", 2) self.add_log("Bildbetrachter gestartet", 2)
try: try:
import pyview import pyview
pv = pyview.PyView("pyview.glad","pyview","./images") pyview.PyView("pyview.glade","pyview",self.configs["tf_dstdir"])
pv.show_window pv.show_window
except: except:
self.add_log("konnte Bildbetrachter nicht laden", 1) self.add_log("konnte Bildbetrachter nicht laden", 1)

Binary file not shown.

View file

@ -489,7 +489,7 @@
<property name="window_placement">GTK_CORNER_TOP_LEFT</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child> <child>
<widget class="GtkTextView" id="textview3"> <widget class="GtkTextView" id="tf_dstdir">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_default">True</property> <property name="can_default">True</property>
<property name="has_default">True</property> <property name="has_default">True</property>
@ -506,7 +506,7 @@
<property name="left_margin">0</property> <property name="left_margin">0</property>
<property name="right_margin">0</property> <property name="right_margin">0</property>
<property name="indent">0</property> <property name="indent">0</property>
<property name="text" translatable="yes">TODO</property> <property name="text" translatable="yes">./images</property>
</widget> </widget>
</child> </child>
</widget> </widget>
@ -689,78 +689,12 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="n_rows">1</property> <property name="n_rows">1</property>
<property name="n_columns">4</property> <property name="n_columns">4</property>
<property name="homogeneous">True</property> <property name="homogeneous">False</property>
<property name="row_spacing">0</property> <property name="row_spacing">0</property>
<property name="column_spacing">0</property> <property name="column_spacing">0</property>
<child> <child>
<widget class="GtkCheckButton" id="checkbutton2"> <widget class="GtkCheckButton" id="cb_time1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">300 Tage</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="checkbutton3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">30 Tage</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="checkbutton4">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">3 Jahre</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="checkbutton1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">ein Tag</property> <property name="label" translatable="yes">ein Tag</property>
@ -776,13 +710,75 @@
<property name="right_attach">1</property> <property name="right_attach">1</property>
<property name="top_attach">0</property> <property name="top_attach">0</property>
<property name="bottom_attach">1</property> <property name="bottom_attach">1</property>
<property name="x_options">fill</property> <property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="cb_time2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">30 Tage</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="cb_time3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">300 Tage</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="cb_time4">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">3 Jahre</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
</widget> </widget>
<packing> <packing>
<property name="padding">2</property> <property name="padding">8</property>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">False</property>
</packing> </packing>
@ -999,7 +995,7 @@
<widget class="GtkScrolledWindow" id="scrolledwindow1"> <widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property> <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="shadow_type">GTK_SHADOW_NONE</property> <property name="shadow_type">GTK_SHADOW_NONE</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property>