Pārlūkot izejas kodu

Drop support for old sqlite database schema

oz123 11 gadi atpakaļ
vecāks
revīzija
be5d300ed0
3 mainītis faili ar 5 papildinājumiem un 319 dzēšanām
  1. 1 1
      .travis.yml
  2. 0 312
      pwman/data/drivers/osqlite.py
  3. 4 6
      pwman/data/factory.py

+ 1 - 1
.travis.yml

@@ -9,7 +9,7 @@ install:
 # command to run tests, e.g. python setup.py test
 script:  
     # coverage run --source=pwman setup.py test
-    coverage run --omit="pwman/tests/*.py,pwman/ui/mac.py,pwman/ui/win.py,pwman/data/convertdb.py,pwman/data/nodes_multiple_approach.py,pwman/data/models.py,pwman/data/drivers/postgresql.py,pwman/data/drivers/mysql.py,pwman/ui/ocli.py,pwman/exchange/importer.py,pwman/data/drivers/osqlite.py,pwman/ui/base.py" --source=pwman setup.py test 
+    coverage run --omit="pwman/tests/*.py,pwman/ui/mac.py,pwman/ui/win.py,pwman/data/convertdb.py,pwman/data/nodes_multiple_approach.py,pwman/data/models.py,pwman/data/drivers/postgresql.py,pwman/data/drivers/mysql.py,pwman/exchange/importer.py,pwman/ui/base.py" --source=pwman setup.py test 
 
 
 after_success:

+ 0 - 312
pwman/data/drivers/osqlite.py

