[Collab-qa-commits] r1834 - in udd: . sql udd
Lucas Nussbaum
lucas at alioth.debian.org
Mon Nov 1 10:02:48 UTC 2010
Author: lucas
Date: 2010-11-01 10:02:47 +0000 (Mon, 01 Nov 2010)
New Revision: 1834
Added:
udd/udd/deferred_gatherer.py
Modified:
udd/config-org.yaml
udd/sql/setup.sql
Log:
deferred gatherer
Modified: udd/config-org.yaml
===================================================================
--- udd/config-org.yaml 2010-10-31 20:18:47 UTC (rev 1833)
+++ udd/config-org.yaml 2010-11-01 10:02:47 UTC (rev 1834)
@@ -28,6 +28,7 @@
history-daily: module udd.history_daily_gatherer
i18n-apps: module udd.i18n_apps_gatherer
hints: module udd.hints_gatherer
+ deferred: module udd.deferred_gatherer
timestamp-dir: /org/udd.debian.org/timestamps
lock-dir: /org/udd.debian.org/locks
archs:
@@ -588,3 +589,7 @@
release: experimental
update-command: /org/udd.debian.org/udd/scripts/sync-dist.sh rsync.debian-ports.org::debian/dists/experimental/ /org/udd.debian.org/mirrors/debian-ports/experimental
no-sources: true
+
+deferred:
+ type: deferred
+ url: http://ftp-master.debian.org/deferred/status
Modified: udd/sql/setup.sql
===================================================================
--- udd/sql/setup.sql 2010-10-31 20:18:47 UTC (rev 1833)
+++ udd/sql/setup.sql 2010-11-01 10:02:47 UTC (rev 1834)
@@ -750,3 +750,28 @@
OR (type IN ('unblock', 'age-days', 'hint', 'easy') AND (source, version) IN (select source, version from sources where release='sid'))
OR (type IN ('remove') AND (source, version) IN (select source, version from sources where release='squeeze')) ;
GRANT SELECT ON relevant_hints TO public;
+
+CREATE TABLE deferred
+ (source text, version debversion, distribution text, urgency text, date timestamp with time zone, delayed_until timestamp, delay_remaining interval,
+ changed_by text, changed_by_name text, changed_by_email text, maintainer text, maintainer_name text, maintainer_email text, changes text,
+ PRIMARY KEY (source, version));
+
+CREATE TABLE deferred_architecture
+ (source text, version debversion, architecture text,
+ PRIMARY KEY (source, version, architecture),
+FOREIGN KEY (source, version) REFERENCES deferred DEFERRABLE);
+
+CREATE TABLE deferred_binary
+ (source text, version debversion, package text,
+ PRIMARY KEY (source, version, package),
+FOREIGN KEY (source, version) REFERENCES deferred DEFERRABLE);
+
+CREATE TABLE deferred_closes
+ (source text, version debversion, bug int,
+ PRIMARY KEY (source, version, bug),
+FOREIGN KEY (source, version) REFERENCES deferred DEFERRABLE);
+
+GRANT SELECT ON deferred TO public;
+GRANT SELECT ON deferred_architecture TO public;
+GRANT SELECT ON deferred_binary TO public;
+GRANT SELECT ON deferred_closes TO public;
Added: udd/udd/deferred_gatherer.py
===================================================================
--- udd/udd/deferred_gatherer.py (rev 0)
+++ udd/udd/deferred_gatherer.py 2010-11-01 10:02:47 UTC (rev 1834)
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+"""
+This script imports the deferred queue status from
+http://ftp-master.debian.org/deferred/status
+"""
+
+from debian_bundle import deb822
+from os import access, mkdir, unlink, W_OK
+from sys import stderr
+import aux
+from aux import quote
+from gatherer import gatherer
+import email.Utils
+import re
+from time import ctime
+from psycopg2 import IntegrityError, ProgrammingError
+import urllib
+
+def get_gatherer(connection, config, source):
+ return deferred_gatherer(connection, config, source)
+
+DEBUG=0
+def to_unicode(value, encoding='utf-8'):
+ if isinstance(value, str):
+ return value.decode(encoding)
+ else:
+ return unicode(value)
+
+class deferred_gatherer(gatherer):
+ "This class imports the data from Deferred queue into the database"
+
+ def __init__(self, connection, config, source):
+ gatherer.__init__(self, connection, config, source)
+ self.assert_my_config('url')
+
+ def run(self):
+ my_config = self.my_config
+
+ cur = self.cursor()
+
+ cur.execute("PREPARE d_insert AS INSERT INTO deferred (source, version, distribution, urgency, date, delayed_until, delay_remaining, changed_by, changed_by_name, changed_by_email, maintainer, maintainer_name, maintainer_email, changes) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)")
+ q_deferred = "EXECUTE d_insert(%(Source)s, %(Version)s, %(Distribution)s, \
+ %(Urgency)s, %(Date)s, %(Delayed-Until)s, %(Delay-Remaining)s, \
+ %(Changed-By)s, %(Changed-By_name)s, %(Changed-By_email)s, \
+ %(Maintainer)s, %(Maintainer_name)s, %(Maintainer_email)s, \
+ %(Changes)s)"
+ cur.execute("PREPARE da_insert AS INSERT INTO deferred_architecture (source, version, architecture) VALUES ($1, $2, $3)")
+ q_defarch = "EXECUTE da_insert(%(Source)s, %(Version)s, %(Architecture)s)"
+ cur.execute("PREPARE da_binary AS INSERT INTO deferred_binary (source, version, package) VALUES ($1, $2, $3)")
+ q_defbin = "EXECUTE da_binary(%(Source)s, %(Version)s, %(Package)s)"
+ cur.execute("PREPARE da_closes AS INSERT INTO deferred_closes (source, version, bug) VALUES ($1, $2, $3)")
+ q_defcloses = "EXECUTE da_closes(%(Source)s, %(Version)s, %(Bug)s)"
+
+ cur.execute("DELETE FROM deferred_closes")
+ cur.execute("DELETE FROM deferred_binary")
+ cur.execute("DELETE FROM deferred_architecture")
+ cur.execute("DELETE FROM deferred")
+
+ d_list = []
+ da_list = []
+ db_list = []
+ dc_list = []
+ for current in deb822.Deb822.iter_paragraphs(urllib.urlopen(my_config['url'])):
+ current['Changed-By_name'], current['Changed-By_email'] = email.Utils.parseaddr(current['Changed-By'])
+ current['Maintainer_name'], current['Maintainer_email'] = email.Utils.parseaddr(current['Maintainer'])
+ d_list.append(current)
+ for arch in set(current['Architecture'].split()):
+ current_arch = {'Source': current['Source'], 'Version': current['Version']}
+ current_arch['Architecture'] = arch
+ da_list.append(current_arch)
+ for binary in set(current['Binary'].split()):
+ current_binary = {'Source': current['Source'], 'Version': current['Version']}
+ current_binary['Package'] = binary
+ db_list.append(current_binary)
+ for bug in set(current['Closes'].split()):
+ current_c = {'Source': current['Source'], 'Version': current['Version']}
+ current_c['Bug'] = bug
+ dc_list.append(current_c)
+
+ cur.executemany(q_deferred, d_list)
+ cur.executemany(q_defarch, da_list)
+ cur.executemany(q_defbin, db_list)
+ cur.executemany(q_defcloses, dc_list)
+ cur.execute("ANALYZE deferred")
+ cur.execute("ANALYZE deferred_architecture")
+ cur.execute("ANALYZE deferred_binary")
+ cur.execute("ANALYZE deferred_closes")
+
+# vim:set et tabstop=2:0
More information about the Collab-qa-commits
mailing list