示例#1
0
    def test_get_flags_for_site(self):
        self.assertTrue(len(Flag.get_flags_for_site(self.site1)) == 0)
        name1 = "foo"
        Flag.objects.create(name=name1, everyone=True, site=self.site1)

        self.assertEqual([name1], [f.name for f in Flag.get_flags_for_site(self.site1)])
        # by default sample is sites-global
        self.assertEqual([name1], [f.name for f in Flag.get_flags_for_site(self.site2)])

        name2 = "bar"
        Flag.objects.create(name=name2,  everyone=True, site=self.site2, all_sites_override=False)
        self.assertEqual({name1, name2}, set([f.name for f in Flag.get_flags_for_site(self.site2)]))
        self.assertEqual([name1], [f.name for f in Flag.get_flags_for_site(self.site1)])
示例#2
0
文件: views.py 项目: Tryweirder/kuma
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            "username": user.username,
            "is_authenticated": True,
            "avatar_url": get_avatar_url(user),
            "email": user.email,
            "subscriber_number": user.subscriber_number,
        }
        if UserSubscription.objects.filter(user=user, canceled__isnull=True).exists():
            data["is_subscriber"] = True
        if user.is_staff:
            data["is_staff"] = True
        if user.is_superuser:
            data["is_superuser"] = True
        if user.is_beta_tester:
            data["is_beta_tester"] = True
    else:
        data = {}

    data["waffle"] = {
        "flags": {},
        "switches": {s.name: True for s in Switch.get_all() if s.is_active()},
    }
    # Specifically and more smartly loop over the waffle Flag objects
    # to avoid unnecessary `cache.get(...)` calls within the `flag.is_active(request)`.
    for flag in Flag.get_all():
        if not request.user.is_authenticated:
            # Majority of users are anonymous, so let's focus on that.
            # Let's see if there's a quick reason to bail the
            # expensive `flag.is_active(request)` call.
            if (
                flag.authenticated or flag.staff or flag.superusers
            ) and not flag.everyone:
                continue
            if not (flag.languages or flag.percent or flag.everyone):
                continue
            if flag.languages:
                languages = [ln.strip() for ln in flag.languages.split(",")]
                if (
                    not hasattr(request, "LANGUAGE_CODE")
                    or request.LANGUAGE_CODE not in languages
                ):
                    continue

        if flag.is_active(request):
            data["waffle"]["flags"][flag.name] = True

    return JsonResponse(data)
示例#3
0
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data['waffle'] = {
        'flags': {f.name: f.is_active(request)
                  for f in Flag.get_all()},
        'switches': {s.name: s.is_active()
                     for s in Switch.get_all()},
        'samples': {s.name: s.is_active()
                    for s in Sample.get_all()},
    }

    return JsonResponse(data)
示例#4
0
    def save_model(self, request, obj, form, change):
        super(FeatureSubscriptionAdmin,
              self).save_model(request, obj, form, change)
        '''
        #get waffle.flag for feature
            if not exist - create one
            iterate over organization list
                get all users belonging to this organization
                add users to waffle.flag entity users list
                
                - later - on post add / remove of user object, we need to update this list of waffle.flag
        #
        
        '''
        flags = Flag.objects.filter(name=self.feature_name(obj))[:1]
        if flags:
            flag = flags[0]
        else:
            flag = Flag(name=self.feature_name(obj))
            flag.save()

        flag.users.clear()
        user_ids = []
        #         reloaded_feature_subscription = FeatureSubscription.objects.get(id=obj.id)
        #         org_ids = form.cleaned_data.get('organizations')
        org_ids = [
            organization.org_id
            for organization in form.cleaned_data.get('organizations', [])
        ]
        #         org_ids = [organization.org_id for organization in reloaded_feature_subscription.organizations.all()]
        for org_id in org_ids:
            user_profiles = NGOUserProfile.objects.filter(org_id=org_id)
            org_user_ids = [
                user_profile.user_id for user_profile in user_profiles
            ]
            user_ids.extend(org_user_ids)
        for user_id in user_ids:
            flag.users.add(user_id)
示例#5
0
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            "username": user.username,
            "is_authenticated": True,
            "avatar_url": get_avatar_url(user),
            "email": user.email,
            "subscriber_number": user.subscriber_number,
        }
        if UserSubscription.objects.filter(user=user,
                                           canceled__isnull=True).exists():
            data["is_subscriber"] = True
        if user.is_staff:
            data["is_staff"] = True
        if user.is_superuser:
            data["is_superuser"] = True
        if user.is_beta_tester:
            data["is_beta_tester"] = True

        # This is rather temporary field. Once we're off the Wiki and into Yari
        # this no longer makes sense to keep.
        data["wiki_contributions"] = user.created_revisions.count()
    else:
        data = {}

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data["waffle"] = {
        "flags":
        {f.name: True
         for f in Flag.get_all() if f.is_active(request)},
        "switches": {s.name: True
                     for s in Switch.get_all() if s.is_active()},
        "samples": {s.name: True
                    for s in Sample.get_all() if s.is_active()},
    }
    return JsonResponse(data)
示例#6
0
文件: views.py 项目: mozilla/kuma
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            'username': user.username,
            'timezone': user.timezone,
            'is_authenticated': True,
            'is_staff': user.is_staff,
            'is_superuser': user.is_superuser,
            'is_beta_tester': user.is_beta_tester,
            'gravatar_url': {
                'small': gravatar_url(user.email, size=50),
                'large': gravatar_url(user.email, size=200),
            }
        }
    else:
        data = {
            'username': None,
            'timezone': settings.TIME_ZONE,
            'is_authenticated': False,
            'is_staff': False,
            'is_superuser': False,
            'is_beta_tester': False,
            'gravatar_url': {
                'small': None,
                'large': None,
            }
        }

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data['waffle'] = {
        'flags': {f.name: f.is_active(request) for f in Flag.get_all()},
        'switches': {s.name: s.is_active() for s in Switch.get_all()},
        'samples': {s.name: s.is_active() for s in Sample.get_all()},
    }

    return JsonResponse(data)
