[llvm-commits] [zorg] r147075 - in /zorg/trunk/lnt/lnt/server: db/testsuitedb.py ui/templates/v4_machine.html
Daniel Dunbar
daniel at zuster.org
Wed Dec 21 12:00:03 PST 2011
Author: ddunbar
Date: Wed Dec 21 14:00:02 2011
New Revision: 147075
URL: http://llvm.org/viewvc/llvm-project?rev=147075&view=rev
Log:
[lnt/v0.4] lnt.server.db.testsuitedb: Refine model classes.
- Change .parameters methods to be properties.
- Factor out methods based on parameterized table access.
Modified:
zorg/trunk/lnt/lnt/server/db/testsuitedb.py
zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html
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=147075&r1=147074&r2=147075&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuitedb.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuitedb.py Wed Dec 21 14:00:02 2011
@@ -38,8 +38,15 @@
self.base = sqlalchemy.ext.declarative.declarative_base()
# Create parameterized model classes for this test suite.
+ class ParameterizedMixin(object):
+ def get_field(self, field):
+ return getattr(self, field.name)
+
+ def set_field(self, field, value):
+ return setattr(self, field.name, value)
+
db_key_name = self.test_suite.db_key_name
- class Machine(self.base):
+ class Machine(self.base, ParameterizedMixin):
__tablename__ = db_key_name + '_Machine'
fields = self.machine_fields
@@ -49,7 +56,7 @@
# The parameters blob is used to store any additional information
# reported by the run but not promoted into the machine record. Such
# data is stored as a JSON encoded blob.
- parameters = Column("Parameters", Binary)
+ parameters_data = Column("Parameters", Binary)
# Dynamically create fields for all of the test suite defined
# machine fields.
@@ -69,16 +76,16 @@
return '%s_%s%r' % (db_key_name, self.__class__.__name__,
(self.name,))
- def get_field(self, field):
- return getattr(self, field.name)
+ @property
+ def parameters(self):
+ """dictionary access to the BLOB encoded parameters data"""
+ return dict(json.loads(self.parameters_data))
+
+ @parameters.setter
+ def parameters(self, data):
+ self.parameters_data = json.dumps(sorted(data.items()))
- def set_field(self, field, value):
- return setattr(self, field.name, value)
-
- def get_parameters(self):
- return json.loads(self.parameters)
-
- class Order(self.base):
+ class Order(self.base, ParameterizedMixin):
__tablename__ = db_key_name + '_Order'
fields = self.order_fields
@@ -102,9 +109,6 @@
for item in self.fields:
self.set_field(item, kwargs[item.name])
- def __repr__(self):
- return '%s_%s%r' % (db_key_name, self.__class__.__name__,
- ())
def __repr__(self):
fields = dict((item.name, self.get_field(item))
@@ -113,13 +117,7 @@
return '%s_%s(**%r)' % (
db_key_name, self.__class__.__name__, fields)
- def get_field(self, field):
- return getattr(self, field.name)
-
- def set_field(self, field, value):
- return setattr(self, field.name, value)
-
- class Run(self.base):
+ class Run(self.base, ParameterizedMixin):
__tablename__ = db_key_name + '_Run'
fields = self.run_fields
@@ -135,7 +133,7 @@
# The parameters blob is used to store any additional information
# reported by the run but not promoted into the machine record. Such
# data is stored as a JSON encoded blob.
- parameters = Column("Parameters", Binary)
+ parameters_data = Column("Parameters", Binary)
machine = sqlalchemy.orm.relation(Machine)
order = sqlalchemy.orm.relation(Order)
@@ -166,16 +164,16 @@
(self.machine, self.order, self.start_time,
self.end_time))
- def get_field(self, field):
- return getattr(self, field.name)
-
- def set_field(self, field, value):
- return setattr(self, field.name, value)
-
- def get_parameters(self):
- return json.loads(self.parameters)
+ @property
+ def parameters(self):
+ """dictionary access to the BLOB encoded parameters data"""
+ return dict(json.loads(self.parameters_data))
+
+ @parameters.setter
+ def parameters(self, data):
+ self.parameters_data = json.dumps(sorted(data.items()))
- class Test(self.base):
+ class Test(self.base, ParameterizedMixin):
__tablename__ = db_key_name + '_Test'
id = Column("ID", Integer, primary_key=True)
@@ -188,13 +186,7 @@
return '%s_%s%r' % (db_key_name, self.__class__.__name__,
(self.name,))
- def get_field(self, field):
- return getattr(self, field.name)
-
- def set_field(self, field, value):
- return setattr(self, field.name, value)
-
- class Sample(self.base):
+ class Sample(self.base, ParameterizedMixin):
__tablename__ = db_key_name + '_Sample'
fields = self.sample_fields
@@ -248,12 +240,6 @@
db_key_name, self.__class__.__name__,
self.run, self.test, fields)
- def get_field(self, field):
- return getattr(self, field.name)
-
- def set_field(self, field, value):
- return setattr(self, field.name, value)
-
self.Machine = Machine
self.Run = Run
self.Test = Test
@@ -265,7 +251,7 @@
Sample.run_id, Sample.test_id)
# Create the index we use to ensure machine uniqueness.
- args = [Machine.name, Machine.parameters]
+ args = [Machine.name, Machine.parameters_data]
for item in self.machine_fields:
args.append(item.column)
sqlalchemy.schema.Index("ix_%s_Machine_Unique" % db_key_name,
@@ -312,13 +298,14 @@
value = ''
query = query.filter(item.column == value)
- machine.set_field(item.name, value)
+ machine.set_field(item, 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)
+ machine.parameters = machine_parameters
+ query = query.filter(self.Machine.parameters_data ==
+ machine.parameters_data)
# Execute the query to see if we already have this machine.
try:
@@ -418,8 +405,8 @@
run.set_field(item, value)
# Any remaining parameters are saved as a JSON encoded array.
- run.parameters = json.dumps(sorted(run_parameters.items()))
- query = query.filter(self.Run.parameters == run.parameters)
+ run.parameters = run_parameters
+ query = query.filter(self.Run.parameters_data == run.parameters_data)
# Execute the query to see if we already have this run.
try:
Modified: zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html?rev=147075&r1=147074&r2=147075&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html (original)
+++ zorg/trunk/lnt/lnt/server/ui/templates/v4_machine.html Wed Dec 21 14:00:02 2011
@@ -50,7 +50,7 @@
</table>
<h4>Parameters</h4>
<table border=1>
-{% for key,value in machine.get_parameters() %}
+{% for key,value in machine.parameters|dictsort %}
<tr>
<td> <b>{{key}}</b> </td>
<td>{{value}}</td>
More information about the llvm-commits
mailing list