view treepkg/info/data.py @ 420:414c77061d5a treepkg-status

fixed last commit (db instead of sqlite3)
author Bjoern Ricks <bricks@intevation.de>
date Mon, 26 Jul 2010 13:50:49 +0000
parents eac71f066037
children 3a3cad8f6f60
line wrap: on
line source
#! /usr/bin/python
# Copyright (C) 2010 by Intevation GmbH
# Authors:
# Bjoern Ricks    <bjoern.ricks@intevation.de>
#
# This program is free software under the GPL (>=v2)
# Read the file COPYING coming with the software for details.
""" Classes for storing and handling data related to treepkg info  """

try:
    import sqlite3 as db
except ImportError:
    from pysqlite2 import dbapi2 as db

class Package:
    
    def __init__(self, filename, trackname, packagename, packagepath,
                    arch, md5sum):
        self.filename = filename
        self.trackname = trackname
        self.name = packagename
        self.sourcepath = packagepath
        self.arch = arch
        self.md5sum = md5sum


class CacheDb:


    def __init__(self, file):
        self.SELECT_PACKAGE_TMPL = """SELECT * FROM packages 
                                   WHERE filename = ?"""
        self.file = file
        self.conn = db.connect(file)
        self.cursor = self.conn.cursor()
        self.init_db()

    def init_db(self):
        self.cursor.execute(
               """CREATE TABLE IF NOT EXISTS packages (
                  filename TEXT PRIMARY KEY,
                  trackname TEXT,
                  packagename TEXT,
                  sourcepath TEXT,
                  arch TEXT, 
                  md5sum TEXT )""")
        self.conn.commit()


    def add_package(self, package):
        self.cursor.execute(self.SELECT_PACKAGE_TMPL, (package.filename,))
        row = self.cursor.fetchone()
        if not row:
            self.insert_package(package)
        else:
            self.update_package(package)

    def insert_package(self, package):
        INSERT_TMPL = """INSERT INTO packages VALUES (
                         ?, ?, ? ,? ,?, ?)"""
        self.cursor.execute(INSERT_TMPL, (package.filename,
                            package.trackname,
                            package.name,
                            package.sourcepath,
                            package.arch,
                            package.md5sum))
        self.conn.commit()

    def update_package(self, package):
        UPDATE_TMPL = """UPDATE packages set md5sum = ? 
                         WHERE filename in (?)"""
        self.cursor.execute(UPDATE_TMPL, (package.md5sum, package.filename))
        self.conn.commit()

    def get_package(self, filename):
        self.cursor.execute(self.SELECT_PACKAGE_TMPL, (filename,))
        row = self.cursor.fetchone()
        if not row:
            return None
        return Package(row[0], row[1], row[2], row[3], row[4], row[5]) 

    def get_old_packages(self, newfiles):
        SELECT_TMPL = """SELECT * FROM packages 
                      WHERE filename not in (%s)"""
        tmp = ", ".join(['?'] * len(newfiles))
        self.cursor.execute(SELECT_TMPL % tmp, newfiles)
        return [Package(*row) for row in self.cursor.fetchall()]

    def remove_packages(self, packages):
        DELET_TMPL = """DELETE FROM packages 
                     WHERE filename in (%s)"""
        tmp = ", ".join(['?'] * len(packages))
        self.cursor.execute(DELET_TMPL % tmp,
                            [package.filename for package in packages])
        self.conn.commit()

    def get_packages(self):
        SELECT_TMPL = "SELECT * FROM packages" 
        self.cursor.execute(SELECT_TMPL)
        return [Package(*row) for row in self.cursor.fetchall()]
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)