Mercurial > treepkg > treepkg
annotate 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 |
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 |
505
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
81 def get_old_packages(self, newpackages): |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
82 ''' |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
83 Returns a list of all packages that are not in |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
84 newpackages and have a valid track. Therefore packages |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
85 from a not provided track aren't listed. |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
86 ''' |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
87 SELECT_TMPL = """SELECT * FROM packages |
505
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
88 WHERE filename not in (%s) and trackname in (%s)""" |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
89 newfiles = [p.filename for p in newpackages] |
506 | 90 tracknames = list(set([p.trackname for p in newpackages])) |
505
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
91 tmp1 = ", ".join(['?'] * len(newfiles)) |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
92 tmp2 = ", ".join(['?'] * len(tracknames)) |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
93 |
b7aad4cb58bb
don't remove packages if a track is deactivated
Bjoern Ricks <bricks@intevation.de>
parents:
438
diff
changeset
|
94 self.cursor.execute(SELECT_TMPL % (tmp1, tmp2), newfiles + tracknames) |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
95 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
|
96 |
416
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
97 def remove_packages(self, packages): |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
98 DELET_TMPL = """DELETE FROM packages |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
99 WHERE filename in (%s)""" |
416
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
100 tmp = ", ".join(['?'] * len(packages)) |
4980f8d5014a
first version of incremental copying debian packages to cachedir
Bjoern Ricks <bricks@intevation.de>
parents:
414
diff
changeset
|
101 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
|
102 [package.filename for package in packages]) |
414
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
103 self.conn.commit() |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
104 |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
105 def get_packages(self): |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
106 SELECT_TMPL = "SELECT * FROM packages" |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
107 self.cursor.execute(SELECT_TMPL) |
e0539b483b04
moved data handling in publishdebianpackages into seperate module
Bjoern Ricks <bricks@intevation.de>
parents:
diff
changeset
|
108 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
|
109 |