diff options
Diffstat (limited to 'src/lib')
12 files changed, 1046 insertions, 479 deletions
diff --git a/src/lib/Bcfg2/DBSettings.py b/src/lib/Bcfg2/DBSettings.py index 420f0ddd8..bff24ffce 100644 --- a/src/lib/Bcfg2/DBSettings.py +++ b/src/lib/Bcfg2/DBSettings.py @@ -67,8 +67,13 @@ settings = dict( # pylint: disable=C0103 'django.core.context_processors.request'), DATABASE_ROUTERS=['Bcfg2.DBSettings.PerApplicationRouter']) -if HAS_SOUTH: +if HAS_DJANGO and django.VERSION[0] == 1 and django.VERSION[1] >= 7: + settings['INSTALLED_APPS'] += ('Bcfg2.Reporting',) +elif HAS_SOUTH: settings['INSTALLED_APPS'] += ('south', 'Bcfg2.Reporting') + settings['SOUTH_MIGRATION_MODULES'] = { + 'Bcfg2.Reporting': 'Bcfg2.Reporting.south_migrations' + } if 'BCFG2_LEGACY_MODELS' in os.environ: settings['INSTALLED_APPS'] += ('Bcfg2.Server.Reports.reports',) diff --git a/src/lib/Bcfg2/Reporting/migrations/0001_initial.py b/src/lib/Bcfg2/Reporting/migrations/0001_initial.py index 609290edb..0e23397ff 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0001_initial.py +++ b/src/lib/Bcfg2/Reporting/migrations/0001_initial.py @@ -1,465 +1,545 @@ # -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'Client' - db.create_table('Reporting_client', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('creation', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('current_interaction', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='parent_client', null=True, to=orm['Reporting.Interaction'])), - ('expiration', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), - )) - db.send_create_signal('Reporting', ['Client']) - - # Adding model 'Interaction' - db.create_table('Reporting_interaction', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='interactions', to=orm['Reporting.Client'])), - ('timestamp', self.gf('django.db.models.fields.DateTimeField')(db_index=True)), - ('state', self.gf('django.db.models.fields.CharField')(max_length=32)), - ('repo_rev_code', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('server', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('good_count', self.gf('django.db.models.fields.IntegerField')()), - ('total_count', self.gf('django.db.models.fields.IntegerField')()), - ('bad_count', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('modified_count', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('extra_count', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('profile', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.Group'])), - )) - db.send_create_signal('Reporting', ['Interaction']) - - # Adding unique constraint on 'Interaction', fields ['client', 'timestamp'] - db.create_unique('Reporting_interaction', ['client_id', 'timestamp']) - - # Adding M2M table for field actions on 'Interaction' - db.create_table('Reporting_interaction_actions', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('actionentry', models.ForeignKey(orm['Reporting.actionentry'], null=False)) - )) - db.create_unique('Reporting_interaction_actions', ['interaction_id', 'actionentry_id']) - - # Adding M2M table for field packages on 'Interaction' - db.create_table('Reporting_interaction_packages', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('packageentry', models.ForeignKey(orm['Reporting.packageentry'], null=False)) - )) - db.create_unique('Reporting_interaction_packages', ['interaction_id', 'packageentry_id']) - - # Adding M2M table for field paths on 'Interaction' - db.create_table('Reporting_interaction_paths', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)) - )) - db.create_unique('Reporting_interaction_paths', ['interaction_id', 'pathentry_id']) - - # Adding M2M table for field services on 'Interaction' - db.create_table('Reporting_interaction_services', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('serviceentry', models.ForeignKey(orm['Reporting.serviceentry'], null=False)) - )) - db.create_unique('Reporting_interaction_services', ['interaction_id', 'serviceentry_id']) - - # Adding M2M table for field failures on 'Interaction' - db.create_table('Reporting_interaction_failures', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('failureentry', models.ForeignKey(orm['Reporting.failureentry'], null=False)) - )) - db.create_unique('Reporting_interaction_failures', ['interaction_id', 'failureentry_id']) - - # Adding M2M table for field groups on 'Interaction' - db.create_table('Reporting_interaction_groups', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('group', models.ForeignKey(orm['Reporting.group'], null=False)) - )) - db.create_unique('Reporting_interaction_groups', ['interaction_id', 'group_id']) - - # Adding M2M table for field bundles on 'Interaction' - db.create_table('Reporting_interaction_bundles', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), - ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False)) - )) - db.create_unique('Reporting_interaction_bundles', ['interaction_id', 'bundle_id']) - - # Adding model 'Performance' - db.create_table('Reporting_performance', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('interaction', self.gf('django.db.models.fields.related.ForeignKey')(related_name='performance_items', to=orm['Reporting.Interaction'])), - ('metric', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('value', self.gf('django.db.models.fields.DecimalField')(max_digits=32, decimal_places=16)), - )) - db.send_create_signal('Reporting', ['Performance']) - - # Adding model 'Group' - db.create_table('Reporting_group', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), - ('profile', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('public', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('category', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('comment', self.gf('django.db.models.fields.TextField')(blank=True)), - )) - db.send_create_signal('Reporting', ['Group']) - - # Adding M2M table for field groups on 'Group' - db.create_table('Reporting_group_groups', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('from_group', models.ForeignKey(orm['Reporting.group'], null=False)), - ('to_group', models.ForeignKey(orm['Reporting.group'], null=False)) - )) - db.create_unique('Reporting_group_groups', ['from_group_id', 'to_group_id']) - - # Adding M2M table for field bundles on 'Group' - db.create_table('Reporting_group_bundles', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('group', models.ForeignKey(orm['Reporting.group'], null=False)), - ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False)) - )) - db.create_unique('Reporting_group_bundles', ['group_id', 'bundle_id']) - - # Adding model 'Bundle' - db.create_table('Reporting_bundle', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), - )) - db.send_create_signal('Reporting', ['Bundle']) - - # Adding model 'FilePerms' - db.create_table('Reporting_fileperms', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('owner', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('group', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('perms', self.gf('django.db.models.fields.CharField')(max_length=128)), - )) - db.send_create_signal('Reporting', ['FilePerms']) - - # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'perms'] - db.create_unique('Reporting_fileperms', ['owner', 'group', 'perms']) - - # Adding model 'FileAcl' - db.create_table('Reporting_fileacl', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - )) - db.send_create_signal('Reporting', ['FileAcl']) - - # Adding model 'FailureEntry' - db.create_table('Reporting_failureentry', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), - ('entry_type', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('message', self.gf('django.db.models.fields.TextField')()), - )) - db.send_create_signal('Reporting', ['FailureEntry']) - - # Adding model 'ActionEntry' - db.create_table('Reporting_actionentry', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), - ('state', self.gf('django.db.models.fields.IntegerField')()), - ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('status', self.gf('django.db.models.fields.CharField')(default='check', max_length=128)), - ('output', self.gf('django.db.models.fields.IntegerField')(default=0)), - )) - db.send_create_signal('Reporting', ['ActionEntry']) - - # Adding model 'PackageEntry' - db.create_table('Reporting_packageentry', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), - ('state', self.gf('django.db.models.fields.IntegerField')()), - ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('target_version', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), - ('current_version', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('verification_details', self.gf('django.db.models.fields.TextField')(default='')), - )) - db.send_create_signal('Reporting', ['PackageEntry']) - - # Adding model 'PathEntry' - db.create_table('Reporting_pathentry', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), - ('state', self.gf('django.db.models.fields.IntegerField')()), - ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('path_type', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('target_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])), - ('current_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])), - ('detail_type', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('details', self.gf('django.db.models.fields.TextField')(default='')), - )) - db.send_create_signal('Reporting', ['PathEntry']) - - # Adding M2M table for field acls on 'PathEntry' - db.create_table('Reporting_pathentry_acls', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)), - ('fileacl', models.ForeignKey(orm['Reporting.fileacl'], null=False)) - )) - db.create_unique('Reporting_pathentry_acls', ['pathentry_id', 'fileacl_id']) - - # Adding model 'LinkEntry' - db.create_table('Reporting_linkentry', ( - ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)), - ('target_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('current_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - )) - db.send_create_signal('Reporting', ['LinkEntry']) - - # Adding model 'DeviceEntry' - db.create_table('Reporting_deviceentry', ( - ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)), - ('device_type', self.gf('django.db.models.fields.CharField')(max_length=16)), - ('target_major', self.gf('django.db.models.fields.IntegerField')()), - ('target_minor', self.gf('django.db.models.fields.IntegerField')()), - ('current_major', self.gf('django.db.models.fields.IntegerField')()), - ('current_minor', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal('Reporting', ['DeviceEntry']) - - # Adding model 'ServiceEntry' - db.create_table('Reporting_serviceentry', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), - ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), - ('state', self.gf('django.db.models.fields.IntegerField')()), - ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('target_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)), - ('current_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)), - )) - db.send_create_signal('Reporting', ['ServiceEntry']) - - - def backwards(self, orm): - # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'perms'] - db.delete_unique('Reporting_fileperms', ['owner', 'group', 'perms']) - - # Removing unique constraint on 'Interaction', fields ['client', 'timestamp'] - db.delete_unique('Reporting_interaction', ['client_id', 'timestamp']) - - # Deleting model 'Client' - db.delete_table('Reporting_client') - - # Deleting model 'Interaction' - db.delete_table('Reporting_interaction') - - # Removing M2M table for field actions on 'Interaction' - db.delete_table('Reporting_interaction_actions') - - # Removing M2M table for field packages on 'Interaction' - db.delete_table('Reporting_interaction_packages') - - # Removing M2M table for field paths on 'Interaction' - db.delete_table('Reporting_interaction_paths') - - # Removing M2M table for field services on 'Interaction' - db.delete_table('Reporting_interaction_services') - - # Removing M2M table for field failures on 'Interaction' - db.delete_table('Reporting_interaction_failures') - - # Removing M2M table for field groups on 'Interaction' - db.delete_table('Reporting_interaction_groups') - - # Removing M2M table for field bundles on 'Interaction' - db.delete_table('Reporting_interaction_bundles') - - # Deleting model 'Performance' - db.delete_table('Reporting_performance') - - # Deleting model 'Group' - db.delete_table('Reporting_group') - - # Removing M2M table for field groups on 'Group' - db.delete_table('Reporting_group_groups') - - # Removing M2M table for field bundles on 'Group' - db.delete_table('Reporting_group_bundles') - - # Deleting model 'Bundle' - db.delete_table('Reporting_bundle') - - # Deleting model 'FilePerms' - db.delete_table('Reporting_fileperms') - - # Deleting model 'FileAcl' - db.delete_table('Reporting_fileacl') - - # Deleting model 'FailureEntry' - db.delete_table('Reporting_failureentry') - - # Deleting model 'ActionEntry' - db.delete_table('Reporting_actionentry') - - # Deleting model 'PackageEntry' - db.delete_table('Reporting_packageentry') - - # Deleting model 'PathEntry' - db.delete_table('Reporting_pathentry') - - # Removing M2M table for field acls on 'PathEntry' - db.delete_table('Reporting_pathentry_acls') - - # Deleting model 'LinkEntry' - db.delete_table('Reporting_linkentry') - - # Deleting model 'DeviceEntry' - db.delete_table('Reporting_deviceentry') - - # Deleting model 'ServiceEntry' - db.delete_table('Reporting_serviceentry') - - - models = { - 'Reporting.actionentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'}, - 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), - 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'state': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'}) - }, - 'Reporting.bundle': { - 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) - }, - 'Reporting.client': { - 'Meta': {'object_name': 'Client'}, - 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}), - 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'Reporting.deviceentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']}, - 'current_major': ('django.db.models.fields.IntegerField', [], {}), - 'current_minor': ('django.db.models.fields.IntegerField', [], {}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}), - 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}), - 'target_major': ('django.db.models.fields.IntegerField', [], {}), - 'target_minor': ('django.db.models.fields.IntegerField', [], {}) - }, - 'Reporting.failureentry': { - 'Meta': {'object_name': 'FailureEntry'}, - 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) - }, - 'Reporting.fileacl': { - 'Meta': {'object_name': 'FileAcl'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) - }, - 'Reporting.fileperms': { - 'Meta': {'unique_together': "(('owner', 'group', 'perms'),)", 'object_name': 'FilePerms'}, - 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'Reporting.group': { - 'Meta': {'ordering': "('name',)", 'object_name': 'Group'}, - 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}), - 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), - 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'Reporting.interaction': { - 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'}, - 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}), - 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}), - 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}), - 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}), - 'good_count': ('django.db.models.fields.IntegerField', [], {}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}), - 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}), - 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}), - 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), - 'total_count': ('django.db.models.fields.IntegerField', [], {}) - }, - 'Reporting.linkentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']}, - 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}), - 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}) - }, - 'Reporting.packageentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'}, - 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), - 'state': ('django.db.models.fields.IntegerField', [], {}), - 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"}) - }, - 'Reporting.pathentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'}, - 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}), - 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}), - 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'details': ('django.db.models.fields.TextField', [], {'default': "''"}), - 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), - 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'state': ('django.db.models.fields.IntegerField', [], {}), - 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}) - }, - 'Reporting.performance': { - 'Meta': {'object_name': 'Performance'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}), - 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'}) - }, - 'Reporting.serviceentry': { - 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'}, - 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}), - 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), - 'state': ('django.db.models.fields.IntegerField', [], {}), - 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}) - } - } - - complete_apps = ['Reporting']
\ No newline at end of file +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ActionEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('status', models.CharField(default=b'check', max_length=128)), + ('output', models.IntegerField(default=0)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Bundle', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=255)), + ], + options={ + 'ordering': ('name',), + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Client', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('creation', models.DateTimeField(auto_now_add=True)), + ('name', models.CharField(max_length=128)), + ('expiration', models.DateTimeField(null=True, blank=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FailureEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('entry_type', models.CharField(max_length=128)), + ('message', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FileAcl', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FilePerms', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('owner', models.CharField(max_length=128)), + ('group', models.CharField(max_length=128)), + ('mode', models.CharField(max_length=128)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=255)), + ('profile', models.BooleanField(default=False)), + ('public', models.BooleanField(default=False)), + ('category', models.CharField(max_length=1024, blank=True)), + ('comment', models.TextField(blank=True)), + ('bundles', models.ManyToManyField(to='Reporting.Bundle')), + ('groups', models.ManyToManyField(to='Reporting.Group')), + ], + options={ + 'ordering': ('name',), + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Interaction', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('timestamp', models.DateTimeField(db_index=True)), + ('state', models.CharField(max_length=32)), + ('repo_rev_code', models.CharField(max_length=64)), + ('server', models.CharField(max_length=256)), + ('good_count', models.IntegerField()), + ('total_count', models.IntegerField()), + ('bad_count', models.IntegerField(default=0)), + ('modified_count', models.IntegerField(default=0)), + ('extra_count', models.IntegerField(default=0)), + ('dry_run', models.BooleanField(default=False)), + ('only_important', models.BooleanField(default=False)), + ('actions', models.ManyToManyField(to='Reporting.ActionEntry')), + ('bundles', models.ManyToManyField(to='Reporting.Bundle')), + ('client', models.ForeignKey(related_name='interactions', to='Reporting.Client')), + ('failures', models.ManyToManyField(to='Reporting.FailureEntry')), + ('groups', models.ManyToManyField(to='Reporting.Group')), + ], + options={ + 'ordering': ['-timestamp'], + 'get_latest_by': 'timestamp', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PackageEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('target_version', models.CharField(default=b'', max_length=1024)), + ('current_version', models.CharField(max_length=1024)), + ('verification_details', models.TextField(default=b'')), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PathEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('path_type', models.CharField(max_length=128, choices=[(b'device', b'Device'), (b'directory', b'Directory'), (b'hardlink', b'Hard Link'), (b'nonexistent', b'Non Existent'), (b'permissions', b'Permissions'), (b'symlink', b'Symlink')])), + ('detail_type', models.IntegerField(default=0, choices=[(0, b'Unused'), (1, b'Diff'), (2, b'Binary'), (3, b'Sensitive'), (4, b'Size limit exceeded'), (5, b'VCS output'), (6, b'Pruned paths')])), + ('details', models.TextField(default=b'')), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='LinkEntry', + fields=[ + ('pathentry_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='Reporting.PathEntry')), + ('target_path', models.CharField(max_length=1024, blank=True)), + ('current_path', models.CharField(max_length=1024, blank=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=('Reporting.pathentry',), + ), + migrations.CreateModel( + name='DeviceEntry', + fields=[ + ('pathentry_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='Reporting.PathEntry')), + ('device_type', models.CharField(max_length=16, choices=[(b'block', b'Block'), (b'char', b'Char'), (b'fifo', b'Fifo')])), + ('target_major', models.IntegerField()), + ('target_minor', models.IntegerField()), + ('current_major', models.IntegerField()), + ('current_minor', models.IntegerField()), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=('Reporting.pathentry',), + ), + migrations.CreateModel( + name='Performance', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('metric', models.CharField(max_length=128)), + ('value', models.DecimalField(max_digits=32, decimal_places=16)), + ('interaction', models.ForeignKey(related_name='performance_items', to='Reporting.Interaction')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='POSIXGroupEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('gid', models.IntegerField(null=True)), + ('current_gid', models.IntegerField(null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='POSIXUserEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('uid', models.IntegerField(null=True)), + ('current_uid', models.IntegerField(null=True)), + ('group', models.CharField(max_length=64)), + ('current_group', models.CharField(max_length=64, null=True)), + ('gecos', models.CharField(max_length=1024)), + ('current_gecos', models.CharField(max_length=1024, null=True)), + ('home', models.CharField(max_length=1024)), + ('current_home', models.CharField(max_length=1024, null=True)), + ('shell', models.CharField(default=b'/bin/bash', max_length=1024)), + ('current_shell', models.CharField(max_length=1024, null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEBooleanEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('value', models.BooleanField(default=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEFcontextEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('selinuxtype', models.CharField(max_length=128)), + ('current_selinuxtype', models.CharField(max_length=128, null=True)), + ('filetype', models.CharField(max_length=16)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEInterfaceEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('selinuxtype', models.CharField(max_length=128)), + ('current_selinuxtype', models.CharField(max_length=128, null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SELoginEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('selinuxuser', models.CharField(max_length=128)), + ('current_selinuxuser', models.CharField(max_length=128, null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEModuleEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('disabled', models.BooleanField(default=False)), + ('current_disabled', models.BooleanField(default=False)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SENodeEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('selinuxtype', models.CharField(max_length=128)), + ('current_selinuxtype', models.CharField(max_length=128, null=True)), + ('proto', models.CharField(max_length=4)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEPermissiveEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEPortEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('selinuxtype', models.CharField(max_length=128)), + ('current_selinuxtype', models.CharField(max_length=128, null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='ServiceEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('target_status', models.CharField(default=b'', max_length=128)), + ('current_status', models.CharField(default=b'', max_length=128)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SEUserEntry', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128, db_index=True)), + ('hash_key', models.BigIntegerField(editable=False, db_index=True)), + ('state', models.IntegerField(choices=[(0, b'Good'), (1, b'Bad'), (2, b'Modified'), (3, b'Extra')])), + ('exists', models.BooleanField(default=True)), + ('roles', models.CharField(max_length=128)), + ('current_roles', models.CharField(max_length=128, null=True)), + ('prefix', models.CharField(max_length=128)), + ('current_prefix', models.CharField(max_length=128, null=True)), + ], + options={ + 'ordering': ('state', 'name'), + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='pathentry', + name='acls', + field=models.ManyToManyField(to='Reporting.FileAcl'), + preserve_default=True, + ), + migrations.AddField( + model_name='pathentry', + name='current_perms', + field=models.ForeignKey(related_name='+', to='Reporting.FilePerms'), + preserve_default=True, + ), + migrations.AddField( + model_name='pathentry', + name='target_perms', + field=models.ForeignKey(related_name='+', to='Reporting.FilePerms'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='packages', + field=models.ManyToManyField(to='Reporting.PackageEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='paths', + field=models.ManyToManyField(to='Reporting.PathEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='posixgroups', + field=models.ManyToManyField(to='Reporting.POSIXGroupEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='posixusers', + field=models.ManyToManyField(to='Reporting.POSIXUserEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='profile', + field=models.ForeignKey(related_name='+', to='Reporting.Group', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='sebooleans', + field=models.ManyToManyField(to='Reporting.SEBooleanEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='sefcontexts', + field=models.ManyToManyField(to='Reporting.SEFcontextEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='seinterfaces', + field=models.ManyToManyField(to='Reporting.SEInterfaceEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='selogins', + field=models.ManyToManyField(to='Reporting.SELoginEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='semodules', + field=models.ManyToManyField(to='Reporting.SEModuleEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='senodes', + field=models.ManyToManyField(to='Reporting.SENodeEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='sepermissives', + field=models.ManyToManyField(to='Reporting.SEPermissiveEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='seports', + field=models.ManyToManyField(to='Reporting.SEPortEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='services', + field=models.ManyToManyField(to='Reporting.ServiceEntry'), + preserve_default=True, + ), + migrations.AddField( + model_name='interaction', + name='seusers', + field=models.ManyToManyField(to='Reporting.SEUserEntry'), + preserve_default=True, + ), + migrations.AlterUniqueTogether( + name='interaction', + unique_together=set([('client', 'timestamp')]), + ), + migrations.AlterUniqueTogether( + name='fileperms', + unique_together=set([('owner', 'group', 'mode')]), + ), + migrations.AddField( + model_name='client', + name='current_interaction', + field=models.ForeignKey(related_name='parent_client', blank=True, to='Reporting.Interaction', null=True), + preserve_default=True, + ), + ] diff --git a/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py b/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py new file mode 100644 index 000000000..609290edb --- /dev/null +++ b/src/lib/Bcfg2/Reporting/south_migrations/0001_initial.py @@ -0,0 +1,465 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Client' + db.create_table('Reporting_client', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('creation', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('current_interaction', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='parent_client', null=True, to=orm['Reporting.Interaction'])), + ('expiration', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), + )) + db.send_create_signal('Reporting', ['Client']) + + # Adding model 'Interaction' + db.create_table('Reporting_interaction', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='interactions', to=orm['Reporting.Client'])), + ('timestamp', self.gf('django.db.models.fields.DateTimeField')(db_index=True)), + ('state', self.gf('django.db.models.fields.CharField')(max_length=32)), + ('repo_rev_code', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('server', self.gf('django.db.models.fields.CharField')(max_length=256)), + ('good_count', self.gf('django.db.models.fields.IntegerField')()), + ('total_count', self.gf('django.db.models.fields.IntegerField')()), + ('bad_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('modified_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('extra_count', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('profile', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.Group'])), + )) + db.send_create_signal('Reporting', ['Interaction']) + + # Adding unique constraint on 'Interaction', fields ['client', 'timestamp'] + db.create_unique('Reporting_interaction', ['client_id', 'timestamp']) + + # Adding M2M table for field actions on 'Interaction' + db.create_table('Reporting_interaction_actions', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('actionentry', models.ForeignKey(orm['Reporting.actionentry'], null=False)) + )) + db.create_unique('Reporting_interaction_actions', ['interaction_id', 'actionentry_id']) + + # Adding M2M table for field packages on 'Interaction' + db.create_table('Reporting_interaction_packages', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('packageentry', models.ForeignKey(orm['Reporting.packageentry'], null=False)) + )) + db.create_unique('Reporting_interaction_packages', ['interaction_id', 'packageentry_id']) + + # Adding M2M table for field paths on 'Interaction' + db.create_table('Reporting_interaction_paths', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)) + )) + db.create_unique('Reporting_interaction_paths', ['interaction_id', 'pathentry_id']) + + # Adding M2M table for field services on 'Interaction' + db.create_table('Reporting_interaction_services', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('serviceentry', models.ForeignKey(orm['Reporting.serviceentry'], null=False)) + )) + db.create_unique('Reporting_interaction_services', ['interaction_id', 'serviceentry_id']) + + # Adding M2M table for field failures on 'Interaction' + db.create_table('Reporting_interaction_failures', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('failureentry', models.ForeignKey(orm['Reporting.failureentry'], null=False)) + )) + db.create_unique('Reporting_interaction_failures', ['interaction_id', 'failureentry_id']) + + # Adding M2M table for field groups on 'Interaction' + db.create_table('Reporting_interaction_groups', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('group', models.ForeignKey(orm['Reporting.group'], null=False)) + )) + db.create_unique('Reporting_interaction_groups', ['interaction_id', 'group_id']) + + # Adding M2M table for field bundles on 'Interaction' + db.create_table('Reporting_interaction_bundles', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('interaction', models.ForeignKey(orm['Reporting.interaction'], null=False)), + ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False)) + )) + db.create_unique('Reporting_interaction_bundles', ['interaction_id', 'bundle_id']) + + # Adding model 'Performance' + db.create_table('Reporting_performance', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('interaction', self.gf('django.db.models.fields.related.ForeignKey')(related_name='performance_items', to=orm['Reporting.Interaction'])), + ('metric', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('value', self.gf('django.db.models.fields.DecimalField')(max_digits=32, decimal_places=16)), + )) + db.send_create_signal('Reporting', ['Performance']) + + # Adding model 'Group' + db.create_table('Reporting_group', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('profile', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('public', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('category', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('comment', self.gf('django.db.models.fields.TextField')(blank=True)), + )) + db.send_create_signal('Reporting', ['Group']) + + # Adding M2M table for field groups on 'Group' + db.create_table('Reporting_group_groups', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('from_group', models.ForeignKey(orm['Reporting.group'], null=False)), + ('to_group', models.ForeignKey(orm['Reporting.group'], null=False)) + )) + db.create_unique('Reporting_group_groups', ['from_group_id', 'to_group_id']) + + # Adding M2M table for field bundles on 'Group' + db.create_table('Reporting_group_bundles', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('group', models.ForeignKey(orm['Reporting.group'], null=False)), + ('bundle', models.ForeignKey(orm['Reporting.bundle'], null=False)) + )) + db.create_unique('Reporting_group_bundles', ['group_id', 'bundle_id']) + + # Adding model 'Bundle' + db.create_table('Reporting_bundle', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + )) + db.send_create_signal('Reporting', ['Bundle']) + + # Adding model 'FilePerms' + db.create_table('Reporting_fileperms', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('owner', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('group', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('perms', self.gf('django.db.models.fields.CharField')(max_length=128)), + )) + db.send_create_signal('Reporting', ['FilePerms']) + + # Adding unique constraint on 'FilePerms', fields ['owner', 'group', 'perms'] + db.create_unique('Reporting_fileperms', ['owner', 'group', 'perms']) + + # Adding model 'FileAcl' + db.create_table('Reporting_fileacl', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + )) + db.send_create_signal('Reporting', ['FileAcl']) + + # Adding model 'FailureEntry' + db.create_table('Reporting_failureentry', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), + ('entry_type', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('message', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal('Reporting', ['FailureEntry']) + + # Adding model 'ActionEntry' + db.create_table('Reporting_actionentry', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), + ('state', self.gf('django.db.models.fields.IntegerField')()), + ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('status', self.gf('django.db.models.fields.CharField')(default='check', max_length=128)), + ('output', self.gf('django.db.models.fields.IntegerField')(default=0)), + )) + db.send_create_signal('Reporting', ['ActionEntry']) + + # Adding model 'PackageEntry' + db.create_table('Reporting_packageentry', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), + ('state', self.gf('django.db.models.fields.IntegerField')()), + ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('target_version', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), + ('current_version', self.gf('django.db.models.fields.CharField')(max_length=1024)), + ('verification_details', self.gf('django.db.models.fields.TextField')(default='')), + )) + db.send_create_signal('Reporting', ['PackageEntry']) + + # Adding model 'PathEntry' + db.create_table('Reporting_pathentry', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), + ('state', self.gf('django.db.models.fields.IntegerField')()), + ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('path_type', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('target_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])), + ('current_perms', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['Reporting.FilePerms'])), + ('detail_type', self.gf('django.db.models.fields.IntegerField')(default=0)), + ('details', self.gf('django.db.models.fields.TextField')(default='')), + )) + db.send_create_signal('Reporting', ['PathEntry']) + + # Adding M2M table for field acls on 'PathEntry' + db.create_table('Reporting_pathentry_acls', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('pathentry', models.ForeignKey(orm['Reporting.pathentry'], null=False)), + ('fileacl', models.ForeignKey(orm['Reporting.fileacl'], null=False)) + )) + db.create_unique('Reporting_pathentry_acls', ['pathentry_id', 'fileacl_id']) + + # Adding model 'LinkEntry' + db.create_table('Reporting_linkentry', ( + ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)), + ('target_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('current_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + )) + db.send_create_signal('Reporting', ['LinkEntry']) + + # Adding model 'DeviceEntry' + db.create_table('Reporting_deviceentry', ( + ('pathentry_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['Reporting.PathEntry'], unique=True, primary_key=True)), + ('device_type', self.gf('django.db.models.fields.CharField')(max_length=16)), + ('target_major', self.gf('django.db.models.fields.IntegerField')()), + ('target_minor', self.gf('django.db.models.fields.IntegerField')()), + ('current_major', self.gf('django.db.models.fields.IntegerField')()), + ('current_minor', self.gf('django.db.models.fields.IntegerField')()), + )) + db.send_create_signal('Reporting', ['DeviceEntry']) + + # Adding model 'ServiceEntry' + db.create_table('Reporting_serviceentry', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('hash_key', self.gf('django.db.models.fields.IntegerField')(db_index=True)), + ('state', self.gf('django.db.models.fields.IntegerField')()), + ('exists', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('target_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)), + ('current_status', self.gf('django.db.models.fields.CharField')(default='', max_length=128)), + )) + db.send_create_signal('Reporting', ['ServiceEntry']) + + + def backwards(self, orm): + # Removing unique constraint on 'FilePerms', fields ['owner', 'group', 'perms'] + db.delete_unique('Reporting_fileperms', ['owner', 'group', 'perms']) + + # Removing unique constraint on 'Interaction', fields ['client', 'timestamp'] + db.delete_unique('Reporting_interaction', ['client_id', 'timestamp']) + + # Deleting model 'Client' + db.delete_table('Reporting_client') + + # Deleting model 'Interaction' + db.delete_table('Reporting_interaction') + + # Removing M2M table for field actions on 'Interaction' + db.delete_table('Reporting_interaction_actions') + + # Removing M2M table for field packages on 'Interaction' + db.delete_table('Reporting_interaction_packages') + + # Removing M2M table for field paths on 'Interaction' + db.delete_table('Reporting_interaction_paths') + + # Removing M2M table for field services on 'Interaction' + db.delete_table('Reporting_interaction_services') + + # Removing M2M table for field failures on 'Interaction' + db.delete_table('Reporting_interaction_failures') + + # Removing M2M table for field groups on 'Interaction' + db.delete_table('Reporting_interaction_groups') + + # Removing M2M table for field bundles on 'Interaction' + db.delete_table('Reporting_interaction_bundles') + + # Deleting model 'Performance' + db.delete_table('Reporting_performance') + + # Deleting model 'Group' + db.delete_table('Reporting_group') + + # Removing M2M table for field groups on 'Group' + db.delete_table('Reporting_group_groups') + + # Removing M2M table for field bundles on 'Group' + db.delete_table('Reporting_group_bundles') + + # Deleting model 'Bundle' + db.delete_table('Reporting_bundle') + + # Deleting model 'FilePerms' + db.delete_table('Reporting_fileperms') + + # Deleting model 'FileAcl' + db.delete_table('Reporting_fileacl') + + # Deleting model 'FailureEntry' + db.delete_table('Reporting_failureentry') + + # Deleting model 'ActionEntry' + db.delete_table('Reporting_actionentry') + + # Deleting model 'PackageEntry' + db.delete_table('Reporting_packageentry') + + # Deleting model 'PathEntry' + db.delete_table('Reporting_pathentry') + + # Removing M2M table for field acls on 'PathEntry' + db.delete_table('Reporting_pathentry_acls') + + # Deleting model 'LinkEntry' + db.delete_table('Reporting_linkentry') + + # Deleting model 'DeviceEntry' + db.delete_table('Reporting_deviceentry') + + # Deleting model 'ServiceEntry' + db.delete_table('Reporting_serviceentry') + + + models = { + 'Reporting.actionentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ActionEntry'}, + 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'output': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'state': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'check'", 'max_length': '128'}) + }, + 'Reporting.bundle': { + 'Meta': {'ordering': "('name',)", 'object_name': 'Bundle'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'Reporting.client': { + 'Meta': {'object_name': 'Client'}, + 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'current_interaction': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'parent_client'", 'null': 'True', 'to': "orm['Reporting.Interaction']"}), + 'expiration': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'Reporting.deviceentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'DeviceEntry', '_ormbases': ['Reporting.PathEntry']}, + 'current_major': ('django.db.models.fields.IntegerField', [], {}), + 'current_minor': ('django.db.models.fields.IntegerField', [], {}), + 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}), + 'target_major': ('django.db.models.fields.IntegerField', [], {}), + 'target_minor': ('django.db.models.fields.IntegerField', [], {}) + }, + 'Reporting.failureentry': { + 'Meta': {'object_name': 'FailureEntry'}, + 'entry_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'message': ('django.db.models.fields.TextField', [], {}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) + }, + 'Reporting.fileacl': { + 'Meta': {'object_name': 'FileAcl'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}) + }, + 'Reporting.fileperms': { + 'Meta': {'unique_together': "(('owner', 'group', 'perms'),)", 'object_name': 'FilePerms'}, + 'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'Reporting.group': { + 'Meta': {'ordering': "('name',)", 'object_name': 'Group'}, + 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}), + 'category': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'profile': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'Reporting.interaction': { + 'Meta': {'ordering': "['-timestamp']", 'unique_together': "(('client', 'timestamp'),)", 'object_name': 'Interaction'}, + 'actions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ActionEntry']", 'symmetrical': 'False'}), + 'bad_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'bundles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Bundle']", 'symmetrical': 'False'}), + 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'interactions'", 'to': "orm['Reporting.Client']"}), + 'extra_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'failures': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FailureEntry']", 'symmetrical': 'False'}), + 'good_count': ('django.db.models.fields.IntegerField', [], {}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.Group']", 'symmetrical': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PackageEntry']", 'symmetrical': 'False'}), + 'paths': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.PathEntry']", 'symmetrical': 'False'}), + 'profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.Group']"}), + 'repo_rev_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'server': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'services': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.ServiceEntry']", 'symmetrical': 'False'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'total_count': ('django.db.models.fields.IntegerField', [], {}) + }, + 'Reporting.linkentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'LinkEntry', '_ormbases': ['Reporting.PathEntry']}, + 'current_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'pathentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['Reporting.PathEntry']", 'unique': 'True', 'primary_key': 'True'}), + 'target_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}) + }, + 'Reporting.packageentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PackageEntry'}, + 'current_version': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'state': ('django.db.models.fields.IntegerField', [], {}), + 'target_version': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'verification_details': ('django.db.models.fields.TextField', [], {'default': "''"}) + }, + 'Reporting.pathentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'PathEntry'}, + 'acls': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['Reporting.FileAcl']", 'symmetrical': 'False'}), + 'current_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}), + 'detail_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'details': ('django.db.models.fields.TextField', [], {'default': "''"}), + 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'path_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'state': ('django.db.models.fields.IntegerField', [], {}), + 'target_perms': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['Reporting.FilePerms']"}) + }, + 'Reporting.performance': { + 'Meta': {'object_name': 'Performance'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'interaction': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'performance_items'", 'to': "orm['Reporting.Interaction']"}), + 'metric': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'value': ('django.db.models.fields.DecimalField', [], {'max_digits': '32', 'decimal_places': '16'}) + }, + 'Reporting.serviceentry': { + 'Meta': {'ordering': "('state', 'name')", 'object_name': 'ServiceEntry'}, + 'current_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}), + 'exists': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'hash_key': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'state': ('django.db.models.fields.IntegerField', [], {}), + 'target_status': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128'}) + } + } + + complete_apps = ['Reporting']
\ No newline at end of file diff --git a/src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py b/src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py index 37cdd146c..37cdd146c 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0002_convert_perms_to_mode.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0002_convert_perms_to_mode.py diff --git a/src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py b/src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py index 2da1fa722..2da1fa722 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0003_expand_hash_key.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0003_expand_hash_key.py diff --git a/src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py b/src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py index 26a053b67..26a053b67 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0004_profile_can_be_null.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0004_profile_can_be_null.py diff --git a/src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py b/src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py index d5f5d801a..d5f5d801a 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0005_add_selinux_entry_support.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0005_add_selinux_entry_support.py diff --git a/src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py b/src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py index d86e663d5..d86e663d5 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0006_add_user_group_entry_support.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0006_add_user_group_entry_support.py diff --git a/src/lib/Bcfg2/Reporting/migrations/0007_add_flag_fields_interaction.py b/src/lib/Bcfg2/Reporting/south_migrations/0007_add_flag_fields_interaction.py index 491ecb845..491ecb845 100644 --- a/src/lib/Bcfg2/Reporting/migrations/0007_add_flag_fields_interaction.py +++ b/src/lib/Bcfg2/Reporting/south_migrations/0007_add_flag_fields_interaction.py diff --git a/src/lib/Bcfg2/Reporting/south_migrations/__init__.py b/src/lib/Bcfg2/Reporting/south_migrations/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/lib/Bcfg2/Reporting/south_migrations/__init__.py diff --git a/src/lib/Bcfg2/Server/Admin.py b/src/lib/Bcfg2/Server/Admin.py index c294e6be5..0eba843c7 100644 --- a/src/lib/Bcfg2/Server/Admin.py +++ b/src/lib/Bcfg2/Server/Admin.py @@ -25,15 +25,19 @@ import Bcfg2.Server.Plugins.Metadata try: from django.core.exceptions import ImproperlyConfigured from django.core import management + import django import django.conf import Bcfg2.Server.models HAS_DJANGO = True - try: - import south # pylint: disable=W0611 + if django.VERSION[0] == 1 and django.VERSION[1] >= 7: HAS_REPORTS = True - except ImportError: - HAS_REPORTS = False + elif django.VERSION[0] == 1 and django.VERSION[1] <= 6: + try: + import south # pylint: disable=W0611 + HAS_REPORTS = True + except ImportError: + HAS_REPORTS = False except ImportError: HAS_DJANGO = False HAS_REPORTS = False @@ -1194,6 +1198,10 @@ class CLI(Bcfg2.Options.CommandRegistry): components=[self]) parser.add_options(self.subcommand_options) parser.parse() + if django.VERSION[0] == 1 and django.VERSION[1] >= 7: + # this has been introduced in django 1.7, so pylint fails with + # older django releases + django.setup() # pylint disable=E1101 def run(self): """ Run bcfg2-admin """ diff --git a/src/lib/Bcfg2/manage.py b/src/lib/Bcfg2/manage.py index 3e4eedc9f..f88233133 100755 --- a/src/lib/Bcfg2/manage.py +++ b/src/lib/Bcfg2/manage.py @@ -1,14 +1,23 @@ #!/usr/bin/env python -from django.core.management import execute_manager -import imp -try: - imp.find_module('settings') # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) - sys.exit(1) +import os +import sys +import django +import Bcfg2.Options +import Bcfg2.DBSettings -import settings +Bcfg2.Options.get_parser().parse() + +if django.VERSION[0] == 1 and django.VERSION[1] <= 6: + try: + imp.find_module('settings') # Assumed to be in the same directory. + except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) + sys.exit(1) if __name__ == "__main__": - execute_manager(settings) + if django.VERSION[0] == 1 and django.VERSION[1] >= 7: + from django.core.management import execute_from_command_line + execute_from_command_line(sys.argv) + else: + execute_manager(settings) |