diff --git a/beat/web/code/models.py b/beat/web/code/models.py index ac9453fa20fac3e88e23aabb6d6c57bbe9104d2b..e42994ad9cde44127b1f593315b451ccfc453faa 100755 --- a/beat/web/code/models.py +++ b/beat/web/code/models.py @@ -25,6 +25,8 @@ # # ############################################################################### +from collections import namedtuple + from django.db import models from django.db.models import Q from django.contrib.auth.models import User @@ -228,6 +230,10 @@ def get_source_code(instance): # ---------------------------------------------------------- +AccessibilityInfo = namedtuple( + "Accessibility", ["has_access", "is_opensource", "accessibility"] +) + class Code(StoredContribution): @@ -666,47 +672,46 @@ class Code(StoredContribution): if self.author == user: if self.sharing == Contribution.PRIVATE: - return (True, False, "private") + return AccessibilityInfo(True, False, "private") elif self.sharing == Contribution.PUBLIC: - return (True, True, "public") + return AccessibilityInfo(True, True, "public") else: - return (True, False, "confidential") - + return AccessibilityInfo(True, False, "confidential") else: if self.sharing == Contribution.PRIVATE: - return (False, False, None) + return AccessibilityInfo(False, False, None) elif self.sharing == Contribution.PUBLIC: - return (True, True, "public") + return AccessibilityInfo(True, True, "public") elif not without_usable and (self.sharing == Contribution.USABLE): - return (True, False, "confidential") + return AccessibilityInfo(True, False, "confidential") elif not user.is_anonymous(): if self.shared_with.filter(id=user.id).exists() or ( self.shared_with_team.filter(members=user).count() > 0 ): - return (True, True, "confidential") + return AccessibilityInfo(True, True, "confidential") elif not without_usable and ( self.usable_by.filter(id=user.id).exists() or (self.usable_by_team.filter(members=user).count() > 0) ): - return (True, False, "confidential") + return AccessibilityInfo(True, False, "confidential") - return (False, False, None) + return AccessibilityInfo(False, False, None) def _accessibility_for_team(self, team, without_usable=False): """Team specific accessibility check """ if self.sharing == Contribution.PRIVATE: - return (False, False, None) + return AccessibilityInfo(False, False, None) elif self.sharing == Contribution.PUBLIC: - return (True, True, "public") + return AccessibilityInfo(True, True, "public") elif not without_usable and (self.sharing == Contribution.USABLE): - return (True, False, "confidential") + return AccessibilityInfo(True, False, "confidential") elif self.shared_with_team.filter(id=team.id).exists(): - return (True, True, "confidential") + return AccessibilityInfo(True, True, "confidential") elif not without_usable and self.usable_by_team.filter(id=team.id).exists(): - return (True, False, "confidential") + return AccessibilityInfo(True, False, "confidential") - return (False, False, None) + return AccessibilityInfo(False, False, None) # _____ Protected methods __________ diff --git a/beat/web/common/models.py b/beat/web/common/models.py index ffc0a5a5def3cd002044f88d9954aca2b591c8df..590670c6031c65e76a40bc571df577818938eb79 100755 --- a/beat/web/common/models.py +++ b/beat/web/common/models.py @@ -25,6 +25,8 @@ # # ############################################################################### +from collections import namedtuple + from django.db import models from django.conf import settings from django.db.models import Q @@ -77,6 +79,9 @@ class ShareableManager(models.Manager): # ---------------------------------------------------------- +AccessibilityInfo = namedtuple("Accessibility", ["has_access", "accessibility"]) + + class Shareable(models.Model): # _____ Constants __________ @@ -343,36 +348,35 @@ class Shareable(models.Model): if hasattr(self, "author") and self.author == user: if self.sharing == Shareable.PRIVATE: - return (True, "private") + return AccessibilityInfo(True, "private") elif self.sharing == Shareable.PUBLIC: - return (True, "public") + return AccessibilityInfo(True, "public") else: - return (True, "confidential") - + return AccessibilityInfo(True, "confidential") else: if self.sharing == Shareable.PRIVATE: - return (False, None) + return AccessibilityInfo(False, None) elif self.sharing == Shareable.PUBLIC: - return (True, "public") + return AccessibilityInfo(True, "public") elif not user.is_anonymous(): if self.shared_with.filter(id=user.id).exists() or ( self.shared_with_team.filter(members=user).count() > 0 ): - return (True, "confidential") + return AccessibilityInfo(True, "confidential") - return (False, None) + return AccessibilityInfo(False, None) def _accessibility_for_team(self, team, without_usable=False): """Team specific accessibility check """ if self.sharing == Shareable.PRIVATE: - return (False, None) + return AccessibilityInfo(False, None) elif self.sharing == Shareable.PUBLIC: - return (True, "public") + return AccessibilityInfo(True, "public") elif self.shared_with_team.filter(id=team.id).exists(): - return (True, "confidential") + return AccessibilityInfo(True, "confidential") - return (False, None) + return AccessibilityInfo(False, None) def _update_sharing(self, sharing, users, teams): if sharing != self.sharing: