summaryrefslogtreecommitdiff
path: root/plugin.video.montreal.greek-tv/resources/lib/cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.montreal.greek-tv/resources/lib/cache.py')
-rw-r--r--plugin.video.montreal.greek-tv/resources/lib/cache.py149
1 files changed, 149 insertions, 0 deletions
diff --git a/plugin.video.montreal.greek-tv/resources/lib/cache.py b/plugin.video.montreal.greek-tv/resources/lib/cache.py
new file mode 100644
index 0000000..6c77d5f
--- /dev/null
+++ b/plugin.video.montreal.greek-tv/resources/lib/cache.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+
+'''
+ Tulip routine libraries, based on lambda's lamlib
+ Author Twilight0
+
+ License summary below, for more details please read license.txt file
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+'''
+
+
+import re, hashlib, time
+
+try:
+ from sqlite3 import dbapi2 as database
+except:
+ from pysqlite2 import dbapi2 as database
+
+import control
+
+
+def get(function, timeout, *args, **table):
+ try:
+ response = None
+
+ f = repr(function)
+ f = re.sub('.+\smethod\s|.+function\s|\sat\s.+|\sof\s.+', '', f)
+
+ a = hashlib.md5()
+ for i in args: a.update(str(i))
+ a = str(a.hexdigest())
+ except:
+ pass
+
+ try:
+ table = table['table']
+ except:
+ table = 'rel_list'
+
+ try:
+ control.makeFile(control.dataPath)
+ dbcon = database.connect(control.cacheFile)
+ dbcur = dbcon.cursor()
+ dbcur.execute("SELECT * FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a))
+ match = dbcur.fetchone()
+
+ response = eval(match[2].encode('utf-8'))
+
+ t1 = int(match[3])
+ t2 = int(time.time())
+ update = (abs(t2 - t1) / 3600) >= int(timeout)
+ if update == False:
+ return response
+ except:
+ pass
+
+ try:
+ r = function(*args)
+ if (r == None or r == []) and not response == None:
+ return response
+ elif (r == None or r == []):
+ return r
+ except:
+ return
+
+ try:
+ r = repr(r)
+ t = int(time.time())
+ dbcur.execute("CREATE TABLE IF NOT EXISTS %s (""func TEXT, ""args TEXT, ""response TEXT, ""added TEXT, ""UNIQUE(func, args)"");" % table)
+ dbcur.execute("DELETE FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a))
+ dbcur.execute("INSERT INTO %s Values (?, ?, ?, ?)" % table, (f, a, r, t))
+ dbcon.commit()
+ except:
+ pass
+
+ try:
+ return eval(r.encode('utf-8'))
+ except:
+ pass
+
+
+def timeout(function, *args, **table):
+ try:
+ response = None
+
+ f = repr(function)
+ f = re.sub('.+\smethod\s|.+function\s|\sat\s.+|\sof\s.+', '', f)
+
+ a = hashlib.md5()
+ for i in args: a.update(str(i))
+ a = str(a.hexdigest())
+ except:
+ pass
+
+ try:
+ table = table['table']
+ except:
+ table = 'rel_list'
+
+ try:
+ control.makeFile(control.dataPath)
+ dbcon = database.connect(control.cacheFile)
+ dbcur = dbcon.cursor()
+ dbcur.execute("SELECT * FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a))
+ match = dbcur.fetchone()
+ return int(match[3])
+ except:
+ return
+
+
+def clear(table=None):
+ try:
+ control.idle()
+
+ if table is None:
+ table = ['rel_list', 'rel_lib']
+ elif not type(table) == list:
+ table = [table]
+
+ yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '')
+ if not yes:
+ return
+
+ dbcon = database.connect(control.cacheFile)
+ dbcur = dbcon.cursor()
+
+ for t in table:
+ try:
+ dbcur.execute("DROP TABLE IF EXISTS %s" % t)
+ dbcur.execute("VACUUM")
+ dbcon.commit()
+ except:
+ pass
+
+ control.infoDialog(control.lang(30402).encode('utf-8'))
+ except:
+ pass
+
+