summaryrefslogtreecommitdiff
path: root/portato/db
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2009-08-14 19:24:50 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2009-08-14 19:24:50 +0200
commit636eb3064e8ff8957bbf9fd172d7a0c6827e973c (patch)
treea26e7bc45e385fd11ac20297f23e12ded5a36a9c /portato/db
parent6c9202841a73519586bab4f5fff9f97eb979888c (diff)
downloadportato-636eb3064e8ff8957bbf9fd172d7a0c6827e973c.tar.gz
portato-636eb3064e8ff8957bbf9fd172d7a0c6827e973c.tar.bz2
portato-636eb3064e8ff8957bbf9fd172d7a0c6827e973c.zip
Write eix-sql database backend
Diffstat (limited to 'portato/db')
-rw-r--r--portato/db/eix_sql.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/portato/db/eix_sql.py b/portato/db/eix_sql.py
new file mode 100644
index 0000000..0e4f569
--- /dev/null
+++ b/portato/db/eix_sql.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+#
+# File: portato/db/eix_sql.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006-2009 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+from __future__ import absolute_import, with_statement
+
+try:
+ import sqlite3 as sql
+except ImportError:
+ from pysqlite2 import dbapi2 as sql
+
+import os
+
+from .sql import SQLDatabase
+from ..eix import EixReader
+from ..helper import debug
+from ..backend import system
+
+class EixSQLDatabase (SQLDatabase):
+
+ CACHE_FILE = "/var/eix/cache"
+
+ def __init__ (self, session):
+ SQLDatabase.__init__(self, session)
+
+ if "cache" not in session:
+ self.cache = self.CACHE_FILE
+ session["cache"] = self.cache
+ else:
+ self.cache = session["cache"]
+
+ debug("Using '%s' as eix cache file.", self.cache)
+
+ def updated (self):
+ mtime = os.stat(self.cache).st_mtime
+ old = self.session.get("mtime", 0)
+
+ self.session["mtime"] = mtime
+
+ return old < mtime
+
+ @SQLDatabase.con
+ def populate (self, category = None, connection = None):
+ inst = system.find_packages(pkgSet = system.SET_INSTALLED, key = category, with_version = False)
+
+ def _get():
+ with EixReader(self.cache) as eix:
+ for cat in eix.categories:
+ if category is None or cat.name() == category:
+ for pkg in cat.packages():
+ yield (cat.name(), pkg.name(), pkg.name() in inst, False)
+
+ connection.executemany("INSERT INTO packages (cat, name, inst, disabled) VALUES (?, ?, ?, ?)", _get())
+ connection.commit()