Projet

Général

Profil

0001-add-Attribute.disabled-field-fixed-13234.patch

Benjamin Dauvergne, 21 septembre 2016 16:49

Télécharger (8,93 ko)

Voir les différences:

Subject: [PATCH] add Attribute.disabled field (fixed #13234)

Also raise needed django-model-utils version to >=2.4.
 setup.py                                             |  2 +-
 src/authentic2/managers.py                           | 14 +++++++++-----
 src/authentic2/migrations/0016_attribute_disabled.py | 20 ++++++++++++++++++++
 src/authentic2/models.py                             |  6 +++++-
 src/authentic2/saml/managers.py                      | 11 +++--------
 src/authentic2_idp_cas/managers.py                   |  8 +++-----
 tests/test_all.py                                    |  1 +
 tests/test_api.py                                    |  5 +++++
 tests/test_profile.py                                |  7 +++++++
 9 files changed, 54 insertions(+), 20 deletions(-)
 create mode 100644 src/authentic2/migrations/0016_attribute_disabled.py
setup.py
111 111
      install_requires=[
112 112
          'django>=1.7.6,<1.9',
113 113
          'requests>=2.3',
114
          'django-model-utils>=2,<2.4',
114
          'django-model-utils>=2.4',
115 115
          'django-admin-tools>=0.6,<0.7',
116 116
          'dnspython>=1.10',
117 117
          'Django-Select2>=4.3.0,<5',
src/authentic2/managers.py
19 19
    def get_by_natural_key(self, slug):
20 20
        return self.get(slug=slug)
21 21

  
22
GetBySlugManager = managers.PassThroughManager.for_queryset_class(GetBySlugQuerySet)
22
GetBySlugManager = GetBySlugQuerySet.as_manager
23 23

  
24 24

  
25 25
class GetByNameQuerySet(QuerySet):
26 26
    def get_by_natural_key(self, name):
27 27
        return self.get(name=name)
28 28

  
29
GetByNameManager = managers.PassThroughManager.for_queryset_class(GetByNameQuerySet)
29
GetByNameManager = GetByNameQuerySet.as_manager
30 30

  
31 31

  
32 32
class DeletedUserManager(models.Manager):
......
73 73
                .for_service_model(service))
74 74

  
75 75

  
76
class FederatedIdManager(managers.PassThroughManager.for_queryset_class(FederatedIdQuerySet)):
76
class FederatedIdManager(models.Manager.from_queryset(FederatedIdQuerySet)):
77 77
    @classmethod
78 78
    def local_user_id(cls, user):
79 79
        return '%s %s' % (LOCAL_USER_URN, urlquote(user.username))
......
98 98
        content_type = ContentType.objects.get_for_model(model)
99 99
        return self.filter(content_type=content_type, object_id=model.pk)
100 100

  
101
GenericManager = managers.PassThroughManager.for_queryset_class(GenericQuerySet)
101
GenericManager = models.Manager.from_queryset(GenericQuerySet)
102 102

  
103 103

  
104 104
class AttributeValueQuerySet(QuerySet):
......
145 145
        return self.get(**kwargs)
146 146

  
147 147

  
148
class AttributeManager(managers.QueryManager.from_queryset(GetByNameQuerySet)):
149
    use_for_related_fields = False
150

  
151

  
148 152
ServiceManager = BaseServiceManager.from_queryset(ServiceQuerySet)
149
AttributeValueManager = managers.PassThroughManager.for_queryset_class(AttributeValueQuerySet)
153
AttributeValueManager = models.Manager.from_queryset(AttributeValueQuerySet)
src/authentic2/migrations/0016_attribute_disabled.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import migrations, models
5

  
6

  
7
class Migration(migrations.Migration):
8

  
9
    dependencies = [
10
        ('authentic2', '0015_auto_20160621_1711'),
11
        ('custom_user', '0011_manual_attribute_values_for_name_fields'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='attribute',
17
            name='disabled',
18
            field=models.BooleanField(default=False, verbose_name='disabled'),
19
        ),
20
    ]
src/authentic2/models.py
160 160
            blank=True, default=False)
161 161
    kind = models.CharField(max_length=16,
162 162
            verbose_name=_('kind'))
