Projet

Général

Profil

0002-api-apply-users-query-to-all-text-fields-8851.patch

Frédéric Péters, 03 novembre 2015 14:00

Télécharger (2,87 ko)

Voir les différences:

Subject: [PATCH 2/2] api: apply users query to all text fields (#8851)

 tests/test_api.py | 12 ++++++++++++
 wcs/api.py        |  8 +++++++-
 wcs/users.py      |  9 +++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)
tests/test_api.py
649 649

  
650 650
    resp = get_app(pub).get(sign_uri('/api/users/?q=foobar'))
651 651
    assert len(resp.json['data']) == 0
652

  
653
    from wcs.admin.settings import UserFieldsFormDef
654
    formdef = UserFieldsFormDef(pub)
655
    formdef.fields.append(fields.StringField(id='3', label='test', type='string'))
656
    formdef.store()
657

  
658
    local_user.form_data = {'3': 'HELLO'}
659
    local_user.set_attributes_from_formdata(local_user.form_data)
660
    local_user.store()
661

  
662
    resp = get_app(pub).get(sign_uri('/api/users/?q=HELLO'))
663
    assert len(resp.json['data']) == 1
wcs/api.py
496 496
        criterias = []
497 497
        query = get_request().form.get('q')
498 498
        if query:
499
            criterias.append(st.Or([st.ILike('name', query), st.ILike('email', query)]))
499
            from admin.settings import UserFieldsFormDef
500
            formdef = UserFieldsFormDef()
501
            criteria_fields = [st.ILike('name', query), st.ILike('email', query)]
502
            for field in formdef.fields:
503
                if field.type in ('string', 'text', 'email'):
504
                    criteria_fields.append(st.ILike('f%s' % field.id, query))
505
            criterias.append(st.Or(criteria_fields))
500 506

  
501 507
        def as_dict(user):
502 508
            user_info = user.get_substitution_variables(prefix='')
wcs/users.py
180 180
        return variables
181 181
    get_substitution_variables_list = classmethod(get_substitution_variables_list)
182 182

  
183
    def __getattr__(self, attr):
184
        if attr in self.__dict__:
185
            return self.__dict__[attr]
186
        if attr[0] == 'f' and (self.__dict__['form_data'] and attr[0] == 'f' and
187
                self.__dict__['form_data']):
188
            return self.__dict__['form_data'].get(attr[1:])
189
        return super(User, self).__getattr__(attr)
190

  
191

  
183 192
Substitutions.register('session_user', category=N_('User'), comment=N_('Session User'))
184 193
Substitutions.register('session_user_display_name', category=N_('User'), comment=N_('Session User Display Name'))
185 194
Substitutions.register('session_user_email', category=N_('User'), comment=N_('Session User Email'))
186
-