diff --git a/mayan/apps/acls/forms.py b/mayan/apps/acls/forms.py index 6182f8fc5f..8ad9437a98 100644 --- a/mayan/apps/acls/forms.py +++ b/mayan/apps/acls/forms.py @@ -51,8 +51,8 @@ class BaseHolderSelectionForm(forms.Form): class HolderSelectionForm(BaseHolderSelectionForm): - special_holders = [AnonymousUserSingleton.objects.get()] + special_holders = [AnonymousUserSingleton.objects.get_or_create()[0]] class ClassHolderSelectionForm(BaseHolderSelectionForm): - special_holders = [AnonymousUserSingleton.objects.get(), CreatorSingleton.objects.get()] + special_holders = [AnonymousUserSingleton.objects.get_or_create()[0], CreatorSingleton.objects.get_or_create()[0]] diff --git a/mayan/apps/acls/migrations/0001_initial.py b/mayan/apps/acls/migrations/0001_initial.py new file mode 100644 index 0000000000..1fe71fe958 --- /dev/null +++ b/mayan/apps/acls/migrations/0001_initial.py @@ -0,0 +1,89 @@ +# -*- 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 'AccessEntry' + db.create_table(u'acls_accessentry', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('permission', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['permissions.StoredPermission'])), + ('holder_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='access_holder', to=orm['contenttypes.ContentType'])), + ('holder_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='object_content_type', to=orm['contenttypes.ContentType'])), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + )) + db.send_create_signal(u'acls', ['AccessEntry']) + + # Adding model 'DefaultAccessEntry' + db.create_table(u'acls_defaultaccessentry', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('permission', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['permissions.StoredPermission'])), + ('holder_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='default_access_entry_holder', to=orm['contenttypes.ContentType'])), + ('holder_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='default_access_entry_class', to=orm['contenttypes.ContentType'])), + )) + db.send_create_signal(u'acls', ['DefaultAccessEntry']) + + # Adding model 'CreatorSingleton' + db.create_table(u'acls_creatorsingleton', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('lock_id', self.gf('django.db.models.fields.CharField')(default='1', unique=True, max_length=1)), + )) + db.send_create_signal(u'acls', ['CreatorSingleton']) + + + def backwards(self, orm): + # Deleting model 'AccessEntry' + db.delete_table(u'acls_accessentry') + + # Deleting model 'DefaultAccessEntry' + db.delete_table(u'acls_defaultaccessentry') + + # Deleting model 'CreatorSingleton' + db.delete_table(u'acls_creatorsingleton') + + + models = { + u'acls.accessentry': { + 'Meta': {'object_name': 'AccessEntry'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'object_content_type'", 'to': u"orm['contenttypes.ContentType']"}), + 'holder_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'holder_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'access_holder'", 'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['permissions.StoredPermission']"}) + }, + u'acls.creatorsingleton': { + 'Meta': {'object_name': 'CreatorSingleton'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'lock_id': ('django.db.models.fields.CharField', [], {'default': "'1'", 'unique': 'True', 'max_length': '1'}) + }, + u'acls.defaultaccessentry': { + 'Meta': {'object_name': 'DefaultAccessEntry'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_access_entry_class'", 'to': u"orm['contenttypes.ContentType']"}), + 'holder_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'holder_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_access_entry_holder'", 'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['permissions.StoredPermission']"}) + }, + 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'permissions.storedpermission': { + 'Meta': {'ordering': "('namespace',)", 'unique_together': "(('namespace', 'name'),)", 'object_name': 'StoredPermission'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'namespace': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + } + } + + complete_apps = ['acls'] \ No newline at end of file diff --git a/mayan/apps/acls/migrations/0002_auto__del_field_creatorsingleton_lock_id.py b/mayan/apps/acls/migrations/0002_auto__del_field_creatorsingleton_lock_id.py new file mode 100644 index 0000000000..d3cb7388b8 --- /dev/null +++ b/mayan/apps/acls/migrations/0002_auto__del_field_creatorsingleton_lock_id.py @@ -0,0 +1,59 @@ +# -*- 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): + # Deleting field 'CreatorSingleton.lock_id' + db.delete_column(u'acls_creatorsingleton', 'lock_id') + + + def backwards(self, orm): + # Adding field 'CreatorSingleton.lock_id' + db.add_column(u'acls_creatorsingleton', 'lock_id', + self.gf('django.db.models.fields.CharField')(default='1', max_length=1, unique=True), + keep_default=False) + + + models = { + u'acls.accessentry': { + 'Meta': {'object_name': 'AccessEntry'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'object_content_type'", 'to': u"orm['contenttypes.ContentType']"}), + 'holder_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'holder_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'access_holder'", 'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['permissions.StoredPermission']"}) + }, + u'acls.creatorsingleton': { + 'Meta': {'object_name': 'CreatorSingleton'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'acls.defaultaccessentry': { + 'Meta': {'object_name': 'DefaultAccessEntry'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_access_entry_class'", 'to': u"orm['contenttypes.ContentType']"}), + 'holder_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'holder_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'default_access_entry_holder'", 'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['permissions.StoredPermission']"}) + }, + 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'permissions.storedpermission': { + 'Meta': {'ordering': "('namespace',)", 'unique_together': "(('namespace', 'name'),)", 'object_name': 'StoredPermission'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'namespace': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + } + } + + complete_apps = ['acls'] \ No newline at end of file diff --git a/mayan/apps/acls/migrations/__init__.py b/mayan/apps/acls/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/acls/models.py b/mayan/apps/acls/models.py index 6637c12a24..f800256753 100644 --- a/mayan/apps/acls/models.py +++ b/mayan/apps/acls/models.py @@ -8,8 +8,9 @@ from django.utils.translation import ugettext from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic +from solo.models import SingletonModel + from permissions.models import StoredPermission -from common.models import Singleton, SingletonManager from .managers import AccessEntryManager, DefaultAccessEntryManager from .classes import AccessObjectClass @@ -92,7 +93,7 @@ class DefaultAccessEntry(models.Model): return u'%s: %s' % (self.content_type, self.content_object) -class CreatorSingletonManager(SingletonManager): +class CreatorSingletonManager(models.Manager): def passthru_check(self, holder, creator=None): if isinstance(holder, self.model): # TODO: raise explicit error if is instance and creator=None @@ -101,7 +102,7 @@ class CreatorSingletonManager(SingletonManager): return holder -class CreatorSingleton(Singleton): +class CreatorSingleton(SingletonModel): objects = CreatorSingletonManager() def __unicode__(self): diff --git a/mayan/apps/common/__init__.py b/mayan/apps/common/__init__.py index 151f543606..fe3bb4f48b 100644 --- a/mayan/apps/common/__init__.py +++ b/mayan/apps/common/__init__.py @@ -17,7 +17,7 @@ from navigation.api import register_links, register_top_menu from .conf import settings as common_settings from .conf.settings import (AUTO_CREATE_ADMIN, AUTO_ADMIN_USERNAME, AUTO_ADMIN_PASSWORD, TEMPORARY_DIRECTORY) -from .models import AutoAdminSingleton +from .models import AnonymousUserSingleton, AutoAdminSingleton from .utils import validate_path @@ -61,7 +61,7 @@ def create_superuser(sender, **kwargs): assert auth_models.User.objects.create_superuser(AUTO_ADMIN_USERNAME, 'autoadmin@autoadmin.com', AUTO_ADMIN_PASSWORD) admin = auth_models.User.objects.get(username=AUTO_ADMIN_USERNAME) # Store the auto admin password properties to display the first login message - auto_admin_properties = AutoAdminSingleton.objects.get() + auto_admin_properties, created = AutoAdminSingleton.objects.get_or_create() auto_admin_properties.account = admin auto_admin_properties.password = AUTO_ADMIN_PASSWORD auto_admin_properties.password_hash = admin.password @@ -74,7 +74,7 @@ def create_superuser(sender, **kwargs): def auto_admin_account_passwd_change(sender, instance, **kwargs): try: with transaction.atomic(): - auto_admin_properties = AutoAdminSingleton.objects.get() + auto_admin_properties, created = AutoAdminSingleton.objects.get_or_create() if instance == auto_admin_properties.account and instance.password != auto_admin_properties.password_hash: # Only delete the auto admin properties when the password has been changed auto_admin_properties.delete(force=True) diff --git a/mayan/apps/common/migrations/0005_auto__del_field_autoadminsingleton_lock_id__del_field_anonymoususersin.py b/mayan/apps/common/migrations/0005_auto__del_field_autoadminsingleton_lock_id__del_field_anonymoususersin.py new file mode 100644 index 0000000000..ebece86c75 --- /dev/null +++ b/mayan/apps/common/migrations/0005_auto__del_field_autoadminsingleton_lock_id__del_field_anonymoususersin.py @@ -0,0 +1,80 @@ +# -*- 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): + # Deleting field 'AutoAdminSingleton.lock_id' + db.delete_column(u'common_autoadminsingleton', 'lock_id') + + # Deleting field 'AnonymousUserSingleton.lock_id' + db.delete_column(u'common_anonymoususersingleton', 'lock_id') + + + def backwards(self, orm): + # Adding field 'AutoAdminSingleton.lock_id' + db.add_column(u'common_autoadminsingleton', 'lock_id', + self.gf('django.db.models.fields.CharField')(default=1, max_length=1, unique=True), + keep_default=False) + + # Adding field 'AnonymousUserSingleton.lock_id' + db.add_column(u'common_anonymoususersingleton', 'lock_id', + self.gf('django.db.models.fields.CharField')(default=1, max_length=1, unique=True), + keep_default=False) + + + 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'common.anonymoususersingleton': { + 'Meta': {'object_name': 'AnonymousUserSingleton'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'common.autoadminsingleton': { + 'Meta': {'object_name': 'AutoAdminSingleton'}, + 'account': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'auto_admin_account'", 'null': 'True', 'to': u"orm['auth.User']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), + 'password_hash': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}) + }, + 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'}) + } + } + + complete_apps = ['common'] \ No newline at end of file diff --git a/mayan/apps/common/models.py b/mayan/apps/common/models.py index d0b0f8414d..8f0c0cf5cd 100644 --- a/mayan/apps/common/models.py +++ b/mayan/apps/common/models.py @@ -4,43 +4,10 @@ from django.utils.translation import ugettext from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import User -SINGLETON_LOCK_ID = 1 +from solo.models import SingletonModel -class SingletonManager(models.Manager): - def get(self, **kwargs): - instance, created = self.model.objects.get_or_create(lock_id=SINGLETON_LOCK_ID, **kwargs) - return instance - - -class Singleton(models.Model): - lock_id = models.CharField(max_length=1, default=SINGLETON_LOCK_ID, editable=False, verbose_name=_(u'lock field'), unique=True) - - objects = SingletonManager() - - def save(self, *args, **kwargs): - self.id = 1 - super(Singleton, self).save(*args, **kwargs) - - def delete(self, force=False, *args, **kwargs): - if force: - return super(Singleton, self).delete(*args, **kwargs) - - class Meta: - abstract = True - - -class AnonymousUserSingletonManager(SingletonManager): - def passthru_check(self, user): - if isinstance(user, AnonymousUser): - return self.model.objects.get() - else: - return user - - -class AnonymousUserSingleton(Singleton): - objects = AnonymousUserSingletonManager() - +class AnonymousUserSingleton(SingletonModel): def __unicode__(self): return ugettext('Anonymous user') @@ -49,7 +16,7 @@ class AnonymousUserSingleton(Singleton): verbose_name_plural = _(u'anonymous user') -class AutoAdminSingleton(Singleton): +class AutoAdminSingleton(SingletonModel): account = models.ForeignKey(User, null=True, blank=True, related_name='auto_admin_account', verbose_name=_(u'account')) password = models.CharField(null=True, blank=True, verbose_name=_(u'password'), max_length=128) password_hash = models.CharField(null=True, blank=True, verbose_name=_(u'password hash'), max_length=128) diff --git a/mayan/apps/installation/__init__.py b/mayan/apps/installation/__init__.py index 3f839198b3..a17cfd7fbb 100644 --- a/mayan/apps/installation/__init__.py +++ b/mayan/apps/installation/__init__.py @@ -19,7 +19,7 @@ from .models import Installation @receiver(post_migrate, dispatch_uid='trigger_first_time') def trigger_first_time(sender, **kwargs): if kwargs['app'] == 'installation': - details = Installation.objects.get() + details, created = Installation.objects.get_or_create() details.is_first_run = True details.save() @@ -27,7 +27,7 @@ def trigger_first_time(sender, **kwargs): def check_first_run(): try: with transaction.atomic(): - details = Installation.objects.get() + details, created = Installation.objects.get_or_create() except DatabaseError: # Avoid database errors when the app tables haven't been created yet pass diff --git a/mayan/apps/installation/migrations/0002_auto__del_field_installation_lock_id.py b/mayan/apps/installation/migrations/0002_auto__del_field_installation_lock_id.py new file mode 100644 index 0000000000..64a4064fb6 --- /dev/null +++ b/mayan/apps/installation/migrations/0002_auto__del_field_installation_lock_id.py @@ -0,0 +1,31 @@ +# -*- 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): + # Deleting field 'Installation.lock_id' + db.delete_column(u'installation_installation', 'lock_id') + + + def backwards(self, orm): + # Adding field 'Installation.lock_id' + db.add_column(u'installation_installation', 'lock_id', + self.gf('django.db.models.fields.CharField')(default=1, max_length=1, unique=True), + keep_default=False) + + + models = { + u'installation.installation': { + 'Meta': {'object_name': 'Installation'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_first_run': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'745d2184-d011-4a19-a3d9-df3bab80f82c'", 'max_length': '48', 'blank': 'True'}) + } + } + + complete_apps = ['installation'] \ No newline at end of file diff --git a/mayan/apps/installation/models.py b/mayan/apps/installation/models.py index 28ea76dcc5..23c8996ceb 100644 --- a/mayan/apps/installation/models.py +++ b/mayan/apps/installation/models.py @@ -24,7 +24,8 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.datastructures import SortedDict from django.conf import settings -from common.models import Singleton +from solo.models import SingletonModel + from common.utils import pretty_size from mayan import __version__ as mayan_version from lock_manager import Lock, LockError @@ -35,7 +36,7 @@ from .literals import (FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD, TIMEOUT, FABFILE_MARKER) -class Installation(Singleton): +class Installation(SingletonModel): _properties = SortedDict() is_first_run = models.BooleanField(default=False) diff --git a/mayan/apps/registration/__init__.py b/mayan/apps/registration/__init__.py index 536ac8ac40..90c37d6e6f 100644 --- a/mayan/apps/registration/__init__.py +++ b/mayan/apps/registration/__init__.py @@ -20,6 +20,6 @@ register_links(['form_view', 'about_view', 'license_view'], [form_view], menu_na try: with transaction.atomic(): - RegistrationSingleton.objects.get() + RegistrationSingleton.objects.get_or_create() except DatabaseError: pass diff --git a/mayan/apps/registration/migrations/0002_auto__del_field_registrationsingleton_lock_id.py b/mayan/apps/registration/migrations/0002_auto__del_field_registrationsingleton_lock_id.py new file mode 100644 index 0000000000..d1c795b26e --- /dev/null +++ b/mayan/apps/registration/migrations/0002_auto__del_field_registrationsingleton_lock_id.py @@ -0,0 +1,31 @@ +# -*- 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): + # Deleting field 'RegistrationSingleton.lock_id' + db.delete_column(u'registration_registrationsingleton', 'lock_id') + + + def backwards(self, orm): + # Adding field 'RegistrationSingleton.lock_id' + db.add_column(u'registration_registrationsingleton', 'lock_id', + self.gf('django.db.models.fields.CharField')(default=1, max_length=1, unique=True), + keep_default=False) + + + models = { + u'registration.registrationsingleton': { + 'Meta': {'object_name': 'RegistrationSingleton'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'registered': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'registration_data': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['registration'] \ No newline at end of file diff --git a/mayan/apps/registration/models.py b/mayan/apps/registration/models.py index 2e4ec7d119..84f34cc1b4 100644 --- a/mayan/apps/registration/models.py +++ b/mayan/apps/registration/models.py @@ -6,14 +6,15 @@ import requests from django.db import models from django.utils.translation import ugettext_lazy as _ -from common.models import Singleton +from solo.models import SingletonModel + from lock_manager import Lock, LockError from .literals import FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD, TIMEOUT from .exceptions import AlreadyRegistered -class RegistrationSingleton(Singleton): +class RegistrationSingleton(SingletonModel): _cached_name = None _registered = None diff --git a/mayan/settings.py b/mayan/settings.py index 8670588e47..027be00cc4 100644 --- a/mayan/settings.py +++ b/mayan/settings.py @@ -52,6 +52,7 @@ INSTALLED_APPS = ( 'mptt', 'compressor', 'rest_framework', + 'solo', # Base generic 'permissions', 'project_setup', diff --git a/requirements/common.txt b/requirements/common.txt index ccdfcc4786..504b8a9017 100644 --- a/requirements/common.txt +++ b/requirements/common.txt @@ -10,6 +10,7 @@ django-taggit==0.12 django-mptt==0.6.1 django-rest-swagger==0.1.14 django-sendfile==0.3.6 +django-solo==1.0.5 djangorestframework==2.3.14 GitPython==0.3.2.RC1 diff --git a/setup.py b/setup.py index a41da109f5..24bccb57c9 100644 --- a/setup.py +++ b/setup.py @@ -62,6 +62,7 @@ django-taggit==0.12 django-mptt==0.6.1 django-rest-swagger==0.1.14 django-sendfile==0.3.6 +django-solo==1.0.5 djangorestframework==2.3.14 GitPython==0.3.2.RC1 ghostscript==0.4.1