2 # -*- coding: utf-8 -*-
5 This file is part of Multilist.
7 Multilist is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Multilist is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Multilist. If not, see <http://www.gnu.org/licenses/>.
20 Copyright (C) 2008 Christoph Würstle
33 def speichereDirekt(self,schluessel,daten):
34 self.d[schluessel]=daten
35 logging.info("speichereDirekt "+str(schluessel)+" "+str(daten)+" lesen: "+str(self.d[schluessel]))
38 def ladeDirekt(self,schluessel,default=""):
39 #print "ladeDirekt",schluessel, "Schluessel vorhanden",self.d.has_key(schluessel)
40 if (self.d.has_key(schluessel)==True):
41 data=self.d[schluessel]
48 def speichereSQL(self,sql,tupel=None,commit=True,host="self",log=True,pcdatum=None,rowid=""):
49 #print "speichereSQL:",sql,tupel
55 self.cur.execute(sql,tupel)
58 #print int(time.time()), sql, pickle.dumps(tupel), host
63 strtupel.append(str(t))
66 if pcdatum==None: pcdatum=int(time.time())
67 self.cur.execute("INSERT INTO logtable ( pcdatum,sql,param,host,rowid ) VALUES (?,?,?,?,?)",(pcdatum, sql, string.join(strtupel," <<Tren-ner>> "), host,str(rowid) ))
68 if (commit==True): self.conn.commit()
73 if (s.find(" already exists")==-1):
75 if (programSQLError==True):
76 logging.error("speichereSQL-Exception "+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
78 logging.error("speichereSQL-Exception in Logging!!!! :"+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
85 def ladeSQL(self,sql,tupel=None):
91 self.cur.execute(sql,tupel)
92 return self.cur.fetchall()
94 logging.error("ladeSQL-Exception "+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
97 def ladeHistory(self,sql_condition,param_condition):
98 sql="SELECT * FROM logtable WHERE sql LIKE '%"+str(sql_condition)+"%' AND param LIKE '%"+str(param_condition)+"%'"
99 rows=self.ladeSQL(sql)
104 datum=time.strftime("%d.%m.%y %H:%M:%S", (time.localtime(rows[i][1])))
105 erg.append([rows[i][1],datum,rows[i][2],rows[i][3],rows[i][3].split(" <<Tren-ner>> ")])
106 #pcdatum #datum #sql # Param_org #param
112 def delHistory(self,sql_condition,param_condition,exceptTheLastXSeconds=0):
113 pcdatum=int(time.time())-exceptTheLastXSeconds
114 sql="DELETE FROM logtable WHERE sql LIKE '%"+str(sql_condition)+"%' AND param LIKE '%"+str(param_condition)+"%' AND pcdatum<?"
115 self.speichereSQL(sql,(pcdatum,))
117 def delHistoryWithRowID(self,rowid,sql_condition=" ",exceptTheLastXSeconds=0):
118 pcdatum=int(time.time())-exceptTheLastXSeconds
119 sql="DELETE FROM logtable WHERE rowid=? AND pcdatum<? AND sql LIKE '%"+str(sql_condition)+"%'"
120 self.speichereSQL(sql,(rowid,pcdatum,))
132 db=self.ladeDirekt("datenbank")
134 home_dir = os.path.expanduser('~')
135 db=os.path.join(home_dir, "multilist.s3db")
138 datum=time.strftime("%Y-%m-%d--", (time.localtime(time.time())))+str(int(time.time()))+"--"
139 if (os.path.exists(db))and(os.path.exists(os.path.dirname(db)+os.sep+"backup/")):
141 shutil.copyfile(db,str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db))
142 #logging.debug(str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db))
144 logging.info("Achtung Backup-Datei NICHT (!!!) angelegt!")
145 #print db,str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db)
147 self.conn = sqlite3.connect(db)
148 self.cur = self.conn.cursor()
150 sql="CREATE TABLE logtable (id INTEGER PRIMARY KEY AUTOINCREMENT, pcdatum INTEGER ,sql TEXT, param TEXT, host TEXT, rowid TEXT)"
151 self.cur.execute(sql)
156 #Add rowid line (not in old versions included)
158 sql="ALTER TABLE logtable ADD rowid TEXT"
159 self.cur.execute(sql)
166 home_dir = os.path.expanduser('~')
167 filename=os.path.join(home_dir, ".multilist.dat")
168 self.d = shelve.open(filename)
188 logging.info("Alle Daten gespeichert")