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
38 _moduleLogger = logging.getLogger(__name__)
41 class Speichern(object):
44 home_dir = os.path.expanduser('~')
45 filename = os.path.join(home_dir, ".multilist.dat")
46 self.d = shelve.open(filename)
62 _moduleLogger.info("Alle Daten gespeichert")
67 def speichereDirekt(self, schluessel, daten):
68 self.d[schluessel] = daten
69 _moduleLogger.info("speichereDirekt "+str(schluessel)+" "+str(daten)+" lesen: "+str(self.d[schluessel]))
71 def ladeDirekt(self, schluessel, default = ""):
72 #print "ladeDirekt", schluessel, "Schluessel vorhanden", self.d.has_key(schluessel)
73 if (self.d.has_key(schluessel) == True):
74 data = self.d[schluessel]
80 def speichereSQL(self, sql, tupel = None, commit = True, host = "self", log = True, pcdatum = None, rowid = ""):
81 #print "speichereSQL:", sql, tupel
83 programSQLError = True
87 self.cur.execute(sql, tupel)
88 programSQLError = False
90 #print int(time.time()), sql, pickle.dumps(tupel), host
93 if (tupel is not None):
95 strtupel.append(str(t))
98 pcdatum = int(time.time())
99 self.cur.execute("INSERT INTO logtable ( pcdatum, sql, param, host, rowid ) VALUES (?, ?, ?, ?, ?)", (pcdatum, sql, string.join(strtupel, " <<Tren-ner>> "), host, str(rowid) ))
104 s = str(sys.exc_info())
105 if (s.find(" already exists") == -1):
107 if (programSQLError == True):
108 _moduleLogger.error("speichereSQL-Exception "+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
110 _moduleLogger.error("speichereSQL-Exception in Logging!!!! :"+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
116 def ladeSQL(self, sql, tupel = None):
120 self.cur.execute(sql)
122 self.cur.execute(sql, tupel)
123 return self.cur.fetchall()
125 _moduleLogger.error("ladeSQL-Exception "+str(sys.exc_info())+" "+str(sql)+" "+str(tupel))
128 def ladeHistory(self, sql_condition, param_condition):
129 sql = "SELECT * FROM logtable WHERE sql LIKE '%"+str(sql_condition)+"%' AND param LIKE '%"+str(param_condition)+"%'"
130 rows = self.ladeSQL(sql)
134 datum = time.strftime("%d.%m.%y %H:%M:%S", (time.localtime(row[1])))
135 erg.append([row[1], datum, row[2], row[3], row[3].split(" <<Tren-ner>> ")])
139 def delHistory(self, sql_condition, param_condition, exceptTheLastXSeconds = 0):
140 pcdatum = int(time.time())-exceptTheLastXSeconds
141 sql = "DELETE FROM logtable WHERE sql LIKE '%"+str(sql_condition)+"%' AND param LIKE '%"+str(param_condition)+"%' AND pcdatum<?"
142 self.speichereSQL(sql, (pcdatum, ))
144 def delHistoryWithRowID(self, rowid, sql_condition = " ", exceptTheLastXSeconds = 0):
145 pcdatum = int(time.time())-exceptTheLastXSeconds
146 sql = "DELETE FROM logtable WHERE rowid = ? AND pcdatum<? AND sql LIKE '%"+str(sql_condition)+"%'"
147 self.speichereSQL(sql, (rowid, pcdatum, ))
159 db = self.ladeDirekt("datenbank")
161 home_dir = os.path.expanduser('~')
162 db = os.path.join(home_dir, "multilist.s3db")
164 datum = time.strftime("%Y-%m-%d--", (time.localtime(time.time())))+str(int(time.time()))+"--"
165 if (os.path.exists(db))and(os.path.exists(os.path.dirname(db)+os.sep+"backup/")):
167 shutil.copyfile(db, str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db))
168 #_moduleLogger.debug(str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db))
170 _moduleLogger.info("Achtung Backup-Datei NICHT (!!!) angelegt!")
171 #print db, str(os.path.dirname(db))+os.sep+"backup"+os.sep+datum+os.path.basename(db)
173 self.conn = sqlite3.connect(db)
174 self.cur = self.conn.cursor()
176 sql = "CREATE TABLE logtable (id INTEGER PRIMARY KEY AUTOINCREMENT, pcdatum INTEGER , sql TEXT, param TEXT, host TEXT, rowid TEXT)"
177 self.cur.execute(sql)
182 #Add rowid line (not in old versions included)
184 sql = "ALTER TABLE logtable ADD rowid TEXT"
185 self.cur.execute(sql)