diff --git a/README.md b/README.md index e7da41e..7d65694 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,23 @@ virtualenv env pip install -r requirements.txt export DJANGO_SETTINGS_MODULE=openduty.settings_dev python manage.py syncdb +python manage.py migrate python manage.py runserver ``` now, you can start hacking on it. +# After models you've changed your models please run: +``` +./manage.py schemamigration openduty --auto +./manage.py schemamigration notification --auto +./manage.py migrate + +``` + +#If you see a new file appearing in migrations directory when pulling from upstream please run +``` +./manage.py migrate +``` # Default login: root/toor diff --git a/notification/migrations/0001_initial.py b/notification/migrations/0001_initial.py new file mode 100644 index 0000000..f435603 --- /dev/null +++ b/notification/migrations/0001_initial.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as 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 'UserNotificationMethod' + db.create_table('openduty_usernotificationmethod', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='notification_methods', to=orm['auth.User'])), + ('position', self.gf('django.db.models.fields.IntegerField')()), + ('method', self.gf('django.db.models.fields.CharField')(max_length=50)), + )) + db.send_create_signal(u'notification', ['UserNotificationMethod']) + + # Adding model 'ScheduledNotification' + db.create_table('openduty_schedulednotification', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('notifier', self.gf('django.db.models.fields.CharField')(max_length=30)), + ('message', self.gf('django.db.models.fields.CharField')(max_length=500)), + ('user_to_notify', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('send_at', self.gf('django.db.models.fields.DateTimeField')()), + ('incident', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.Incident'])), + )) + db.send_create_signal(u'notification', ['ScheduledNotification']) + + + def backwards(self, orm): + # Deleting model 'UserNotificationMethod' + db.delete_table('openduty_usernotificationmethod') + + # Deleting model 'ScheduledNotification' + db.delete_table('openduty_schedulednotification') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'notification.schedulednotification': { + 'Meta': {'object_name': 'ScheduledNotification', 'db_table': "'openduty_schedulednotification'"}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'incident': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Incident']"}), + 'message': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'notifier': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'send_at': ('django.db.models.fields.DateTimeField', [], {}), + 'user_to_notify': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + u'notification.usernotificationmethod': { + 'Meta': {'object_name': 'UserNotificationMethod', 'db_table': "'openduty_usernotificationmethod'"}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'method': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'position': ('django.db.models.fields.IntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_methods'", 'to': u"orm['auth.User']"}) + }, + u'openduty.incident': { + 'Meta': {'unique_together': "(('service_key', 'incident_key'),)", 'object_name': 'Incident'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'details': ('django.db.models.fields.TextField', [], {}), + 'event_type': ('django.db.models.fields.CharField', [], {'max_length': '15'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'incident_key': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'occurred_at': ('django.db.models.fields.DateTimeField', [], {}), + 'service_key': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}) + }, + u'openduty.schedulepolicy': { + 'Meta': {'object_name': 'SchedulePolicy'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'repeat_times': ('django.db.models.fields.IntegerField', [], {}) + }, + u'openduty.service': { + 'Meta': {'object_name': 'Service'}, + 'escalate_after': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('uuidfield.fields.UUIDField', [], {'unique': 'True', 'max_length': '32', 'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'policy': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.SchedulePolicy']", 'null': 'True', 'blank': 'True'}), + 'retry': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['notification'] \ No newline at end of file diff --git a/notification/migrations/__init__.py b/notification/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openduty/migrations/0001_initial.py b/openduty/migrations/0001_initial.py new file mode 100644 index 0000000..00009f1 --- /dev/null +++ b/openduty/migrations/0001_initial.py @@ -0,0 +1,227 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as 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 'Token' + db.create_table(u'openduty_token', ( + ('key', self.gf('django.db.models.fields.CharField')(max_length=40, primary_key=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + )) + db.send_create_signal(u'openduty', ['Token']) + + # Adding model 'SchedulePolicy' + db.create_table(u'openduty_schedulepolicy', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=80)), + ('repeat_times', self.gf('django.db.models.fields.IntegerField')()), + )) + db.send_create_signal(u'openduty', ['SchedulePolicy']) + + # Adding model 'Service' + db.create_table(u'openduty_service', ( + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=80)), + ('id', self.gf('uuidfield.fields.UUIDField')(unique=True, max_length=32, primary_key=True)), + ('retry', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('policy', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.SchedulePolicy'], null=True, blank=True)), + ('escalate_after', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + )) + db.send_create_signal(u'openduty', ['Service']) + + # Adding model 'EventLog' + db.create_table(u'openduty_eventlog', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('service_key', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.Service'])), + ('data', self.gf('django.db.models.fields.TextField')()), + ('occurred_at', self.gf('django.db.models.fields.DateTimeField')()), + )) + db.send_create_signal(u'openduty', ['EventLog']) + + # Adding model 'Incident' + db.create_table(u'openduty_incident', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('service_key', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.Service'])), + ('incident_key', self.gf('django.db.models.fields.CharField')(max_length=80)), + ('event_type', self.gf('django.db.models.fields.CharField')(max_length=15)), + ('description', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('details', self.gf('django.db.models.fields.TextField')()), + ('occurred_at', self.gf('django.db.models.fields.DateTimeField')()), + )) + db.send_create_signal(u'openduty', ['Incident']) + + # Adding unique constraint on 'Incident', fields ['service_key', 'incident_key'] + db.create_unique(u'openduty_incident', ['service_key_id', 'incident_key']) + + # Adding model 'ServiceTokens' + db.create_table(u'openduty_servicetokens', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=80)), + ('service_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.Service'])), + ('token_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['openduty.Token'])), + )) + db.send_create_signal(u'openduty', ['ServiceTokens']) + + # Adding model 'SchedulePolicyRule' + db.create_table(u'openduty_schedulepolicyrule', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('schedule_policy', self.gf('django.db.models.fields.related.ForeignKey')(related_name='rules', to=orm['openduty.SchedulePolicy'])), + ('position', self.gf('django.db.models.fields.IntegerField')()), + ('user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)), + ('schedule', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['schedule.Calendar'], null=True, blank=True)), + ('escalate_after', self.gf('django.db.models.fields.IntegerField')()), + )) + db.send_create_signal(u'openduty', ['SchedulePolicyRule']) + + # Adding model 'UserProfile' + db.create_table(u'openduty_userprofile', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.OneToOneField')(related_name='profile', unique=True, to=orm['auth.User'])), + ('phone_number', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('pushover_user_key', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('pushover_app_key', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('slack_room_name', self.gf('django.db.models.fields.CharField')(max_length=50)), + )) + db.send_create_signal(u'openduty', ['UserProfile']) + + + def backwards(self, orm): + # Removing unique constraint on 'Incident', fields ['service_key', 'incident_key'] + db.delete_unique(u'openduty_incident', ['service_key_id', 'incident_key']) + + # Deleting model 'Token' + db.delete_table(u'openduty_token') + + # Deleting model 'SchedulePolicy' + db.delete_table(u'openduty_schedulepolicy') + + # Deleting model 'Service' + db.delete_table(u'openduty_service') + + # Deleting model 'EventLog' + db.delete_table(u'openduty_eventlog') + + # Deleting model 'Incident' + db.delete_table(u'openduty_incident') + + # Deleting model 'ServiceTokens' + db.delete_table(u'openduty_servicetokens') + + # Deleting model 'SchedulePolicyRule' + db.delete_table(u'openduty_schedulepolicyrule') + + # Deleting model 'UserProfile' + db.delete_table(u'openduty_userprofile') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'openduty.eventlog': { + 'Meta': {'object_name': 'EventLog'}, + 'data': ('django.db.models.fields.TextField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'occurred_at': ('django.db.models.fields.DateTimeField', [], {}), + 'service_key': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}) + }, + u'openduty.incident': { + 'Meta': {'unique_together': "(('service_key', 'incident_key'),)", 'object_name': 'Incident'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'details': ('django.db.models.fields.TextField', [], {}), + 'event_type': ('django.db.models.fields.CharField', [], {'max_length': '15'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'incident_key': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'occurred_at': ('django.db.models.fields.DateTimeField', [], {}), + 'service_key': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}) + }, + u'openduty.schedulepolicy': { + 'Meta': {'object_name': 'SchedulePolicy'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'repeat_times': ('django.db.models.fields.IntegerField', [], {}) + }, + u'openduty.schedulepolicyrule': { + 'Meta': {'object_name': 'SchedulePolicyRule'}, + 'escalate_after': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'position': ('django.db.models.fields.IntegerField', [], {}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Calendar']", 'null': 'True', 'blank': 'True'}), + 'schedule_policy': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rules'", 'to': u"orm['openduty.SchedulePolicy']"}), + 'user_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}) + }, + u'openduty.service': { + 'Meta': {'object_name': 'Service'}, + 'escalate_after': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('uuidfield.fields.UUIDField', [], {'unique': 'True', 'max_length': '32', 'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'policy': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.SchedulePolicy']", 'null': 'True', 'blank': 'True'}), + 'retry': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + u'openduty.servicetokens': { + 'Meta': {'object_name': 'ServiceTokens'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'service_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}), + 'token_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Token']"}) + }, + u'openduty.token': { + 'Meta': {'object_name': 'Token'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}) + }, + u'openduty.userprofile': { + 'Meta': {'object_name': 'UserProfile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'phone_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'pushover_app_key': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'pushover_user_key': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slack_room_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + 'schedule.calendar': { + 'Meta': {'object_name': 'Calendar'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200'}) + } + } + + complete_apps = ['openduty'] \ No newline at end of file diff --git a/openduty/migrations/0002_load_default_data.py b/openduty/migrations/0002_load_default_data.py new file mode 100644 index 0000000..71ec4a0 --- /dev/null +++ b/openduty/migrations/0002_load_default_data.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import DataMigration +from django.contrib.auth import models as auth_models +from django.core.management import call_command + +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Don't use "from appname.models import ModelName". + # Use orm.ModelName to refer to models in this application, + # and orm['appname.ModelName'] for models in other applications. + #Creating root user + try: + auth_models.User.objects.get(username='root') + except auth_models.User.DoesNotExist: + print '*' * 80 + print 'Creating root user -- login: root, password: toor' + print '*' * 80 + assert auth_models.User.objects.create_superuser('root', 'admin@localhost', 'toor') + else: + print 'Test user already exists.' + + ##Loading user profile + #call_command("loaddata", "openduty_userprofile") + + def backwards(self, orm): + "Write your backwards methods here." + pass + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'openduty.eventlog': { + 'Meta': {'object_name': 'EventLog'}, + 'data': ('django.db.models.fields.TextField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'occurred_at': ('django.db.models.fields.DateTimeField', [], {}), + 'service_key': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}) + }, + u'openduty.incident': { + 'Meta': {'unique_together': "(('service_key', 'incident_key'),)", 'object_name': 'Incident'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'details': ('django.db.models.fields.TextField', [], {}), + 'event_type': ('django.db.models.fields.CharField', [], {'max_length': '15'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'incident_key': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'occurred_at': ('django.db.models.fields.DateTimeField', [], {}), + 'service_key': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}) + }, + u'openduty.schedulepolicy': { + 'Meta': {'object_name': 'SchedulePolicy'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'repeat_times': ('django.db.models.fields.IntegerField', [], {}) + }, + u'openduty.schedulepolicyrule': { + 'Meta': {'object_name': 'SchedulePolicyRule'}, + 'escalate_after': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'position': ('django.db.models.fields.IntegerField', [], {}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Calendar']", 'null': 'True', 'blank': 'True'}), + 'schedule_policy': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rules'", 'to': u"orm['openduty.SchedulePolicy']"}), + 'user_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}) + }, + u'openduty.service': { + 'Meta': {'object_name': 'Service'}, + 'escalate_after': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('uuidfield.fields.UUIDField', [], {'unique': 'True', 'max_length': '32', 'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'policy': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.SchedulePolicy']", 'null': 'True', 'blank': 'True'}), + 'retry': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + u'openduty.servicetokens': { + 'Meta': {'object_name': 'ServiceTokens'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'service_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Service']"}), + 'token_id': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['openduty.Token']"}) + }, + u'openduty.token': { + 'Meta': {'object_name': 'Token'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}) + }, + u'openduty.userprofile': { + 'Meta': {'object_name': 'UserProfile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'phone_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'pushover_app_key': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'pushover_user_key': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'slack_room_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + 'schedule.calendar': { + 'Meta': {'object_name': 'Calendar'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200'}) + } + } + + complete_apps = ['openduty'] + symmetrical = True diff --git a/openduty/migrations/__init__.py b/openduty/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openduty/models.py b/openduty/models.py index a106035..d36e174 100644 --- a/openduty/models.py +++ b/openduty/models.py @@ -8,7 +8,6 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import python_2_unicode_compatible from django.contrib.auth.models import User -from oauth2client.django_orm import CredentialsField from uuidfield import UUIDField from django.core.exceptions import ValidationError from schedule.models import Calendar @@ -170,18 +169,6 @@ class Meta: def __str__(self): return self.id -@python_2_unicode_compatible -class CalendarSource(models.Model): - name = models.CharField(max_length=80, unique=True) - oauth2_credentials = CredentialsField() - - class Meta: - verbose_name = _('calendar_source') - verbose_name_plural = _('calendar_sources') - - def __str__(self): - return self.name - class UserProfile(models.Model): user = models.OneToOneField('auth.User', related_name='profile') phone_number = models.CharField(max_length=50) @@ -200,20 +187,3 @@ def create_user_profile(sender, instance, created, **kwargs): create_superuser, sender=auth_models, dispatch_uid='django.contrib.auth.management.create_superuser') - - -# Create our own root user automatically. - -def create_testuser(app, created_models, verbosity, **kwargs): - try: - auth_models.User.objects.get(username='root') - except auth_models.User.DoesNotExist: - print '*' * 80 - print 'Creating root user -- login: root, password: toor' - print '*' * 80 - assert auth_models.User.objects.create_superuser('root', 'admin@localhost', 'toor') - else: - print 'Test user already exists.' - -signals.post_syncdb.connect(create_testuser, - sender=auth_models, dispatch_uid='common.models.create_testuser') diff --git a/openduty/settings.py b/openduty/settings.py index a80b738..63b5cc0 100644 --- a/openduty/settings.py +++ b/openduty/settings.py @@ -46,6 +46,7 @@ 'openduty.templatetags', 'schedule', 'djcelery', + 'south', 'notification', ) diff --git a/requirements.txt b/requirements.txt index 944ffe1..fa1b9c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ python-dateutil==2.2 pyasn1 pyasn1_modules dnspython -oauth2client sleekxmpp dj-database-url slacker +south