From d8cc8edfc01a8033bbf28421785e90e7fcc5b93b Mon Sep 17 00:00:00 2001 From: Priit Laes Date: Thu, 8 Jul 2010 10:32:03 +0300 Subject: Added herd qa-checker --- utils/qa_check_herd.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 utils/qa_check_herd.py (limited to 'utils/qa_check_herd.py') diff --git a/utils/qa_check_herd.py b/utils/qa_check_herd.py new file mode 100644 index 0000000..21c5ead --- /dev/null +++ b/utils/qa_check_herd.py @@ -0,0 +1,80 @@ +#! /usr/bin/env python +import os, sys + +from datetime import datetime +from lxml.etree import parse + +path = os.path.join(os.path.dirname(__file__), os.path.pardir) +sys.path.insert(0, path) +del path + +from grumpy import app +from grumpy.models import db, Herd, PkgIssue, Setting + +PLUGIN_NAME='qa::valid_herd' + +def gc_collect(timestamp): + """Remove old QA issues from database returning number of rows deleted.""" + db.session.expire_all() + print ("DEBUG: Deleted %d old issues." % PkgIssue.query \ + .filter_by(plugin=PLUGIN_NAME) \ + .filter(PkgIssue.created_on < timestamp).delete(False)) + +def insert_issues(invalid): + """Insert QA issues into db.""" + if 'maintainer-needed' in invalid: + h = Herd.query.filter_by(name='maintainer-needed').first() + for pkg in h.packages: + pkg.qaissues.append(PkgIssue(pkg, PLUGIN_NAME, 'maintainer-needed')) + invalid.remove('maintainer-needed') + if 'no-herd' in invalid: + h = Herd.query.filter_by(name='no-herd').first() + for pkg in h.packages: + pkg.qaissues.append(PkgIssue(pkg, PLUGIN_NAME, 'maintainer-needed')) + invalid.remove('no-herd') + if 'fix-me' in invalid: + h = Herd.query.filter_by(name='fix-me').first() + for pkg in h.packages: + pkg.qaissues.append(PkgIssue(pkg, PLUGIN_NAME, 'invalid-herd', \ + 'Please use no-herd instead of empty tag')) + invalid.remove('fix-me') + for herd in invalid: + h = Herd.query.filter_by(name=herd).first() + for pkg in h.packages: + pkg.qaissues.append(PkgIssue(pkg, PLUGIN_NAME, 'unknown-herd', \ + 'Herd %s is not listed in official herd list.' % herd)) + db.session.commit() + +def parse_herds_xml(file): + """Return list of herd names from 'herds.xml'""" + herds = [] + if not os.path.isfile(file): + print ("File '%s' does not exist" % file) + raise RuntimeError + for child in parse(file).getroot().getchildren(): + for value in child.getchildren(): + if value.tag == 'name': + herds.append(value.text) + return herds + +if __name__ == '__main__': + # TODO: Download latest herds file + # Parse list of herds from file + herds = parse_herds_xml('herds.xml') + b0rks = [] + timestamp = datetime.now() + # Setup database for application + with app.test_request_context(): + # Fetch list of herds from db + for herd in Herd.query.all(): + if herd.name in herds: + herds.remove(herd.name) + else: + b0rks.append(herd.name) + insert_issues(b0rks) + # Clean up issues < timestamp + gc_collect(timestamp) + # Update settings and add info about last run.. + Setting.query.filter_by(name=PLUGIN_NAME).delete(False) + db.session.add(Setting(PLUGIN_NAME, str(timestamp))) + db.session.commit() -- cgit v1.2.3