Upgrade from Django 0.96 to Django 1.0.2.
Risk: high (framework change)
Visibility: medium
Signed-off-by: James Ren <jamesren@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@3457 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/new_tko/tko/models.py b/new_tko/tko/models.py
index 93e005f..7ee1598 100644
--- a/new_tko/tko/models.py
+++ b/new_tko/tko/models.py
@@ -24,27 +24,34 @@
def _get_group_query_sql(self, query, group_by, extra_select_fields):
group_fields = self._get_field_names(group_by, extra_select_fields)
- select_fields = [field for field in group_fields
- if field not in extra_select_fields]
- for field_name, field_sql in extra_select_fields.iteritems():
- field_sql = self._get_key_unless_is_function(field_sql)
- select_fields.append(field_sql + ' AS ' + field_name)
- # add the extra fields to the query selects, so they'll be sortable
- # and Django won't mess with any of them
- query._select[field_name] = field_sql
+ # Clone the queryset, so that we don't change the original
+ query = query.all()
- _, where, params = query._get_sql_clause()
+ # In order to use query.extra(), we need to first clear the limits
+ # and then add them back in after the extra
+ low = query.query.low_mark
+ high = query.query.high_mark
+ query.query.clear_limits()
+
+ select_fields = dict(
+ (field_name, self._get_key_unless_is_function(field_sql))
+ for field_name, field_sql in extra_select_fields.iteritems())
+ query = query.extra(select=select_fields)
+
+ query.query.set_limits(low=low, high=high)
+
+ sql, params = query.query.as_sql()
# insert GROUP BY clause into query
group_by_clause = ' GROUP BY ' + ', '.join(group_fields)
- group_by_position = where.rfind('ORDER BY')
+ group_by_position = sql.rfind('ORDER BY')
if group_by_position == -1:
- group_by_position = len(where)
- where = (where[:group_by_position] +
- group_by_clause + ' ' +
- where[group_by_position:])
+ group_by_position = len(sql)
+ sql = (sql[:group_by_position] +
+ group_by_clause + ' ' +
+ sql[group_by_position:])
- return ('SELECT ' + ', '.join(select_fields) + where), params
+ return sql, params
def _get_column_names(self, cursor):
@@ -78,7 +85,7 @@
Get the SQL to properly select a per-group count of unique matches for
a grouped query. Returns a tuple (field alias, field SQL)
"""
- if query._distinct:
+ if query.query.distinct:
pk_field = self.get_key_on_this_table()
count_sql = 'COUNT(DISTINCT %s)' % pk_field
else:
@@ -88,10 +95,12 @@
def _get_num_groups_sql(self, query, group_by):
group_fields = self._get_field_names(group_by)
- query._order_by = None # this can mess up the query and isn't needed
- _, where, params = query._get_sql_clause()
+ query = query.order_by() # this can mess up the query and isn't needed
+
+ sql, params = query.query.as_sql()
+ from_ = sql[sql.find(' FROM'):]
return ('SELECT COUNT(DISTINCT %s) %s' % (','.join(group_fields),
- where),
+ from_),
params)
@@ -108,9 +117,9 @@
class Machine(dbmodels.Model):
machine_idx = dbmodels.AutoField(primary_key=True)
- hostname = dbmodels.CharField(unique=True, maxlength=300)
- machine_group = dbmodels.CharField(blank=True, maxlength=240)
- owner = dbmodels.CharField(blank=True, maxlength=240)
+ hostname = dbmodels.CharField(unique=True, max_length=300)
+ machine_group = dbmodels.CharField(blank=True, max_length=240)
+ owner = dbmodels.CharField(blank=True, max_length=240)
class Meta:
db_table = 'machines'
@@ -118,9 +127,9 @@
class Kernel(dbmodels.Model):
kernel_idx = dbmodels.AutoField(primary_key=True)
- kernel_hash = dbmodels.CharField(maxlength=105, editable=False)
- base = dbmodels.CharField(maxlength=90)
- printable = dbmodels.CharField(maxlength=300)
+ kernel_hash = dbmodels.CharField(max_length=105, editable=False)
+ base = dbmodels.CharField(max_length=90)
+ printable = dbmodels.CharField(max_length=300)
class Meta:
db_table = 'kernels'
@@ -128,9 +137,9 @@
class Patch(dbmodels.Model):
kernel = dbmodels.ForeignKey(Kernel, db_column='kernel_idx')
- name = dbmodels.CharField(blank=True, maxlength=240)
- url = dbmodels.CharField(blank=True, maxlength=900)
- hash_ = dbmodels.CharField(blank=True, maxlength=105, db_column='hash')
+ name = dbmodels.CharField(blank=True, max_length=240)
+ url = dbmodels.CharField(blank=True, max_length=900)
+ the_hash = dbmodels.CharField(blank=True, max_length=105, db_column='hash')
class Meta:
db_table = 'patches'
@@ -138,7 +147,7 @@
class Status(dbmodels.Model):
status_idx = dbmodels.AutoField(primary_key=True)
- word = dbmodels.CharField(maxlength=30)
+ word = dbmodels.CharField(max_length=30)
class Meta:
db_table = 'status'
@@ -146,9 +155,9 @@
class Job(dbmodels.Model):
job_idx = dbmodels.AutoField(primary_key=True)
- tag = dbmodels.CharField(unique=True, maxlength=300)
- label = dbmodels.CharField(maxlength=300)
- username = dbmodels.CharField(maxlength=240)
+ tag = dbmodels.CharField(unique=True, max_length=300)
+ label = dbmodels.CharField(max_length=300)
+ username = dbmodels.CharField(max_length=240)
machine = dbmodels.ForeignKey(Machine, db_column='machine_idx')
queued_time = dbmodels.DateTimeField(null=True, blank=True)
started_time = dbmodels.DateTimeField(null=True, blank=True)
@@ -162,11 +171,11 @@
model_logic.ModelWithAttributes):
test_idx = dbmodels.AutoField(primary_key=True)
job = dbmodels.ForeignKey(Job, db_column='job_idx')
- test = dbmodels.CharField(maxlength=90)
- subdir = dbmodels.CharField(blank=True, maxlength=180)
+ test = dbmodels.CharField(max_length=90)
+ subdir = dbmodels.CharField(blank=True, max_length=180)
kernel = dbmodels.ForeignKey(Kernel, db_column='kernel_idx')
status = dbmodels.ForeignKey(Status, db_column='status')
- reason = dbmodels.CharField(blank=True, maxlength=3072)
+ reason = dbmodels.CharField(blank=True, max_length=3072)
machine = dbmodels.ForeignKey(Machine, db_column='machine_idx')
finished_time = dbmodels.DateTimeField(null=True, blank=True)
started_time = dbmodels.DateTimeField(null=True, blank=True)
@@ -195,8 +204,8 @@
class TestAttribute(dbmodels.Model, model_logic.ModelExtensions):
test = dbmodels.ForeignKey(Test, db_column='test_idx')
- attribute = dbmodels.CharField(maxlength=90)
- value = dbmodels.CharField(blank=True, maxlength=300)
+ attribute = dbmodels.CharField(max_length=90)
+ value = dbmodels.CharField(blank=True, max_length=300)
user_created = dbmodels.BooleanField(default=False)
objects = model_logic.ExtendedManager()
@@ -210,8 +219,8 @@
# and is harmless as long as we're careful
test = dbmodels.ForeignKey(Test, db_column='test_idx', primary_key=True)
iteration = dbmodels.IntegerField()
- attribute = dbmodels.CharField(maxlength=90)
- value = dbmodels.CharField(blank=True, maxlength=300)
+ attribute = dbmodels.CharField(max_length=90)
+ value = dbmodels.CharField(blank=True, max_length=300)
objects = model_logic.ExtendedManager()
@@ -223,9 +232,9 @@
# see comment on IterationAttribute regarding primary_key=True
test = dbmodels.ForeignKey(Test, db_column='test_idx', primary_key=True)
iteration = dbmodels.IntegerField()
- attribute = dbmodels.CharField(maxlength=90)
- value = dbmodels.FloatField(null=True, max_digits=12, decimal_places=31,
- blank=True)
+ attribute = dbmodels.CharField(max_length=90)
+ value = dbmodels.DecimalField(null=True, max_digits=12, decimal_places=31,
+ blank=True)
objects = model_logic.ExtendedManager()
@@ -234,10 +243,9 @@
class TestLabel(dbmodels.Model, model_logic.ModelExtensions):
- name = dbmodels.CharField(maxlength=80, unique=True)
+ name = dbmodels.CharField(max_length=80, unique=True)
description = dbmodels.TextField(blank=True)
- tests = dbmodels.ManyToManyField(Test, blank=True,
- filter_interface=dbmodels.HORIZONTAL)
+ tests = dbmodels.ManyToManyField(Test, blank=True)
name_field = 'name'
objects = model_logic.ExtendedManager()
@@ -248,8 +256,8 @@
class SavedQuery(dbmodels.Model, model_logic.ModelExtensions):
# TODO: change this to foreign key once DBs are merged
- owner = dbmodels.CharField(maxlength=80)
- name = dbmodels.CharField(maxlength=100)
+ owner = dbmodels.CharField(max_length=80)
+ name = dbmodels.CharField(max_length=100)
url_token = dbmodels.TextField()
class Meta:
@@ -258,7 +266,7 @@
class EmbeddedGraphingQuery(dbmodels.Model, model_logic.ModelExtensions):
url_token = dbmodels.TextField(null=False, blank=False)
- graph_type = dbmodels.CharField(maxlength=16, null=False, blank=False)
+ graph_type = dbmodels.CharField(max_length=16, null=False, blank=False)
params = dbmodels.TextField(null=False, blank=False)
last_updated = dbmodels.DateTimeField(null=False, blank=False,
editable=False)
@@ -295,8 +303,8 @@
def _add_label_joins(self, query_set, suffix=''):
query_set = self.add_join(query_set, 'test_labels_tests',
- join_key='test_id', suffix=suffix,
- force_left_join=True)
+ join_key='test_id', suffix=suffix,
+ force_left_join=True)
second_join_alias = 'test_labels' + suffix
second_join_condition = ('%s.id = %s.testlabel_id' %
@@ -305,9 +313,9 @@
filter_object = self._CustomSqlQ()
filter_object.add_join('test_labels',
second_join_condition,
- 'LEFT JOIN',
+ query_set.query.LOUTER,
alias=second_join_alias)
- return query_set.filter(filter_object)
+ return self._add_customSqlQ(query_set, filter_object)
def _add_attribute_join(self, query_set, join_condition='', suffix=None,
@@ -429,27 +437,27 @@
test_idx = dbmodels.IntegerField('test index', primary_key=True)
job_idx = dbmodels.IntegerField('job index', null=True, blank=True)
- test_name = dbmodels.CharField(blank=True, maxlength=90)
- subdir = dbmodels.CharField('subdirectory', blank=True, maxlength=180)
+ test_name = dbmodels.CharField(blank=True, max_length=90)
+ subdir = dbmodels.CharField('subdirectory', blank=True, max_length=180)
kernel_idx = dbmodels.IntegerField('kernel index')
status_idx = dbmodels.IntegerField('status index')
- reason = dbmodels.CharField(blank=True, maxlength=3072)
+ reason = dbmodels.CharField(blank=True, max_length=3072)
machine_idx = dbmodels.IntegerField('host index')
test_started_time = dbmodels.DateTimeField(null=True, blank=True)
test_finished_time = dbmodels.DateTimeField(null=True, blank=True)
- job_tag = dbmodels.CharField(blank=True, maxlength=300)
- job_name = dbmodels.CharField(blank=True, maxlength=300)
- job_owner = dbmodels.CharField('owner', blank=True, maxlength=240)
+ job_tag = dbmodels.CharField(blank=True, max_length=300)
+ job_name = dbmodels.CharField(blank=True, max_length=300)
+ job_owner = dbmodels.CharField('owner', blank=True, max_length=240)
job_queued_time = dbmodels.DateTimeField(null=True, blank=True)
job_started_time = dbmodels.DateTimeField(null=True, blank=True)
job_finished_time = dbmodels.DateTimeField(null=True, blank=True)
- hostname = dbmodels.CharField(blank=True, maxlength=300)
- platform = dbmodels.CharField(blank=True, maxlength=240)
- machine_owner = dbmodels.CharField(blank=True, maxlength=240)
- kernel_hash = dbmodels.CharField(blank=True, maxlength=105)
- kernel_base = dbmodels.CharField(blank=True, maxlength=90)
- kernel = dbmodels.CharField(blank=True, maxlength=300)
- status = dbmodels.CharField(blank=True, maxlength=30)
+ hostname = dbmodels.CharField(blank=True, max_length=300)
+ platform = dbmodels.CharField(blank=True, max_length=240)
+ machine_owner = dbmodels.CharField(blank=True, max_length=240)
+ kernel_hash = dbmodels.CharField(blank=True, max_length=105)
+ kernel_base = dbmodels.CharField(blank=True, max_length=90)
+ kernel = dbmodels.CharField(blank=True, max_length=300)
+ status = dbmodels.CharField(blank=True, max_length=30)
objects = TestViewManager()