[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