Remove common app's Singleton model and use django-solo's SingletonModel instead
This commit is contained in:
@@ -51,8 +51,8 @@ class BaseHolderSelectionForm(forms.Form):
|
|||||||
|
|
||||||
|
|
||||||
class HolderSelectionForm(BaseHolderSelectionForm):
|
class HolderSelectionForm(BaseHolderSelectionForm):
|
||||||
special_holders = [AnonymousUserSingleton.objects.get()]
|
special_holders = [AnonymousUserSingleton.objects.get_or_create()[0]]
|
||||||
|
|
||||||
|
|
||||||
class ClassHolderSelectionForm(BaseHolderSelectionForm):
|
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]]
|
||||||
|
|||||||
89
mayan/apps/acls/migrations/0001_initial.py
Normal file
89
mayan/apps/acls/migrations/0001_initial.py
Normal file
@@ -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']
|
||||||
@@ -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']
|
||||||
0
mayan/apps/acls/migrations/__init__.py
Normal file
0
mayan/apps/acls/migrations/__init__.py
Normal file
@@ -8,8 +8,9 @@ from django.utils.translation import ugettext
|
|||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
|
|
||||||
|
from solo.models import SingletonModel
|
||||||
|
|
||||||
from permissions.models import StoredPermission
|
from permissions.models import StoredPermission
|
||||||
from common.models import Singleton, SingletonManager
|
|
||||||
|
|
||||||
from .managers import AccessEntryManager, DefaultAccessEntryManager
|
from .managers import AccessEntryManager, DefaultAccessEntryManager
|
||||||
from .classes import AccessObjectClass
|
from .classes import AccessObjectClass
|
||||||
@@ -92,7 +93,7 @@ class DefaultAccessEntry(models.Model):
|
|||||||
return u'%s: %s' % (self.content_type, self.content_object)
|
return u'%s: %s' % (self.content_type, self.content_object)
|
||||||
|
|
||||||
|
|
||||||
class CreatorSingletonManager(SingletonManager):
|
class CreatorSingletonManager(models.Manager):
|
||||||
def passthru_check(self, holder, creator=None):
|
def passthru_check(self, holder, creator=None):
|
||||||
if isinstance(holder, self.model):
|
if isinstance(holder, self.model):
|
||||||
# TODO: raise explicit error if is instance and creator=None
|
# TODO: raise explicit error if is instance and creator=None
|
||||||
@@ -101,7 +102,7 @@ class CreatorSingletonManager(SingletonManager):
|
|||||||
return holder
|
return holder
|
||||||
|
|
||||||
|
|
||||||
class CreatorSingleton(Singleton):
|
class CreatorSingleton(SingletonModel):
|
||||||
objects = CreatorSingletonManager()
|
objects = CreatorSingletonManager()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from navigation.api import register_links, register_top_menu
|
|||||||
from .conf import settings as common_settings
|
from .conf import settings as common_settings
|
||||||
from .conf.settings import (AUTO_CREATE_ADMIN, AUTO_ADMIN_USERNAME,
|
from .conf.settings import (AUTO_CREATE_ADMIN, AUTO_ADMIN_USERNAME,
|
||||||
AUTO_ADMIN_PASSWORD, TEMPORARY_DIRECTORY)
|
AUTO_ADMIN_PASSWORD, TEMPORARY_DIRECTORY)
|
||||||
from .models import AutoAdminSingleton
|
from .models import AnonymousUserSingleton, AutoAdminSingleton
|
||||||
from .utils import validate_path
|
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)
|
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)
|
admin = auth_models.User.objects.get(username=AUTO_ADMIN_USERNAME)
|
||||||
# Store the auto admin password properties to display the first login message
|
# 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.account = admin
|
||||||
auto_admin_properties.password = AUTO_ADMIN_PASSWORD
|
auto_admin_properties.password = AUTO_ADMIN_PASSWORD
|
||||||
auto_admin_properties.password_hash = 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):
|
def auto_admin_account_passwd_change(sender, instance, **kwargs):
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
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:
|
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
|
# Only delete the auto admin properties when the password has been changed
|
||||||
auto_admin_properties.delete(force=True)
|
auto_admin_properties.delete(force=True)
|
||||||
|
|||||||
@@ -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']
|
||||||
@@ -4,43 +4,10 @@ from django.utils.translation import ugettext
|
|||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
SINGLETON_LOCK_ID = 1
|
from solo.models import SingletonModel
|
||||||
|
|
||||||
|
|
||||||
class SingletonManager(models.Manager):
|
class AnonymousUserSingleton(SingletonModel):
|
||||||
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()
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return ugettext('Anonymous user')
|
return ugettext('Anonymous user')
|
||||||
|
|
||||||
@@ -49,7 +16,7 @@ class AnonymousUserSingleton(Singleton):
|
|||||||
verbose_name_plural = _(u'anonymous user')
|
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'))
|
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 = 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)
|
password_hash = models.CharField(null=True, blank=True, verbose_name=_(u'password hash'), max_length=128)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from .models import Installation
|
|||||||
@receiver(post_migrate, dispatch_uid='trigger_first_time')
|
@receiver(post_migrate, dispatch_uid='trigger_first_time')
|
||||||
def trigger_first_time(sender, **kwargs):
|
def trigger_first_time(sender, **kwargs):
|
||||||
if kwargs['app'] == 'installation':
|
if kwargs['app'] == 'installation':
|
||||||
details = Installation.objects.get()
|
details, created = Installation.objects.get_or_create()
|
||||||
details.is_first_run = True
|
details.is_first_run = True
|
||||||
details.save()
|
details.save()
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ def trigger_first_time(sender, **kwargs):
|
|||||||
def check_first_run():
|
def check_first_run():
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
details = Installation.objects.get()
|
details, created = Installation.objects.get_or_create()
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
# Avoid database errors when the app tables haven't been created yet
|
# Avoid database errors when the app tables haven't been created yet
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -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']
|
||||||
@@ -24,7 +24,8 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from django.utils.datastructures import SortedDict
|
from django.utils.datastructures import SortedDict
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from common.models import Singleton
|
from solo.models import SingletonModel
|
||||||
|
|
||||||
from common.utils import pretty_size
|
from common.utils import pretty_size
|
||||||
from mayan import __version__ as mayan_version
|
from mayan import __version__ as mayan_version
|
||||||
from lock_manager import Lock, LockError
|
from lock_manager import Lock, LockError
|
||||||
@@ -35,7 +36,7 @@ from .literals import (FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD,
|
|||||||
TIMEOUT, FABFILE_MARKER)
|
TIMEOUT, FABFILE_MARKER)
|
||||||
|
|
||||||
|
|
||||||
class Installation(Singleton):
|
class Installation(SingletonModel):
|
||||||
_properties = SortedDict()
|
_properties = SortedDict()
|
||||||
|
|
||||||
is_first_run = models.BooleanField(default=False)
|
is_first_run = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ register_links(['form_view', 'about_view', 'license_view'], [form_view], menu_na
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
RegistrationSingleton.objects.get()
|
RegistrationSingleton.objects.get_or_create()
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -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']
|
||||||
@@ -6,14 +6,15 @@ import requests
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
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 lock_manager import Lock, LockError
|
||||||
|
|
||||||
from .literals import FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD, TIMEOUT
|
from .literals import FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD, TIMEOUT
|
||||||
from .exceptions import AlreadyRegistered
|
from .exceptions import AlreadyRegistered
|
||||||
|
|
||||||
|
|
||||||
class RegistrationSingleton(Singleton):
|
class RegistrationSingleton(SingletonModel):
|
||||||
_cached_name = None
|
_cached_name = None
|
||||||
_registered = None
|
_registered = None
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ INSTALLED_APPS = (
|
|||||||
'mptt',
|
'mptt',
|
||||||
'compressor',
|
'compressor',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
|
'solo',
|
||||||
# Base generic
|
# Base generic
|
||||||
'permissions',
|
'permissions',
|
||||||
'project_setup',
|
'project_setup',
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ django-taggit==0.12
|
|||||||
django-mptt==0.6.1
|
django-mptt==0.6.1
|
||||||
django-rest-swagger==0.1.14
|
django-rest-swagger==0.1.14
|
||||||
django-sendfile==0.3.6
|
django-sendfile==0.3.6
|
||||||
|
django-solo==1.0.5
|
||||||
djangorestframework==2.3.14
|
djangorestframework==2.3.14
|
||||||
|
|
||||||
GitPython==0.3.2.RC1
|
GitPython==0.3.2.RC1
|
||||||
|
|||||||
1
setup.py
1
setup.py
@@ -62,6 +62,7 @@ django-taggit==0.12
|
|||||||
django-mptt==0.6.1
|
django-mptt==0.6.1
|
||||||
django-rest-swagger==0.1.14
|
django-rest-swagger==0.1.14
|
||||||
django-sendfile==0.3.6
|
django-sendfile==0.3.6
|
||||||
|
django-solo==1.0.5
|
||||||
djangorestframework==2.3.14
|
djangorestframework==2.3.14
|
||||||
GitPython==0.3.2.RC1
|
GitPython==0.3.2.RC1
|
||||||
ghostscript==0.4.1
|
ghostscript==0.4.1
|
||||||
|
|||||||
Reference in New Issue
Block a user