163
    disabled = models.BooleanField(verbose_name=_('disabled'),
164
                                   blank=True, default=False)
165

  
166
    objects = managers.AttributeManager(disabled=False)
167
    all_objects = managers.AttributeManager()
163 168

  
164
    objects = managers.GetByNameManager()
165 169
    registration_attributes = QueryManager(asked_on_registration=True)
166 170
    user_attributes = QueryManager(user_editable=True)
167 171

  
src/authentic2/saml/managers.py
12 12
from django.contrib.contenttypes.models import ContentType
13 13

  
14 14

  
15
from model_utils import managers
16

  
17 15
from . import lasso_helper
18 16
from ..managers import GetBySlugQuerySet, GenericManager
19 17

  
......
28 26
            if not store.exists(key):
29 27
                o.delete()
30 28

  
31
SessionLinkedManager = managers.PassThroughManager \
32
        .for_queryset_class(SessionLinkedQuerySet)
29
SessionLinkedManager = models.Manager.from_queryset(SessionLinkedQuerySet)
33 30

  
34 31
class LibertyFederationManager(models.Manager):
35 32
    def cleanup(self):
......
80 77
    def without_federation(self, user):
81 78
        return self.exclude(identity_provider__libertyfederation__user=user)
82 79

  
83
LibertyProviderManager = managers.PassThroughManager \
84
        .for_queryset_class(LibertyProviderQueryset)
80
LibertyProviderManager = models.Manager.from_queryset(LibertyProviderQueryset)
85 81

  
86 82
class LibertySessionQuerySet(SessionLinkedQuerySet):
87 83
    def to_session_dump(self):
......
93 89
                'name_id_sp_name_qualifier')
94 90
        return lasso_helper.build_session_dump(sessions)
95 91

  
96
LibertySessionManager = managers.PassThroughManager \
97
        .for_queryset_class(LibertySessionQuerySet)
92
LibertySessionManager = models.Manager.from_queryset(LibertySessionQuerySet)
98 93

  
99 94
class GetByLibertyProviderManager(models.Manager):
100 95
    def get_by_natural_key(self, slug):
src/authentic2_idp_cas/managers.py
1
import datetime
2 1
import urlparse
3 2
from datetime import timedelta
4 3

  
4
from django.db import models
5 5
from django.db.models import query
6 6
from django.utils.timezone import now
7 7

  
8
from model_utils import managers
9

  
10 8

  
11 9
class TicketQuerySet(query.QuerySet):
12 10
    def clean_expired(self):
......
37 35
        return matches[0][1]
38 36

  
39 37

  
40
ServiceManager = managers.PassThroughManager.for_queryset_class(ServiceQuerySet)
38
ServiceManager = models.Manager.from_queryset(ServiceQuerySet)
41 39

  
42
TicketManager = managers.PassThroughManager.for_queryset_class(TicketQuerySet)
40
TicketManager = models.Manager.from_queryset(TicketQuerySet)
tests/test_all.py
103 103
                    'multiple': False,
104 104
                    'user_visible': False,
105 105
                    'required': False,
106
                    'disabled': False,
106 107
                }
107 108
            },
108 109
            {
tests/test_api.py
201 201
                        'username': 'foobar'})
202 202
        resp = app.post_json('/api/users/', payload, status=status)
203 203
        assert resp.json['uuid'] == '1234567890'
204
        assert 'title' in resp.json
205
        at.disabled = True
206
        at.save()
207
        resp = app.get('/api/users/1234567890/')
208
        assert 'title' not in resp.json
204 209

  
205 210

  
206 211
def test_api_users_create_send_mail(app, settings, superuser):
tests/test_profile.py
70 70
    assert attribute.get_value(simple_user) == '0123456789'
71 71

  
72 72
    resp = app.get(url, status=200)
73
    assert 'phone' in resp
73 74
    assert 'readonly' in resp.form['edit-profile-phone'].attrs
75

  
76
    attribute.disabled = True
77
    attribute.save()
78
    resp = app.get(url, status=200)
79
    assert 'phone' not in resp
80
    assert attribute.get_value(simple_user) == '0123456789'
74
-