view treepkg/info/data.py @ 506:3a5dd6f98f71

fixed typo
author Bjoern Ricks <bricks@intevation.de>
date Fri, 05 Nov 2010 11:02:57 +0000
parents b7aad4cb58bb
children
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) 

    def get_old_packages(self, newpackages):
        '''
        Returns a list of all packages that are not in
        newpackages and have a valid track. Therefore packages
        from a not provided track aren't listed.
        '''
        SELECT_TMPL = """SELECT * FROM packages 
                      WHERE filename not in (%s) and trackname in (%s)"""
        newfiles = [p.filename for p in newpackages]
        tracknames = list(set([p.trackname for p in newpackages]))
        tmp1 = ", ".join(['?'] * len(newfiles))
        tmp2 = ", ".join(['?'] * len(tracknames))

        self.cursor.execute(SELECT_TMPL % (tmp1, tmp2), newfiles + tracknames)
        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)