Beispiel #1
0
    def set_up():
        def preferences_value_callback(field_name, user):
            return CodeSharingSettings.objects.sharing_allowed(user)

        @transaction.atomic
        def on_preferences_saved(sender, **kwargs):
            if 'code_sharing' in sender.cleaned_data:
                obj, created = CodeSharingSettings.objects.get_or_create(
                    user=sender.instance
                )
                obj.code_share_allowed = sender.cleaned_data['code_sharing']
                obj.save()

        CodeSharingController.mix_in(CodeSharingFriendsController)
        PreferencesFactory.add_field(
            'code_sharing',
            BooleanField,
            preferences_value_callback,
            label=_("Whether to allow your friends to see your problem "
                    "solutions"),
            required=False
        )
        # django.dispatch.Signal stores callback function with weak reference
        # by default - and because we pass there local function it is
        # immediately garbage collected; we need to turn off weak reference.
        PreferencesSaved.connect(on_preferences_saved, weak=False)
Beispiel #2
0
def edit_profile_view(request):
    if request.method == "POST":
        form = PreferencesFactory().create_form(
            request.user, request.POST, allow_login_change=not has_valid_username(request.user)
        )
        if form.is_valid():
            form.save()
            return redirect("index")
    else:
        form = PreferencesFactory().create_form(request.user, allow_login_change=not has_valid_username(request.user))
    return TemplateResponse(request, "registration/registration_form.html", {"form": form})
Beispiel #3
0
    def set_up():
        def preferences_value_callback(field_name, user):
            return CodeSharingSettings.objects.sharing_allowed(user)

        @transaction.atomic
        def on_preferences_saved(sender, **kwargs):
            obj, created = CodeSharingSettings.get_or_create(
                user=sender.user
            )
            obj.code_share_allowed = sender.cleaned_data['code_sharing']
            obj.save()

        CodeSharingController.mix_in(CodeSharingFriendsController)
        PreferencesFactory.add_field(
            'code_sharing',
            BooleanField,
            preferences_value_callback,
            label=_("Whether to allow your friends to see your problem "
                    "solutions"),
            required=False
        )
        PreferencesSaved.connect(on_preferences_saved)
Beispiel #4
0
def edit_profile_view(request):
    if request.method == 'POST':
        form = PreferencesFactory().create_form(
            request.user,
            request.POST,
            allow_login_change=not has_valid_username(request.user))
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = PreferencesFactory().create_form(
            request.user,
            allow_login_change=not has_valid_username(request.user))
    return TemplateResponse(request, 'registration/registration_form.html',
                            {'form': form})
Beispiel #5
0
    def test_profile_dynamic_fields(self):
        from oioioi.base.preferences import PreferencesFactory, \
                PreferencesSaved

        def callback_func(sender, **kwargs):
            self.assertEquals(sender.cleaned_data['dog'], 'Janusz')
            self.assertEquals(sender.cleaned_data['answer'], 42)

        try:
            PreferencesFactory.add_field('dog',
                                         CharField,
                                         lambda n, u: 'Andrzej',
                                         label='Doggy')
            PreferencesFactory.add_field('answer',
                                         IntegerField,
                                         lambda n, u: 72,
                                         label="The answer to everything")
            PreferencesSaved.connect(callback_func)

            self.client.login(username='******')
            url = reverse('edit_profile')

            response = self.client.get(url)

            for text in ['Doggy', 'Andrzej', '72', 'The answer to everything']:
                self.assertIn(text, response.content)

            data = {
                'username': '******',
                'first_name': 'fn',
                'last_name': 'ln',
                'email': '*****@*****.**',
                'dog': 'Janusz',
                'answer': '42'
            }
            self.client.post(url, data, follow=True)
            # callback_func should be called already
        finally:
            PreferencesSaved.disconnect(callback_func)
            PreferencesFactory.remove_field('dog')
            PreferencesFactory.remove_field('answer')
Beispiel #6
0
    def test_profile_dynamic_fields(self):
        from oioioi.base.preferences import PreferencesFactory
        from oioioi.base.models import PreferencesSaved

        def callback_func(sender, **kwargs):
            self.assertEqual(sender.cleaned_data['dog'], 'Janusz')
            self.assertEqual(sender.cleaned_data['answer'], 42)

        try:
            PreferencesFactory.add_field(
                'dog',
                CharField,
                lambda n, u: 'Andrzej',
                label='Doggy'
            )
            PreferencesFactory.add_field(
                'answer',
                IntegerField,
                lambda n, u: 72,
                label="The answer to everything"
            )
            PreferencesSaved.connect(callback_func)

            self.assertTrue(self.client.login(username='******'))
            url = reverse('edit_profile')

            response = self.client.get(url)

            for text in ['Doggy', 'Andrzej', '72', 'The answer to everything']:
                self.assertContains(response, text)

            data = {'username': '******', 'first_name': 'fn',
                    'last_name': 'ln', 'email': '*****@*****.**',
                    'dog': 'Janusz', 'answer': '42'}
            self.client.post(url, data, follow=True)
            # callback_func should be called already
        finally:
            PreferencesSaved.disconnect(callback_func)
            PreferencesFactory.remove_field('dog')
            PreferencesFactory.remove_field('answer')
Beispiel #7
0
 def form_class(self, instance=None, *args, **kwargs):
     return PreferencesFactory().create_form(RegistrationFormWithNames,
                                             instance, *args, **kwargs)
Beispiel #8
0
def _maybe_add_field(label, *args, **kwargs):
    if (label):
        kwargs.setdefault('label', label)
        PreferencesFactory.add_field(*args, **kwargs)