From 31f9d3fc0fee8afe3da50e52feaac80fc00f4021 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 8 Apr 2012 14:08:45 -0500 Subject: Add migrations for on_delete attributes I don't think these end up doing anything at the database level, but since South insists on generating alter_column() calls for these changes, do them once so they don't keep reappearing in auto-generated future migrations. Signed-off-by: Dan McGee --- .../0012_auto__add_on_delete_attribute.py | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 mirrors/migrations/0012_auto__add_on_delete_attribute.py (limited to 'mirrors') diff --git a/mirrors/migrations/0012_auto__add_on_delete_attribute.py b/mirrors/migrations/0012_auto__add_on_delete_attribute.py new file mode 100644 index 00000000..3990d466 --- /dev/null +++ b/mirrors/migrations/0012_auto__add_on_delete_attribute.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + db.alter_column('mirrors_mirror', 'upstream_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['mirrors.Mirror'], null=True, on_delete=models.SET_NULL)) + db.alter_column('mirrors_mirrorurl', 'protocol_id', self.gf('django.db.models.fields.related.ForeignKey')(on_delete=models.PROTECT, to=orm['mirrors.MirrorProtocol'])) + + def backwards(self, orm): + db.alter_column('mirrors_mirror', 'upstream_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['mirrors.Mirror'], null=True)) + db.alter_column('mirrors_mirrorurl', 'protocol_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['mirrors.MirrorProtocol'])) + + models = { + 'mirrors.mirror': { + 'Meta': {'ordering': "('country', 'name')", 'object_name': 'Mirror'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'admin_email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'isos': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'rsync_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + 'rsync_user': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '50', 'blank': 'True'}), + 'tier': ('django.db.models.fields.SmallIntegerField', [], {'default': '2'}), + 'upstream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['mirrors.Mirror']", 'null': 'True', 'on_delete': 'models.SET_NULL'}) + }, + 'mirrors.mirrorlog': { + 'Meta': {'object_name': 'MirrorLog'}, + 'check_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'duration': ('django.db.models.fields.FloatField', [], {'null': 'True'}), + 'error': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_success': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_sync': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'url': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'logs'", 'to': "orm['mirrors.MirrorUrl']"}) + }, + 'mirrors.mirrorprotocol': { + 'Meta': {'ordering': "('protocol',)", 'object_name': 'MirrorProtocol'}, + 'default': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_download': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}) + }, + 'mirrors.mirrorrsync': { + 'Meta': {'object_name': 'MirrorRsync'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'max_length': '24'}), + 'mirror': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rsync_ips'", 'to': "orm['mirrors.Mirror']"}) + }, + 'mirrors.mirrorurl': { + 'Meta': {'object_name': 'MirrorUrl'}, + 'country': ('mirrors.models.NullCharField', [], {'db_index': 'True', 'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'has_ipv4': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'has_ipv6': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mirror': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'urls'", 'to': "orm['mirrors.Mirror']"}), + 'protocol': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'urls'", 'on_delete': 'models.PROTECT', 'to': "orm['mirrors.MirrorProtocol']"}), + 'url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + } + } + + complete_apps = ['mirrors'] -- cgit v1.2.3-54-g00ecf From 3813ca597b3d76538f4d495e5eaf5b649e77adff Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 8 Apr 2012 21:00:56 -0500 Subject: Don't blow up when no mirror status data is available The check here was wrong before; in the case of no mirror log entries the returned value will not be empty, but will contain two empty values. Check the values instead to see if we have valid data available. Signed-off-by: Dan McGee --- mirrors/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mirrors') diff --git a/mirrors/utils.py b/mirrors/utils.py index 619d5f5c..ddecb095 100644 --- a/mirrors/utils.py +++ b/mirrors/utils.py @@ -108,7 +108,7 @@ def get_mirror_url_for_download(cutoff=default_cutoff): status_data = MirrorLog.objects.filter( check_time__gte=cutoff_time).aggregate( Max('check_time'), Max('last_sync')) - if status_data: + if status_data['check_time__max'] is not None: min_check_time = status_data['check_time__max'] - timedelta(minutes=5) min_sync_time = status_data['last_sync__max'] - timedelta(minutes=30) best_logs = MirrorLog.objects.filter(is_success=True, -- cgit v1.2.3-54-g00ecf From c3a5f8a4e83983a352c45eeaa550cad315dddcb7 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 20 Apr 2012 10:36:20 -0500 Subject: Fix ContentType related migrations This should fix the issues reported in FS#23228 for the most part. Signed-off-by: Dan McGee --- main/migrations/0030_move_mirror_models.py | 4 ---- main/migrations/0031_move_news_out.py | 4 ---- main/migrations/0034_update_content_type.py | 26 +++++--------------------- mirrors/migrations/0002_rename_model_tables.py | 21 ++++++++++++++++++++- news/migrations/0002_move_news_in.py | 11 ++++++++--- 5 files changed, 33 insertions(+), 33 deletions(-) (limited to 'mirrors') diff --git a/main/migrations/0030_move_mirror_models.py b/main/migrations/0030_move_mirror_models.py index 998ff6a2..1fe0c7e9 100644 --- a/main/migrations/0030_move_mirror_models.py +++ b/main/migrations/0030_move_mirror_models.py @@ -6,10 +6,6 @@ class Migration(SchemaMigration): - depends_on = ( - ('mirrors', '0002_rename_model_tables'), - ) - def forwards(self, orm): pass diff --git a/main/migrations/0031_move_news_out.py b/main/migrations/0031_move_news_out.py index a730f4f3..28f4b750 100644 --- a/main/migrations/0031_move_news_out.py +++ b/main/migrations/0031_move_news_out.py @@ -6,10 +6,6 @@ class Migration(SchemaMigration): - depends_on = ( - ('news', '0002_move_news_in'), - ) - def forwards(self, orm): pass diff --git a/main/migrations/0034_update_content_type.py b/main/migrations/0034_update_content_type.py index 779021da..59c6f6ad 100644 --- a/main/migrations/0034_update_content_type.py +++ b/main/migrations/0034_update_content_type.py @@ -5,31 +5,15 @@ from django.db import models class Migration(DataMigration): - - depends_on = ( - ('mirrors', '0002_rename_model_tables'), - ('news', '0002_move_news_in'), - ) - - mirror_apps = [ 'mirror', 'mirrorprotocol', 'mirrorurl', 'mirrorrsync' ] + '''This is a defunct migration now, things have been moved to their proper + places, but removing it would cause all existing setups migrated past this + to complain.''' def forwards(self, orm): - ct = orm['contenttypes.ContentType'].objects - - # somehow these got in there already; remove them in favor of the old - ct.filter(app_label='news').delete() - ct.filter(app_label='mirrors').delete() - - ct.filter(app_label='main', model='news').update(app_label='news') - ct.filter(app_label='main', model__in=self.mirror_apps).update( - app_label='mirrors') + pass def backwards(self, orm): - ct = orm['contenttypes.ContentType'].objects - - ct.filter(app_label='mirrors', model__in=self.mirror_apps).update( - app_label='main') - ct.filter(app_label='news', model='news').update(app_label='main') + pass models = { 'auth.group': { diff --git a/mirrors/migrations/0002_rename_model_tables.py b/mirrors/migrations/0002_rename_model_tables.py index d510bada..087edd68 100644 --- a/mirrors/migrations/0002_rename_model_tables.py +++ b/mirrors/migrations/0002_rename_model_tables.py @@ -7,21 +7,33 @@ class Migration(SchemaMigration): depends_on = ( - ('main', '0014_mirror_notes_rsync_optional'), + ('main', '0030_move_mirror_models'), ) + mirror_apps = [ 'mirror', 'mirrorprotocol', 'mirrorurl', 'mirrorrsync' ] + def forwards(self, orm): db.rename_table('main_mirror', 'mirrors_mirror') db.rename_table('main_mirrorurl', 'mirrors_mirrorurl') db.rename_table('main_mirrorrsync', 'mirrors_mirrorrsync') db.rename_table('main_mirrorprotocol', 'mirrors_mirrorprotocol') + if not db.dry_run: + ct = orm['contenttypes.ContentType'].objects + ct.filter(app_label='main', model__in=self.mirror_apps).update( + app_label='mirrors') + def backwards(self, orm): db.rename_table('mirrors_mirror', 'main_mirror') db.rename_table('mirrors_mirrorurl', 'main_mirrorurl') db.rename_table('mirrors_mirrorrsync', 'main_mirrorrsync') db.rename_table('mirrors_mirrorprotocol', 'main_mirrorprotocol') + if not db.dry_run: + ct = orm['contenttypes.ContentType'].objects + ct.filter(app_label='mirrors', model__in=self.mirror_apps).update( + app_label='main') + models = { 'mirrors.mirror': { 'Meta': {'ordering': "('country', 'name')", 'object_name': 'Mirror'}, @@ -55,6 +67,13 @@ def backwards(self, orm): 'mirror': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'urls'", 'to': "orm['mirrors.Mirror']"}), 'protocol': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'urls'", 'to': "orm['mirrors.MirrorProtocol']"}), 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) } } diff --git a/news/migrations/0002_move_news_in.py b/news/migrations/0002_move_news_in.py index d6dafad4..43d68df4 100644 --- a/news/migrations/0002_move_news_in.py +++ b/news/migrations/0002_move_news_in.py @@ -7,14 +7,19 @@ class Migration(SchemaMigration): depends_on = ( - ('main', '0001_initial'), + ('main', '0031_move_news_out'), ) def forwards(self, orm): - pass + db.send_create_signal('news', ['News']) + if not db.dry_run: + ct = orm['contenttypes.ContentType'].objects + ct.filter(app_label='main', model='news').update(app_label='news') def backwards(self, orm): - pass + if not db.dry_run: + ct = orm['contenttypes.ContentType'].objects + ct.filter(app_label='news', model='news').update(app_label='main') models = { 'auth.group': { -- cgit v1.2.3-54-g00ecf