@@ -1,312 +0,0 @@
-#============================================================================
-# This file is part of Pwman3.
-#
-# Pwman3 is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License, version 2
-# as published by the Free Software Foundation;
-#
-# Pwman3 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 Pwman3; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#============================================================================
-# Copyright (C) 2012 Oz Nahum <nahumoz@gmail.com>
-#============================================================================
-#============================================================================
-# Copyright (C) 2006 Ivan Kelly <ivan@ivankelly.net>
-#============================================================================
-
-"""
-    Obsolete SQLite Database implementation. Used only for convert purpose.
-    This will be removed in the new pwman3 version
-"""
-from pwman.data.database import Database, DatabaseException
-from pwman.data.nodes import Node
-from pwman.data.tags import Tag
-import sqlite3 as sqlite
-import pwman.util.config as config
-import cPickle
-
-
-class SQLiteDatabase(Database):
-    """SQLite Database implementation"""
-
-    def __init__(self):
-        """Initialise SQLitePwmanDatabase instance."""
-        Database.__init__(self)
-
-        try:
-            self._filename = config.get_value('Database', 'filename')
-        except KeyError, e:
-            raise DatabaseException(
-                "SQLite: missing parameter [%s]" % (e))
-
-    def _open(self):
-        try:
-            self._con = sqlite.connect(self._filename)
-            self._cur = self._con.cursor()
-            self._checktables()
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-
-    def close(self):
-        self._cur.close()
-        self._con.close()
-
-    def listtags(self, alltags=False):
-        sql = ''
-        params = []
-        if len(self._filtertags) == 0 or alltags:
-            sql = "SELECT DATA FROM TAGS ORDER BY DATA ASC"
-        else:
-            sql = ("SELECT TAGS.DATA FROM LOOKUP"
-                   + " INNER JOIN TAGS ON LOOKUP.TAG = TAGS.ID"
-                   + " WHERE NODE IN (")
-            first = True
-            # if using the command filter, the code crashes ...
-            #
-            for t in self._filtertags:
-                if not first:
-                    sql += " INTERSECT "
-                else:
-                    first = False
-
-                sql += ("SELECT NODE FROM LOOKUP LEFT JOIN TAGS ON TAG " +
-                        + " = TAGS.ID "
-                        + " WHERE TAGS.DATA = ?")
-                params.append(cPickle.dumps(t))
-            sql += ") EXCEPT SELECT DATA FROM TAGS WHERE "
-            first = True
-            for t in self._filtertags:
-                if not first:
-                    sql += " OR "
-                else:
-                    first = False
-                sql += "TAGS.DATA = ?"
-                params.append(t)
-        try:
-            print params
-            self._cur.execute(sql, params)
-            tags = []
-            row = self._cur.fetchone()
-            while (row is not None):
-                tag = cPickle.loads(str(row[0]))
-                tags.append(tag)
-                row = self._cur.fetchone()
-            return tags
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-
-    def getnodes(self, ids):
-        nodes = []
-        for i in ids:
-            sql = "SELECT DATA FROM NODES WHERE ID = ?"
-            try:
-                self._cur.execute(sql, [i])
-
-                row = self._cur.fetchone()
-                if row is not None:
-                    node = cPickle.loads(str(row[0]))
-                    node.set_id(i)
-                    nodes.append(node)
-            except sqlite.DatabaseError, e:
-                raise DatabaseException("SQLite: %s" % (e))
-        return nodes
-
-    def editnode(self, id, node):
-        if not isinstance(node, Node):
-            raise DatabaseException(
-                "Tried to insert foreign object into database [%s]" % node)
-        try:
-            sql = "UPDATE NODES SET DATA = ? WHERE ID = ?"
-            self._cur.execute(sql, [cPickle.dumps(node), id])
-
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-        self._setnodetags(node)
-        self._checktags()
-        self._commit()
-
-    def addnodes(self, nodes):
-        for n in nodes:
-            sql = "INSERT INTO NODES(DATA) VALUES(?)"
-            if not isinstance(n, Node):
-                raise DatabaseException(
-                    "Tried to insert foreign object into database [%s]", n)
-            value = cPickle.dumps(n)
-            try:
-                self._cur.execute(sql, [value])
-            except sqlite.DatabaseError, e:
-                raise DatabaseException("SQLite: %s" % (e))
-            id = self._cur.lastrowid
-            n.set_id(id)
-
-            self._setnodetags(n)
-            self._commit()
-
-    def removenodes(self, nodes):
-        for n in nodes:
-            if not isinstance(n, Node):
-                raise DatabaseException(
-                    "Tried to delete foreign object from database [%s]", n)
-            try:
-                sql = "DELETE FROM NODES WHERE ID = ?"
-                self._cur.execute(sql, [n.get_id()])
-
-            except sqlite.DatabaseError, e:
-                raise DatabaseException("SQLite: %s" % (e))
-            self._deletenodetags(n)
-
-        self._checktags()
-        self._commit()
-
-    def listnodes(self):
-        sql = ''
-        params = []
-        if len(self._filtertags) == 0:
-            sql = "SELECT ID FROM NODES ORDER BY ID ASC"
-        else:
-            first = True
-            for t in self._filtertags:
-                if not first:
-                    sql += " INTERSECT "
-                else:
-                    first = False
-                sql += ("SELECT NODE FROM LOOKUP LEFT JOIN TAGS "
-                        + " ON TAG = TAGS.ID"
-                        + " WHERE TAGS.DATA = ? ")
-
-                params.append(cPickle.dumps(t))
-        try:
-            self._cur.execute(sql, params)
-
-            ids = []
-            row = self._cur.fetchone()
-            while (row is not None):
-                ids.append(row[0])
-                row = self._cur.fetchone()
-            return ids
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-
-    def _commit(self):
-        try:
-            self._con.commit()
-        except sqlite.DatabaseError, e:
-            self._con.rollback()
-            raise DatabaseException(
-                "SQLite: Error commiting data to db [%s]" % (e))
-
-    def _tagids(self, tags):
-        ids = []
-        for t in tags:
-            sql = "SELECT ID FROM TAGS WHERE DATA = ?"
-            if not isinstance(t, Tag):
-                raise DatabaseException(
-                    "Tried to insert foreign object into database [%s]", t)
-            data = cPickle.dumps(t)
-
-            try:
-                self._cur.execute(sql, [data])
-                row = self._cur.fetchone()
-                if (row is not None):
-                    ids.append(row[0])
-                else:
-                    sql = "INSERT INTO TAGS(DATA) VALUES(?)"
-                    self._cur.execute(sql, [data])
-                    ids.append(self._cur.lastrowid)
-            except sqlite.DatabaseError, e:
-                raise DatabaseException("SQLite: %s" % (e))
-        return ids
-
-    def _deletenodetags(self, node):
-        try:
-            sql = "DELETE FROM LOOKUP WHERE NODE = ?"
-            self._cur.execute(sql, [node.get_id()])
-
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-        self._commit()
-
-    def _setnodetags(self, node):
-        self._deletenodetags(node)
-        ids = self._tagids(node.get_tags())
-
-        for i in ids:
-            sql = "INSERT OR REPLACE INTO LOOKUP VALUES(?, ?)"
-            params = [node.get_id(), i]
-
-            try:
-                self._cur.execute(sql, params)
-            except sqlite.DatabaseError, e:
-                raise DatabaseException("SQLite: %s" % (e))
-        self._commit()
-
-    def _checktags(self):
-        try:
-            sql = "DELETE FROM TAGS WHERE ID NOT IN (SELECT TAG FROM " \
-                  + "LOOKUP GROUP BY TAG)"
-            self._cur.execute(sql)
-        except sqlite.DatabaseError, e:
-            raise DatabaseException("SQLite: %s" % (e))
-        self._commit()
-
-    def _checktables(self):
-        """ Check if the Pwman tables exist """
-        self._cur.execute("PRAGMA TABLE_INFO(NODES)")
-        if (self._cur.fetchone() is None):
-            # table doesn't exist, create it
-            # SQLite does have constraints implemented at the moment
-            # so datatype will just be a string
-            self._cur.execute("CREATE TABLE NODES "
-                              "(ID INTEGER PRIMARY KEY AUTOINCREMENT,"
-                              "DATA BLOB NOT NULL)")
-            self._cur.execute("CREATE TABLE TAGS "
-                              "(ID INTEGER PRIMARY KEY AUTOINCREMENT,"
-                              "DATA BLOB NOT NULL UNIQUE)")
-            self._cur.execute("CREATE TABLE LOOKUP "
-                              "(NODE INTEGER NOT NULL, TAG INTEGER NOT NULL,"
-                              " PRIMARY KEY(NODE, TAG))")
-
-            self._cur.execute("CREATE TABLE KEY "
-                              + "(THEKEY TEXT NOT NULL DEFAULT '')")
-            self._cur.execute("INSERT INTO KEY VALUES('')")
-            try:
-                self._con.commit()
-            except DatabaseException, e:
-                self._con.rollback()
-                raise e
-
-    def savekey(self, key):
-        """
-        This function is saving the key to table KEY.
-        The key already arrives as an encrypted string.
-        It is the same self._keycrypted from
-        crypto py (check with id(self._keycrypted) and
-        id(key) here.
-        """
-        sql = "UPDATE KEY SET THEKEY = ?"
-        values = [key]
-        self._cur.execute(sql, values)
-        try:
-            self._con.commit()
-        except sqlite.DatabaseError, e:
-            self._con.rollback()
-            raise DatabaseException(
-                "SQLite: Error saving key [%s]" % (e))
-
-    def loadkey(self):
-        """
-        fetch the key to database. the key is also stored
-        encrypted.
-        """
-        self._cur.execute("SELECT THEKEY FROM KEY")
-        keyrow = self._cur.fetchone()
-        if (keyrow[0] == ''):
-            return None
-        else:
-            return keyrow[0]

+ 4 - 6
pwman/data/factory.py

@@ -42,27 +42,25 @@ def check_db_version(type):
      # TODO: implement version checks for other supported DBs.
 
 
-def create(type, version=None, filename=None):
+def create(dbtype, version=None, filename=None):
     """
     create(params) -> Database
     Create a Database instance.
     'type' can only be 'SQLite' at the moment
     """
-    if type == "SQLite":
+    if dbtype == "SQLite":
         from pwman.data.drivers import sqlite
         if version == 0.4 and filename:
             db = sqlite.SQLiteDatabaseNewForm(filename)
         elif version == 0.4:
             db = sqlite.SQLiteDatabaseNewForm()
-        else:
-            db = osqlite.SQLiteDatabase()
-    elif type == "Postgresql":
+    elif dbtype == "Postgresql":
         try:
             from pwman.data.drivers import postgresql
             db = postgresql.PostgresqlDatabase()
         except ImportError:
             raise DatabaseException("python-pygresql not installed")
-    elif type == "MySQL":
+    elif dbtype == "MySQL":
         try:
             from pwman.data.drivers import mysql
             db = mysql.MySQLDatabase()