Couple of little fixes
This commit is contained in:
parent
caeee16657
commit
f22961ad44
@ -41,6 +41,19 @@ def rough_date(d):
|
|||||||
def generate_code(length=9):
|
def generate_code(length=9):
|
||||||
return "".join([ random.choice('0123456789') for _ in range(length) ])
|
return "".join([ random.choice('0123456789') for _ in range(length) ])
|
||||||
|
|
||||||
|
class EnsembleQuerySet(models.QuerySet):
|
||||||
|
|
||||||
|
def for_user(self, user, ensemble_keys=[], project_keys=[]):
|
||||||
|
if user.is_superuser:
|
||||||
|
return self
|
||||||
|
|
||||||
|
f = models.Q(slug__in=ensemble_keys) | models.Q(projects__in=project_keys)
|
||||||
|
|
||||||
|
if user.is_authenticated:
|
||||||
|
f |= models.Q(admins=user.pk)
|
||||||
|
|
||||||
|
return self.filter(f).distinct()
|
||||||
|
|
||||||
class Ensemble(models.Model):
|
class Ensemble(models.Model):
|
||||||
''' A group that plays together
|
''' A group that plays together
|
||||||
|
|
||||||
@ -57,12 +70,14 @@ class Ensemble(models.Model):
|
|||||||
nonce = models.SmallIntegerField(default=1,
|
nonce = models.SmallIntegerField(default=1,
|
||||||
help_text="Increment this to reset the authentication links")
|
help_text="Increment this to reset the authentication links")
|
||||||
|
|
||||||
|
objects = EnsembleQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('slug', )
|
ordering = ('slug', )
|
||||||
|
|
||||||
def active_projects(self):
|
#def active_projects(self):
|
||||||
#return self.projects.filter(active=True, event_date__gte=timezone.now())
|
# #return self.projects.filter(active=True, event_date__gte=timezone.now())
|
||||||
return self.projects.active().current()
|
# return self.projects.active().current()
|
||||||
|
|
||||||
def has_admin(self, user):
|
def has_admin(self, user):
|
||||||
if not user.is_authenticated:
|
if not user.is_authenticated:
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class AuthorizedResourceMixin(object):
|
|||||||
def is_authorized(self):
|
def is_authorized(self):
|
||||||
"By default check if superuser or a signed request"
|
"By default check if superuser or a signed request"
|
||||||
if self.request.is_admin:
|
if self.request.is_admin:
|
||||||
logger.debug("is_authorized: superuser")
|
#logger.debug("is_authorized: superuser")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if 'sig' in self.request.GET:
|
if 'sig' in self.request.GET:
|
||||||
@ -51,12 +51,12 @@ class AuthorizedResourceMixin(object):
|
|||||||
def is_authorized_key(self, resource, key, auth):
|
def is_authorized_key(self, resource, key, auth):
|
||||||
current = self.get_authorized_keys(resource).get(str(key), None)
|
current = self.get_authorized_keys(resource).get(str(key), None)
|
||||||
if current is None:
|
if current is None:
|
||||||
logger.debug("is_authorized_key: %s %s not in session", resource, key)
|
#logger.debug("is_authorized_key: %s %s not in session", resource, key)
|
||||||
return False
|
return False
|
||||||
if auth == current:
|
if auth == current:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
logger.info("Authorisation revoked")
|
#logger.info("Authorisation revoked")
|
||||||
self.del_authorized_key(resource, key)
|
self.del_authorized_key(resource, key)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -196,19 +196,22 @@ class EnsembleListView(AuthorizedResourceMixin, ListView):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
ensembles = models.Ensemble.objects.all()
|
return models.Ensemble.objects.for_user(self.request.user,
|
||||||
|
self.get_authorized_keys('ensemble').keys(),
|
||||||
|
self.get_authorized_keys('project').keys())
|
||||||
|
#ensembles = models.Ensemble.objects.all()
|
||||||
|
|
||||||
if self.request.is_admin:
|
#if self.request.is_admin:
|
||||||
return ensembles
|
# return ensembles
|
||||||
|
|
||||||
# limit to registered ensembles
|
# limit to registered ensembles
|
||||||
f = Q(slug__in=self.get_authorized_keys('ensemble').keys()) | Q(projects__in=self.get_authorized_keys('project').keys())
|
#f = Q(slug__in=self.get_authorized_keys('ensemble').keys()) | Q(projects__in=self.get_authorized_keys('project').keys())
|
||||||
|
|
||||||
# or ensembles where the user is admin
|
# or ensembles where the user is admin
|
||||||
if self.request.user.is_authenticated:
|
#if self.request.user.is_authenticated:
|
||||||
f |= Q(admins=self.request.user.pk)
|
# f |= Q(admins=self.request.user.pk)
|
||||||
|
|
||||||
return ensembles.filter(f).distinct()
|
#return ensembles.filter(f).distinct()
|
||||||
|
|
||||||
class EnsembleDetailView(EnsembleMixin, DetailView):
|
class EnsembleDetailView(EnsembleMixin, DetailView):
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ admin.site.register(models.Work, WorkAdmin)
|
|||||||
|
|
||||||
class SectionInline(admin.TabularInline):
|
class SectionInline(admin.TabularInline):
|
||||||
model = models.Section
|
model = models.Section
|
||||||
fields = ['type', 'tag', 'ordinal', 'start', 'end', 'page']
|
fields = ['tag', 'start', 'end', 'page']
|
||||||
|
|
||||||
class DocumentAdmin(admin.ModelAdmin):
|
class DocumentAdmin(admin.ModelAdmin):
|
||||||
list_display = ['work', '__str__']
|
list_display = ['work', '__str__']
|
||||||
|
|||||||
@ -36,8 +36,6 @@ class Orchestration(models.Model):
|
|||||||
Stores a list of instrument codes as a single entry (space delimited).
|
Stores a list of instrument codes as a single entry (space delimited).
|
||||||
Can be global or ensemble specific
|
Can be global or ensemble specific
|
||||||
"""
|
"""
|
||||||
# TODO: change ensemble to collection
|
|
||||||
#ensemble = models.ForeignKey('interface.Ensemble', on_delete=models.CASCADE, related_name="orchestrations", null=True, blank=True)
|
|
||||||
collection = models.ForeignKey('Collection', on_delete=models.CASCADE, related_name="custom_orchestrations", null=True, blank=True)
|
collection = models.ForeignKey('Collection', on_delete=models.CASCADE, related_name="custom_orchestrations", null=True, blank=True)
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
instruments = models.TextField()
|
instruments = models.TextField()
|
||||||
@ -234,10 +232,6 @@ class Work(models.Model):
|
|||||||
def meta(self):
|
def meta(self):
|
||||||
return self.meta_info.exclude(name='tag')
|
return self.meta_info.exclude(name='tag')
|
||||||
|
|
||||||
@property
|
|
||||||
def active_projects(self):
|
|
||||||
return self.projects.filter(active=True)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_loans(self):
|
def current_loans(self):
|
||||||
return self.project_items.filter(checkout__lte=now(), returned=None).select_related('project')
|
return self.project_items.filter(checkout__lte=now(), returned=None).select_related('project')
|
||||||
|
|||||||
@ -141,7 +141,7 @@ class CollectionListView(ListView):
|
|||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
collections = models.Collection.objects.all()
|
collections = models.Collection.objects.order_by('name')
|
||||||
|
|
||||||
if self.request.user.is_anonymous:
|
if self.request.user.is_anonymous:
|
||||||
return models.Collection.objects.none()
|
return models.Collection.objects.none()
|
||||||
|
|||||||
@ -83,7 +83,7 @@ class SectionSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class DocumentSerializer(serializers.ModelSerializer):
|
class DocumentSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
upload = serializers.CharField()
|
upload = serializers.URLField()
|
||||||
sections = SectionSerializer(many=True)
|
sections = SectionSerializer(many=True)
|
||||||
|
|
||||||
#def to_internal_value(self, data):
|
#def to_internal_value(self, data):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user