Mercurial > treepkg > treepkg
view treepkg/info/data.py @ 579:97a5e09c84dc tip
Fix: pass url to command expand to be able to checkout a new git repository
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Sat, 03 Sep 2011 12:32:32 +0000 |
parents | 3a5dd6f98f71 |
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()]