コード例 #1
0
ファイル: controllers.py プロジェクト: marmistrz/oioioi
    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)
コード例 #2
0
ファイル: tests.py プロジェクト: jakubste/oioioi
    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')
コード例 #3
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')
コード例 #4
0
ファイル: controllers.py プロジェクト: papedaniel/oioioi
    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)
コード例 #5
0
ファイル: forms.py プロジェクト: StarostaGit/oioioi
 def save(self, *args, **kwargs):
     instance = super(UserForm, self).save(*args, **kwargs)
     PreferencesSaved.send(self)
     return instance
コード例 #6
0
ファイル: forms.py プロジェクト: papedaniel/oioioi
 def save(self, *args, **kwargs):
     instance = super(UserForm, self).save(*args, **kwargs)
     PreferencesSaved.send(self)
     return instance