Mercurial > treepkg > treepkg
annotate treepkg/info/data.py @ 438:3a3cad8f6f60 treepkg-status
review changes
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Thu, 05 Aug 2010 16:21:47 +0000 |
parents | 414c77061d5a |
children | b7aad4cb58bb |
rev | line source |
---|---|
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
1 #! /usr/bin/python |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
2 # Copyright (C) 2010 by Intevation GmbH |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
3 # Authors: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
4 # Bjoern Ricks <bjoern.ricks@intevation.de> |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
5 # |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
6 # This program is free software under the GPL (>=v2) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
7 # Read the file COPYING coming with the software for details. |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
8 """ Classes for storing and handling data related to treepkg info """ |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
9 |
419
eac71f066037
make treepkg compatible to python 2.4
Bjoern Ricks <bricks@intevation.de>
parents:
416
diff
changeset
|
10 try: |
eac71f066037
make treepkg compatible to python 2.4
Bjoern Ricks <bricks@intevation.de>
parents:
416
diff
changeset
|
11 import sqlite3 as db |
eac71f066037
make treepkg compatible to python 2.4
Bjoern Ricks <bricks@intevation.de>
parents:
416
diff
changeset
|
12 except ImportError: |
eac71f066037
make treepkg compatible to python 2.4
Bjoern Ricks <bricks@intevation.de>
parents:
416
diff
changeset
|
13 from pysqlite2 import dbapi2 as db |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
14 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
15 class Package: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
16 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
17 def __init__(self, filename, trackname, packagename, packagepath, |
438 | 18 arch, md5sum): |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
19 self.filename = filename |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
20 self.trackname = trackname |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
21 self.name = packagename |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
22 self.sourcepath = packagepath |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
23 self.arch = arch |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
24 self.md5sum = md5sum |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
25 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
26 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
27 class CacheDb: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
28 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
29 def __init__(self, file): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
30 self.SELECT_PACKAGE_TMPL = """SELECT * FROM packages |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
31 WHERE filename = ?""" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
32 self.file = file |
420
414c77061d5a
fixed last commit (db instead of sqlite3)
Bjoern Ricks <bricks@intevation.de>
parents:
419
diff
changeset
|
33 self.conn = db.connect(file) |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
34 self.cursor = self.conn.cursor() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
35 self.init_db() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
36 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
37 def init_db(self): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
38 self.cursor.execute( |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
39 """CREATE TABLE IF NOT EXISTS packages ( |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
40 filename TEXT PRIMARY KEY, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
41 trackname TEXT, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
42 packagename TEXT, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
43 sourcepath TEXT, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
44 arch TEXT, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
45 md5sum TEXT )""") |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
46 self.conn.commit() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
47 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
48 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
49 def add_package(self, package): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
50 self.cursor.execute(self.SELECT_PACKAGE_TMPL, (package.filename,)) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
51 row = self.cursor.fetchone() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
52 if not row: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
53 self.insert_package(package) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
54 else: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
55 self.update_package(package) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
56 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
57 def insert_package(self, package): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
58 INSERT_TMPL = """INSERT INTO packages VALUES ( |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
59 ?, ?, ? ,? ,?, ?)""" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
60 self.cursor.execute(INSERT_TMPL, (package.filename, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
61 package.trackname, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
62 package.name, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
63 package.sourcepath, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
64 package.arch, |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
65 package.md5sum)) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
66 self.conn.commit() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
67 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
68 def update_package(self, package): |
416
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
69 UPDATE_TMPL = """UPDATE packages set md5sum = ? |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
70 WHERE filename in (?)""" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
71 self.cursor.execute(UPDATE_TMPL, (package.md5sum, package.filename)) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
72 self.conn.commit() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
73 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
74 def get_package(self, filename): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
75 self.cursor.execute(self.SELECT_PACKAGE_TMPL, (filename,)) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
76 row = self.cursor.fetchone() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
77 if not row: |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
78 return None |
438 | 79 return Package(*row) |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
80 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
81 def get_old_packages(self, newfiles): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
82 SELECT_TMPL = """SELECT * FROM packages |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
83 WHERE filename not in (%s)""" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
84 tmp = ", ".join(['?'] * len(newfiles)) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
85 self.cursor.execute(SELECT_TMPL % tmp, newfiles) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
86 return [Package(*row) for row in self.cursor.fetchall()] |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
87 |
416
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
88 def remove_packages(self, packages): |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
89 DELET_TMPL = """DELETE FROM packages |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
90 WHERE filename in (%s)""" |
416
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
91 tmp = ", ".join(['?'] * len(packages)) |
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
92 self.cursor.execute(DELET_TMPL % tmp, |
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
93 [package.filename for package in packages]) |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
94 self.conn.commit() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
95 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
96 def get_packages(self): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
97 SELECT_TMPL = "SELECT * FROM packages" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
98 self.cursor.execute(SELECT_TMPL) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
99 return [Package(*row) for row in self.cursor.fetchall()] |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
100 |