示例#7
0
def whoami(request):
    """
    Return a JSON object representing the current user, either
    authenticated or anonymous.
    """
    user = request.user
    if user.is_authenticated:
        data = {
            "username": user.username,
            "timezone": user.timezone,
            "is_authenticated": True,
            "is_staff": user.is_staff,
            "is_superuser": user.is_superuser,
            "is_beta_tester": user.is_beta_tester,
            "avatar_url": get_avatar_url(user),
            "is_subscriber": UserSubscription.objects.filter(
                user=user, canceled__isnull=True
            ).exists(),
        }
    else:
        data = {
            "username": None,
            "timezone": settings.TIME_ZONE,
            "is_authenticated": False,
            "is_staff": False,
            "is_superuser": False,
            "is_beta_tester": False,
            "avatar_url": None,
            "is_subscriber": False,
        }

    # Add waffle data to the dict we're going to be returning.
    # This is what the waffle.wafflejs() template tag does, but we're
    # doing it via an API instead of hardcoding the settings into
    # the HTML page. See also from waffle.views._generate_waffle_js.
    #
    # Note that if we upgrade django-waffle, version 15 introduces a
    # pluggable flag model, and the approved way to get all flag
    # objects will then become:
    #    get_waffle_flag_model().get_all()
    #
    data["waffle"] = {
        "flags": {f.name: f.is_active(request) for f in Flag.get_all()},
        "switches": {s.name: s.is_active() for s in Switch.get_all()},
        "samples": {s.name: s.is_active() for s in Sample.get_all()},
    }
    return JsonResponse(data)
示例#8
0
文件: views.py 项目: lxp20201/lxp
def _generate_waffle_js(request):
    flags = Flag.get_all()
    flag_values = [(f.name, f.is_active(request)) for f in flags]

    switches = Switch.get_all()
    switch_values = [(s.name, s.is_active()) for s in switches]

    samples = Sample.get_all()
    sample_values = [(s.name, s.is_active()) for s in samples]

    return loader.render_to_string('waffle/waffle.js', {
        'flags': flag_values,
        'switches': switch_values,
        'samples': sample_values,
        'flag_default': get_setting('FLAG_DEFAULT'),
        'switch_default': get_setting('SWITCH_DEFAULT'),
        'sample_default': get_setting('SAMPLE_DEFAULT'),
    })
示例#9
0
            def _give_me_waffles(*args, **kwargs):
                origvalue = None
                # Avoid circular imports
                from waffle.models import Flag
                try:
                    flag = Flag.objects.filter(name=flagname)[0]
                    origvalue = flag.everyone
                    flag.everyone = flagvalue
                except waffle.Flag.DoesNotExist:
                    flag = Flag(name=flagname, everyone=True)
                flag.save()

                try:
                    return func(*args, **kwargs)
                except Exception:
                    # FIXME: This breaks if saving the flag also
                    # raises an exception, but that really shouldn't
                    # happen in our test suite and if it does, we've
                    # probably got other more serious issues to deal
                    # with.
                    if origvalue is not None:
                        flag.everyone = origvalue
                        flag.save()
                    raise
示例#10
0
            def _give_me_waffles(*args, **kwargs):
                origvalue = None
                # Avoid circular imports
                from waffle.models import Flag
                try:
                    flag = Flag.objects.filter(name=flagname)[0]
                    origvalue = flag.everyone
                    flag.everyone = flagvalue
                except waffle.Flag.DoesNotExist:
                    flag = Flag(name=flagname, everyone=True)
                flag.save()

                try:
                    return func(*args, **kwargs)
                except Exception:
                    # FIXME: This breaks if saving the flag also
                    # raises an exception, but that really shouldn't
                    # happen in our test suite and if it does, we've
                    # probably got other more serious issues to deal
                    # with.
                    if origvalue is not None:
                        flag.everyone = origvalue
                        flag.save()
                    raise
示例#11
0
文件: perms.py 项目: dukku1/osis
def can_update_learning_achievement(learning_unit_year, person):
    flag = Flag.get('learning_achievement_update')
    return flag.is_active_for_user(person.user) and \
        person.is_linked_to_entity_in_charge_of_learning_unit_year(learning_unit_year) and \
        is_year_editable(learning_unit_year, raise_exception=False)
示例#12
0
文件: perms.py 项目: dukku1/osis
def can_edit_summary_locked_field(learning_unit_year, person):
    flag = Flag.get('educational_information_block_action')
    return flag.is_active_for_user(person.user) and \
        person.is_faculty_manager and \
        person.is_linked_to_entity_in_charge_of_learning_unit_year(learning_unit_year)
示例#13
0
文件: perms.py 项目: uclouvain/osis
def can_update_learning_achievement(learning_unit_year, person):
    flag = Flag.get('learning_achievement_update')
    return flag.is_active_for_user(person.user) and \
        person.is_linked_to_entity_in_charge_of_learning_unit_year(learning_unit_year)
示例#14
0
文件: perms.py 项目: uclouvain/osis
def can_edit_summary_locked_field(learning_unit_year, person):
    flag = Flag.get('educational_information_block_action')
    return flag.is_active_for_user(person.user) and \
        person.is_faculty_manager and \
        person.is_linked_to_entity_in_charge_of_learning_unit_year(learning_unit_year)
def reverse_func(state, schema):
    flag = Flag(name='ember_support_page', everyone=False)
    flag.save()