def test_has_user_related(self): self.assertTrue(models.has_user_related(self.user1)) self.assertTrue(models.has_user_related(self.user2)) self.assertFalse(models.has_user_related(self.user3)) anonymous = AnonymousUser() self.assertFalse(models.has_user_related(anonymous))
def get_plan(user): """ Return the plan of user. """ if not has_user_related(user): return "" return get_user_related(user).plan
def user_type(value): """ Return the user type of a request.user object. """ if not has_user_related(value): return False return get_user_related(value).__class__.__name__
def check_auth(self, request): """ Allow premium users to query. """ if has_user_related(request.user): user = get_user_related(request.user) return user.is_premium return False
def related_user(request): """ A context processor that returns the related user from a request.user. :param request: the request to be processed """ if not has_user_related(request.user): return {} return {"related_user": get_user_related(request.user)}
def dehydrate(self, bundle): """ Make sur the user does not see the fields he has no right to. :param bundle: the bundle to trim """ if not hasattr(bundle, "request") or not models.has_user_related(bundle.request.user): bundle.data = pick(bundle.data, *self.FIELD_ACCESS_NOT_LOGGED) else: user = models.get_user_related(bundle.request.user) if not user.is_premium: bundle.data = without(bundle.data, *self.FIELD_DENIED_BASIC) return bundle
def profile(request, type, uid): """ Display the profile of a user. A nice 404 view is shown to the user if the profile does not exist OR the profile is not premium. A nice 401 view is shown to the user if the profile didn't want to show itself to the user or globally. """ if type not in ("famille", "prestataire"): raise Http404 context = {} if type == "famille": ModelClass = Famille RatingClass = FamilleRatings RatingFormClass = forms.RatingFamilleForm else: ModelClass = Prestataire RatingClass = PrestataireRatings RatingFormClass = forms.RatingPrestataireForm try: user = ModelClass.objects.get(pk=uid) except ModelClass.DoesNotExist: return render(request, "profile/404.html", status=404) # the user can view its own profile but others cannot if he is not premium if request.related_user != user and not user.is_premium: return render(request, "profile/404.html", status=404) if not user.profile_access_is_authorized(request): return render(request, "profile/401.html", status=401) if has_user_related(request.user): related_user = get_user_related(request.user) context["related_user"] = related_user context["favorited"] = related_user.favorites.filter(object_id=user.pk, object_type=type.title()).count() # users cant vote for themselves or twice for a user if user != related_user and not RatingClass.user_has_voted_for(related_user, user): rating = RatingClass(user=user, by=related_user.simple_id) context["rating_form"] = RatingFormClass(instance=rating) return render(request, "profile/%s.html" % type, get_context(profile=user, **context))
def register(request, social=None, type=None): """ Register view. Allow user creation. """ if not type: if request.method == "POST": form = forms.RegistrationForm(request.POST) if form.is_valid(): form.save(request) else: return render(request, "registration/register.html", get_context(social=social, form=form)) else: form = forms.RegistrationForm() return render(request, "registration/register.html", get_context(social=social, form=form)) else: if not has_user_related(request.user): UserInfo.create_user(dj_user=request.user, type=type) else: return redirect('account') return HttpResponseRedirect('/confirmation/')
def get_rating_form(profile, request_user): """ Return the rating form instance for a profile and a given user. Return None in case of a problem or the request user already voted. :param profile: the profile to be rated :param request_user: the request user """ if isinstance(profile, Famille): RatingClass = FamilleRatings RatingFormClass = RatingFamilleForm else: RatingClass = PrestataireRatings RatingFormClass = RatingPrestataireForm if has_user_related(request_user): related_user = get_user_related(request_user) if not RatingClass.user_has_voted_for(related_user, profile): rating = RatingClass(user=profile, by=related_user.simple_id) return RatingFormClass(instance=rating) return None
def has_related(value): """ Returns True if user has related user or not. """ return has_user_related(value)