[llvm-commits] [zorg] r146946 - in /zorg/trunk/lnt/lnt/server/db: testsuitedb.py v4db.py
Daniel Dunbar
daniel at zuster.org
Mon Dec 19 17:14:27 PST 2011
Author: ddunbar
Date: Mon Dec 19 19:14:26 2011
New Revision: 146946
URL: http://llvm.org/viewvc/llvm-project?rev=146946&view=rev
Log:
[lnt/v0.4] lnt.server.db.testsuitedb: Start implementing import functionality (just machine records, currently).
Modified:
zorg/trunk/lnt/lnt/server/db/testsuitedb.py
zorg/trunk/lnt/lnt/server/db/v4db.py
Modified: zorg/trunk/lnt/lnt/server/db/testsuitedb.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuitedb.py?rev=146946&r1=146945&r2=146946&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuitedb.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuitedb.py Mon Dec 19 19:14:26 2011
@@ -5,6 +5,8 @@
suite metadata, so we only create the classes at runtime.
"""
+import json
+
import sqlalchemy
from sqlalchemy import *
@@ -213,3 +215,62 @@
self.add = self.v4db.add
self.commit = self.v4db.commit
self.query = self.v4db.query
+
+ def _getOrCreateMachine(self, machine_data):
+ """
+ _getOrCreateMachine(data) -> Machine
+
+ Add or create (and insert) a Machine record from the given machine data
+ (as recorded by the test interchange format).
+ """
+
+ # Convert the machine data into a machine record. We construct the query
+ # to look for any existing machine at the same time as we build up the
+ # record to possibly add.
+ #
+ # FIXME: This feels inelegant, can't SA help us out here?
+ query = self.query(self.Machine).\
+ filter(self.Machine.name == machine_data['Name'])
+ machine = self.Machine(machine_data['Name'])
+ machine_parameters = machine_data['Info'].copy()
+
+ # First, extract all of the specified machine fields.
+ for item in self.test_suite.machine_fields:
+ if item.info_key in machine_parameters:
+ value = machine_parameters.pop(item.info_key)
+ else:
+ # For now, insert empty values for any missing fields. We don't
+ # want to insert NULLs, so we should probably allow the test
+ # suite to define defaults.
+ value = ''
+
+ # FIXME: Avoid setattr.
+ query = query.filter(item.column == value)
+ setattr(machine, item.name, value)
+
+ # Convert any remaining machine_parameters into a JSON encoded blob. We
+ # encode this as an array to avoid a potential ambiguity on the key
+ # ordering.
+ machine.parameters = json.dumps(sorted(machine_parameters.items()))
+ query = query.filter(self.Machine.parameters == machine.parameters)
+
+ # Execute the query to see if we already have this machine.
+ try:
+ return query.one()
+ except sqlalchemy.orm.exc.NoResultFound:
+ # If not, add the machine.
+ self.add(machine)
+
+ return machine
+
+ def importDataFromDict(self, data):
+ # Construct the machine entry.
+ machine = self._getOrCreateMachine(data['Machine'])
+
+ self.commit()
+
+ import sys
+ print >>sys.stderr,"added machine %r" % machine.id
+
+ print self.test_suite.machine_fields
+ raise NotImplementedError
Modified: zorg/trunk/lnt/lnt/server/db/v4db.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/v4db.py?rev=146946&r1=146945&r2=146946&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/v4db.py (original)
+++ zorg/trunk/lnt/lnt/server/db/v4db.py Mon Dec 19 19:14:26 2011
@@ -33,6 +33,11 @@
self._cache[name] = ts = testsuitedb.TestSuiteDB(self.v4db, ts)
return ts
+ def get(self, name, default = None):
+ if name in self:
+ return self[name]
+ return default
+
def keys(self):
return iter(self)
@@ -96,4 +101,14 @@
for ts in self.testsuite.values()])
def importDataFromDict(self, data):
- raise NotImplementedError
+ # Select the database to import into.
+ #
+ # FIXME: Promote this to a top-level field in the data.
+ tag = data['Run']['Info'].get('tag')
+ db_name = { 'nts' : 'nt' }.get(tag)
+ if db_name is None:
+ raise ValueError,"unknown database target from tag %r" % (
+ tag,)
+
+ db = self.testsuite.get(db_name)
+ return db.importDataFromDict(data)
More information about the llvm-commits
mailing list