Projet

Général

Profil

0001-misc-remove-unicode-prefixed-strings-53714.patch

Benjamin Dauvergne, 04 mai 2021 11:33

Télécharger (72,7 ko)

Voir les différences:

Subject: [PATCH 1/2] misc: remove unicode prefixed strings (#53714)

 doc/advanced.rst                              |   2 +-
 doc/conf.py                                   |  12 +-
 src/authentic2/a2_rbac/models.py              |   2 +-
 src/authentic2/api_views.py                   |   2 +-
 src/authentic2/attribute_kinds.py             |   4 +-
 .../attributes_ng/sources/django_user.py      |  20 +--
 .../attributes_ng/sources/service_roles.py    |   2 +-
 src/authentic2/backends/ldap_backend.py       |  20 +--
 src/authentic2/backends/models_backend.py     |   2 +-
 src/authentic2/data_transfer.py               |   2 +-
 src/authentic2/decorators.py                  |   2 +-
 .../disco_service/disco_responder.py          |   2 +-
 src/authentic2/exponential_retry_timeout.py   |   2 +-
 src/authentic2/forms/fields.py                |   2 +-
 src/authentic2/forms/widgets.py               |   8 +-
 src/authentic2/idp/saml/saml2_endpoints.py    |  14 +-
 src/authentic2/manager/forms.py               |   2 +-
 src/authentic2/manager/resources.py           |   2 +-
 src/authentic2/manager/user_views.py          |   4 +-
 src/authentic2/manager/utils.py               |   2 +-
 src/authentic2/manager/views.py               |   2 +-
 src/authentic2/manager/widgets.py             |   2 +-
 src/authentic2/models.py                      |   2 +-
 src/authentic2/saml/admin.py                  |   4 +-
 src/authentic2/saml/models.py                 |   2 +-
 src/authentic2/utils/__init__.py              |   6 +-
 src/authentic2/views.py                       |   2 +-
 src/authentic2_idp_cas/models.py              |   4 +-
 src/authentic2_idp_oidc/utils.py              |   2 +-
 src/django_rbac/models.py                     |   4 +-
 tests/test_a2_rbac.py                         |  14 +-
 tests/test_attribute_kinds.py                 |   8 +-
 tests/test_auth_oidc.py                       |   8 +-
 tests/test_commands.py                        |   2 +-
 tests/test_crypto.py                          |   6 +-
 tests/test_customfields.py                    |   2 +-
 tests/test_data_transfer.py                   |   8 +-
 tests/test_ldap.py                            | 146 +++++++++---------
 tests/test_login.py                           |  18 +--
 tests/test_manager.py                         |  18 +--
 tests/test_registration.py                    |  20 +--
 tests/test_user_manager.py                    |  32 ++--
 tests/utils.py                                |   2 +-
 43 files changed, 211 insertions(+), 211 deletions(-)
doc/advanced.rst
80 80

  
81 81
::
82 82

  
83
        u'auth.user': {
83
        'auth.user': {
84 84
            'meta': {'object_name': 'User',
85 85

  
86 86
must be rewritten like that:::
doc/conf.py
48 48
master_doc = 'index'
49 49

  
50 50
# General information about the project.
51
project = u'Authentic 2'
52
copyright = u'2012, 2011, 2010, Entr\'ouvert'
51
project = 'Authentic 2'
52
copyright = '2012, 2011, 2010, Entr\'ouvert'
53 53

  
54 54
# The version info for the project you're documenting, acts as replacement for
55 55
# |version| and |release|, also used in various other places throughout the
......
189 189
# Grouping the document tree into LaTeX files. List of tuples
190 190
# (source start file, target name, title, author, documentclass [howto/manual]).
191 191
latex_documents = [
192
    ('index', 'Authentic2.tex', u'Authentic2 Documentation', u'Entr\'ouvert', 'manual'),
192
    ('index', 'Authentic2.tex', 'Authentic2 Documentation', 'Entr\'ouvert', 'manual'),
193 193
]
194 194

  
195 195
# The name of an image file (relative to this directory) to place at the top of
......
217 217

  
218 218
# One entry per manual page. List of tuples
219 219
# (source start file, name, description, authors, manual section).
220
man_pages = [('index', 'authentic2', u'Authentic2 Documentation', [u'Mikaël Ates'], 1)]
220
man_pages = [('index', 'authentic2', 'Authentic2 Documentation', [u'Mikaël Ates'], 1)]
221 221

  
222 222
# If true, show URL addresses after external links.
223 223
# man_show_urls = False
......
232 232
    (
233 233
        'index',
234 234
        'Authentic2',
235
        u'Authentic2 Documentation',
236
        u'Mikaël Ates',
235
        'Authentic2 Documentation',
236
        'Mikaël Ates',
237 237
        'Authentic2',
238 238
        'One line description of project.',
239 239
        'Miscellaneous',
src/authentic2/a2_rbac/models.py
394 394
        verbose_name_plural = _('role parenting relations')
395 395

  
396 396
    def __str__(self):
397
        return u'{0} {1}> {2}'.format(self.parent.name, '-' if self.direct else '~', self.child.name)
397
        return '{0} {1}> {2}'.format(self.parent.name, '-' if self.direct else '~', self.child.name)
398 398

  
399 399

  
400 400
class RoleAttribute(models.Model):
src/authentic2/api_views.py
446 446
                )
447 447
            except smtplib.SMTPException as e:
448 448
                logging.getLogger(__name__).error(
449
                    u'registration mail could not be sent to user %s ' 'created through API: %s', instance, e
449
                    'registration mail could not be sent to user %s ' 'created through API: %s', instance, e
450 450
                )
451 451
        return instance
452 452

  
src/authentic2/attribute_kinds.py
224 224

  
225 225
def profile_image_html_value(attribute, value):
226 226
    if value:
227
        fragment = u'<a href="%s"><img class="%s" src="%s"/></a>' % (value.url, attribute.name, value.url)
227
        fragment = '<a href="%s"><img class="%s" src="%s"/></a>' % (value.url, attribute.name, value.url)
228 228
        return html.mark_safe(fragment)
229 229
    return ''
230 230

  
......
349 349

  
350 350

  
351 351
def only_digits(value):
352
    return u''.join(x for x in value if x in string.digits)
352
    return ''.join(x for x in value if x in string.digits)
353 353

  
354 354

  
355 355
def validate_lun(value):
src/authentic2/attributes_ng/sources/django_user.py
38 38
        if field.name == 'ou':
39 39
            continue
40 40
        name = 'django_user_' + str(field.name)
41
        description = field.verbose_name + u' (%s)' % name
41
        description = field.verbose_name + ' (%s)' % name
42 42
        yield name, description
43 43

  
44
    yield 'django_user_ou_uuid', _('OU UUIDs') + u' (django_user_ou_uuid)'
45
    yield 'django_user_ou_slug', _('OU slug') + u' (django_user_ou_slug)'
46
    yield 'django_user_ou_name', _('OU name') + u' (django_user_ou_name)'
44
    yield 'django_user_ou_uuid', _('OU UUIDs') + ' (django_user_ou_uuid)'
45
    yield 'django_user_ou_slug', _('OU slug') + ' (django_user_ou_slug)'
46
    yield 'django_user_ou_name', _('OU name') + ' (django_user_ou_name)'
47 47

  
48 48
    for attribute in Attribute.objects.all():
49 49
        name = 'django_user_' + str(attribute.name)
50
        description = attribute.label + u' (%s)' % name
50
        description = attribute.label + ' (%s)' % name
51 51
        yield name, description
52 52
    group_label = User._meta.get_field('groups').verbose_name
53
    yield 'django_user_groups', group_label + u' (django_user_groups)'
54
    yield 'django_user_group_names', group_label + u' (django_user_group_names)'
55
    yield 'django_user_domain', _('User domain') + u' (django_user_domain)'
56
    yield 'django_user_identifier', _('User identifier') + u' (django_user_identifier)'
57
    yield 'django_user_full_name', _('Full name') + u' (django_user_full_name)'
53
    yield 'django_user_groups', group_label + ' (django_user_groups)'
54
    yield 'django_user_group_names', group_label + ' (django_user_group_names)'
55
    yield 'django_user_domain', _('User domain') + ' (django_user_domain)'
56
    yield 'django_user_identifier', _('User identifier') + ' (django_user_identifier)'
57
    yield 'django_user_full_name', _('Full name') + ' (django_user_full_name)'
58 58
    yield 'a2_role_slugs', _('Role slugs')
59 59
    yield 'a2_role_names', _('Role names')
60 60
    yield 'a2_role_uuids', _('Role UUIDs')
src/authentic2/attributes_ng/sources/service_roles.py
40 40
            names.append(service_role_attribute.name)
41 41
    names.sort()
42 42
    for name in names:
43
        yield (name, u'%s (%s)' % (name, _('role attribute')))
43
        yield (name, '%s (%s)' % (name, _('role attribute')))
44 44

  
45 45

  
46 46
def get_dependencies(instance, ctx):
src/authentic2/backends/ldap_backend.py
886 886
            if ldap_attribute in attributes:
887 887
                value = attributes[ldap_attribute][0]
888 888
            else:
889
                value = u''
889
                value = ''
890 890
            if getattr(user, legacy_attribute) != value:
891 891
                setattr(user, legacy_attribute, value)
892 892
                user._changed = True
......
1175 1175
        attribute_mappings = map_text(block['attribute_mappings'])
1176 1176
        mandatory_attributes_values = map_text(block['mandatory_attributes_values'])
1177 1177
        try:
1178
            results = conn.search_s(dn, ldap.SCOPE_BASE, u'(objectclass=*)', attributes)
1178
            results = conn.search_s(dn, ldap.SCOPE_BASE, '(objectclass=*)', attributes)
1179 1179
        except ldap.LDAPError as e:
1180 1180
            log.error('unable to retrieve attributes of dn %r: %r', dn, e)
1181 1181
            return None
......
1258 1258
                    item_value = {}
1259 1259
                    for dn, attrs in results:
1260 1260
                        log.debug(
1261
                            u'Object retrieved for extra attr %s with item %s : %s %s'
1261
                            'Object retrieved for extra attr %s with item %s : %s %s'
1262 1262
                            % (extra_attribute_name, item, dn, attrs)
1263 1263
                        )
1264 1264
                        for key in ldap_attributes_mapping:
......
1306 1306
            else:
1307 1307
                decoded.append((attribute, force_text(value)))
1308 1308
        filters = [filter_format(u'(%s=%s)', (a, b)) for a, b in decoded]
1309
        return u'(&{0})'.format(''.join(filters))
1309
        return '(&{0})'.format(''.join(filters))
1310 1310

  
1311 1311
    def build_external_id(self, external_id_tuple, attributes):
1312 1312
        """Build the exernal id for the user, use attribute that eventually
......
1525 1525
        else:
1526 1526
            modlist = []
1527 1527
            if block['active_directory']:
1528
                key = u'unicodePwd'
1528
                key = 'unicodePwd'
1529 1529
                value = cls.ad_encoding(new_password)
1530 1530
                if old_password:
1531 1531
                    modlist = [
......
1535 1535
                else:
1536 1536
                    modlist = [(ldap.MOD_REPLACE, key, [value])]
1537 1537
            else:
1538
                key = u'userPassword'
1538
                key = 'userPassword'
1539 1539
                modlist = [(ldap.MOD_REPLACE, key, [new_password])]
1540 1540
            conn.modify_s(dn, modlist)
1541 1541
        log.debug('modified password for dn %r', dn)
......
1644 1644
                conn.simple_bind_s()
1645 1645
            return True, None
1646 1646
        except ldap.INVALID_CREDENTIALS:
1647
            return False, u'invalid credentials'
1647
            return False, 'invalid credentials'
1648 1648
        except ldap.INVALID_DN_SYNTAX:
1649
            return False, u'invalid dn syntax %s' % who
1649
            return False, 'invalid dn syntax %s' % who
1650 1650
        except ldap.CONNECT_ERROR:
1651 1651
            return False, 'connection error'
1652 1652
        except ldap.TIMEOUT:
......
1781 1781
                            results = self.normalize_ldap_results(results)
1782 1782
                            if not results:
1783 1783
                                log.warning(
1784
                                    u'unable to find user %r based on external id %s', user, external_id
1784
                                    'unable to find user %r based on external id %s', user, external_id
1785 1785
                                )
1786 1786
                                continue
1787 1787
                            dn = results[0][0]
1788 1788
                    except ldap.LDAPError as e:
1789 1789
                        log.warning(
1790
                            u'unable to find user %r based on external id %s: %r', user, external_id, e
1790
                            'unable to find user %r based on external id %s: %r', user, external_id, e
1791 1791
                        )
1792 1792
                        continue
1793 1793
                    return self._return_user(dn, None, conn, block)
src/authentic2/backends/models_backend.py
30 30

  
31 31
def upn(username, realm):
32 32
    '''Build an UPN from a username and a realm'''
33
    return u'{0}@{1}'.format(username, realm)
33
    return '{0}@{1}'.format(username, realm)
34 34

  
35 35

  
36 36
PROXY_USER_MODEL = None
src/authentic2/data_transfer.py
61 61
                for message in error_list(messages):
62 62
                    errorlist.append(
63 63
                        format_lazy(
64
                            u'{}="{}": {}', obj.__class__._meta.get_field(key).verbose_name, value, message
64
                            '{}="{}": {}', obj.__class__._meta.get_field(key).verbose_name, value, message
65 65
                        )
66 66
                    )
67 67
        raise ValidationError(errorlist)
src/authentic2/decorators.py
200 200
            if kw not in self.kwargs:
201 201
                continue
202 202
            parts.append(u'%s-%s' % (str(kw), str(arg)))
203
        return u'|'.join(parts)
203
        return '|'.join(parts)
204 204

  
205 205

  
206 206
class SimpleDictionnaryCacheMixin(object):
src/authentic2/disco_service/disco_responder.py
41 41

  
42 42
def error_page(request, message, logger):
43 43
    '''Customized disco service error page'''
44
    message = u'disco: ' + message
44
    message = 'disco: ' + message
45 45
    return base_error_page(request, message, logger)
46 46

  
47 47

  
src/authentic2/exponential_retry_timeout.py
44 44
        self.key_prefix = key_prefix
45 45

  
46 46
    def key(self, keys):
47
        key = u'-'.join(str(key) for key in keys)
47
        key = '-'.join(str(key) for key in keys)
48 48
        key = key.encode('utf-8')
49 49
        return '%s%s' % (self.key_prefix or self.KEY_PREFIX, hashlib.md5(key).hexdigest())
50 50

  
src/authentic2/forms/fields.py
54 54
    def __init__(self, *args, **kwargs):
55 55
        kwargs[
56 56
            'help_text'
57
        ] = u'''
57
        ] = '''
58 58
    <span class="a2-password-check-equality-default">%(default)s</span>
59 59
    <span class="a2-password-check-equality-matched">%(match)s</span>
60 60
    <span class="a2-password-check-equality-unmatched">%(nomatch)s</span>
src/authentic2/forms/widgets.py
165 165

  
166 166
        help_text = self.help_text
167 167
        if not help_text:
168
            help_text = u'%s %s' % (_('Format:'), self.options['format'])
168
            help_text = '%s %s' % (_('Format:'), self.options['format'])
169 169

  
170 170
        return mark_safe(
171 171
            self.render_template
......
267 267
        if attrs and app_settings.A2_PASSWORD_POLICY_SHOW_LAST_CHAR:
268 268
            _id = attrs.get('id')
269 269
            if _id:
270
                output += u'''\n<script>a2_password_show_last_char(%s);</script>''' % json.dumps(_id)
270
                output += '''\n<script>a2_password_show_last_char(%s);</script>''' % json.dumps(_id)
271 271
        return output
272 272

  
273 273

  
......
280 280
        if attrs:
281 281
            _id = attrs.get('id')
282 282
            if _id:
283
                output += u'''\n<script>a2_password_validate(%s);</script>''' % json.dumps(_id)
283
                output += '''\n<script>a2_password_validate(%s);</script>''' % json.dumps(_id)
284 284
        return output
285 285

  
286 286

  
......
296 296
            _id = attrs.get('id')
297 297
            if _id and _id.endswith('2'):
298 298
                other_id = _id[:-1] + '1'
299
                output += u'''\n<script>a2_password_check_equality(%s, %s)</script>''' % (
299
                output += '''\n<script>a2_password_check_equality(%s, %s)</script>''' % (
300 300
                    json.dumps(other_id),
301 301
                    json.dumps(_id),
302 302
                )
src/authentic2/idp/saml/saml2_endpoints.py
486 486
    kwargs['entity_id'] = login.remoteProviderId
487 487
    kwargs['user'] = request.user
488 488
    logger.debug(
489
        u'sending nameID %(name_id_format)r: %(name_id_content)r to '
490
        u'%(entity_id)s for user %(user)s' % kwargs
489
        'sending nameID %(name_id_format)r: %(name_id_content)r to '
490
        '%(entity_id)s for user %(user)s' % kwargs
491 491
    )
492 492
    register_new_saml2_session(request, login)
493 493
    add_attributes(request, entity_id, assertion, provider, nid_format)
......
1231 1231
    """Build a session dump from a list of pairs
1232 1232
    (provider_id,assertion_content)"""
1233 1233
    session = [
1234
        u'<Session xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"'
1235
        u' xmlns="http://www.entrouvert.org/namespaces/lasso/0.0" Version="2">',
1234
        '<Session xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"'
1235
        ' xmlns="http://www.entrouvert.org/namespaces/lasso/0.0" Version="2">',
1236 1236
    ]
1237 1237
    for liberty_session in liberty_sessions:
1238 1238
        session.append(
1239
            u'<NidAndSessionIndex ProviderID="{0.provider_id}" '
1240
            u'AssertionID="xxx" '
1241
            u'SessionIndex="{0.session_index}">'.format(liberty_session)
1239
            '<NidAndSessionIndex ProviderID="{0.provider_id}" '
1240
            'AssertionID="xxx" '
1241
            'SessionIndex="{0.session_index}">'.format(liberty_session)
1242 1242
        )
1243 1243
        session.append(u'<saml:NameID Format="{0.name_id_format}" '.format(liberty_session))
1244 1244
        if liberty_session.name_id_qualifier:
src/authentic2/manager/forms.py
347 347
                )
348 348
            except smtplib.SMTPException as e:
349 349
                logger.error(
350
                    u'registration mail could not be sent to user %s created through ' u'manager: %s', user, e
350
                    'registration mail could not be sent to user %s created through ' 'manager: %s', user, e
351 351
                )
352 352
        return user
353 353

  
src/authentic2/manager/resources.py
29 29
        raise NotImplementedError
30 30

  
31 31
    def render(self, value, object):
32
        return u', '.join(str(v) for v in value.all())
32
        return ', '.join(str(v) for v in value.all())
33 33

  
34 34

  
35 35
class UserResource(ModelResource):
src/authentic2/manager/user_views.py
712 712

  
713 713
    def get_search_form_kwargs(self):
714 714
        kwargs = super(UserRolesView, self).get_search_form_kwargs()
715
        kwargs['all_ou_label'] = u''
715
        kwargs['all_ou_label'] = ''
716 716
        kwargs['user'] = self.object
717 717
        kwargs['role_members_from_ou'] = app_settings.ROLE_MEMBERS_FROM_OU
718 718
        kwargs['show_all_ou'] = app_settings.SHOW_ALL_OU
......
818 818
        )
819 819
        ctx['help_columns'] = help_columns
820 820
        example_data = (
821
            u','.join(column['name'] + (' key' if column['key'] else '') for column in help_columns) + '\n'
821
            ','.join(column['name'] + (' key' if column['key'] else '') for column in help_columns) + '\n'
822 822
        )
823 823
        example_url = 'data:text/csv;base64,%s' % base64.b64encode(example_data.encode('utf-8')).decode(
824 824
            'ascii'
src/authentic2/manager/utils.py
35 35
        if labels:
36 36
            labels.append(u' - ')
37 37
        labels.append(user.username)
38
    return u''.join(labels)
38
    return ''.join(labels)
39 39

  
40 40

  
41 41
@GlobalCache(timeout=10)
src/authentic2/manager/views.py
400 400
    def get_instance_name(self):
401 401
        if hasattr(self, 'get_object'):
402 402
            return str(self.get_object())
403
        return u''
403
        return ''
404 404

  
405 405
    def get_context_data(self, **kwargs):
406 406
        ctx = super(ModelNameMixin, self).get_context_data(**kwargs)
src/authentic2/manager/widgets.py
103 103
    def label_from_instance(self, obj):
104 104
        label = str(obj)
105 105
        if obj.ou and utils.get_ou_count() > 1:
106
            label = u'{ou} - {obj}'.format(ou=obj.ou, obj=obj)
106
            label = '{ou} - {obj}'.format(ou=obj.ou, obj=obj)
107 107
        return label
108 108

  
109 109

  
src/authentic2/models.py
56 56
    updated = models.DateTimeField(auto_now=True, verbose_name=_('last update date'))
57 57

  
58 58
    def __str__(self):
59
        return u'{0} is {1} on {2}'.format(self.user, self.external_id, self.source)
59
        return '{0} is {1} on {2}'.format(self.user, self.external_id, self.source)
60 60

  
61 61
    def __repr__(self):
62 62
        return (
src/authentic2/saml/admin.py
102 102
        try:
103 103
            provider.update_metadata()
104 104
        except ValidationError as e:
105
            params = {'name': provider, 'error_msg': u', '.join(e.messages)}
105
            params = {'name': provider, 'error_msg': ', '.join(e.messages)}
106 106
            messages.error(request, _('Updating SAML provider %(name)s failed: ' '%(error_msg)s') % params)
107 107
        else:
108 108
            count += 1
......
188 188
    def format(self, obj):
189 189
        name_id_format = obj.name_id_format
190 190
        if name_id_format > 15:
191
            name_id_format = u'\u2026' + name_id_format[-12:]
191
            name_id_format = '\u2026' + name_id_format[-12:]
192 192
        return name_id_format
193 193

  
194 194

  
src/authentic2/saml/models.py
357 357
            yield (name, name_format, friendly_name, value)
358 358

  
359 359
    def __str__(self):
360
        return u'%s %s %s' % (self.name, self.name_format_uri(), self.attribute_name)
360
        return '%s %s %s' % (self.name, self.name_format_uri(), self.attribute_name)
361 361

  
362 362
    def natural_key(self):
363 363
        if not hasattr(self.provider, 'natural_key'):
src/authentic2/utils/__init__.py
341 341
            else:
342 342
                url_params.appendlist(key, value)
343 343
    if url_params:
344
        url += u'?%s' % url_params.urlencode(safe='/')
344
        url += '?%s' % url_params.urlencode(safe='/')
345 345
    if fragment:
346
        url += u'#%s' % fragment
346
        url += '#%s' % fragment
347 347
    if absolute:
348 348
        if request:
349 349
            url = request.build_absolute_uri(url)
......
946 946
        **kwargs,
947 947
    )
948 948
    logger.info(
949
        u'password reset request for user %s, email sent to %s ' 'with token %s', user, user.email, token.uuid
949
        'password reset request for user %s, email sent to %s ' 'with token %s', user, user.email, token.uuid
950 950
    )
951 951
    journal.record('user.password.reset.request', email=user.email, user=user)
952 952

  
src/authentic2/views.py
626 626
        if not self.check_referrer():
627 627
            return HttpResponseForbidden()
628 628
        callback = request.GET.get('callback')
629
        content = u'{0}({1})'.format(callback, int(request.user.is_authenticated))
629
        content = '{0}({1})'.format(callback, int(request.user.is_authenticated))
630 630
        return HttpResponse(content, content_type='application/json')
631 631

  
632 632

  
src/authentic2_idp_cas/models.py
51 51
                url_validator(url)
52 52
            except ValidationError:
53 53
                raise ValidationError(_('%s is an invalid URL') % url)
54
        self.urls = u' '.join(urls)
54
        self.urls = ' '.join(urls)
55 55

  
56 56
    def match_service(self, service_url):
57 57
        '''Verify that this service match an URL'''
......
86 86
    enabled = models.BooleanField(verbose_name=_('enabled'), default=True)
87 87

  
88 88
    def __str__(self):
89
        return u'%s <- %s' % (self.slug, self.attribute_name)
89
        return '%s <- %s' % (self.slug, self.attribute_name)
90 90

  
91 91
    class Meta:
92 92
        verbose_name = _('CAS attribute')
src/authentic2_idp_oidc/utils.py
102 102

  
103 103
def clean_words(data):
104 104
    '''Clean and order a list of words'''
105
    return u' '.join(sorted(x.strip() for x in data.split()))
105
    return ' '.join(sorted(x.strip() for x in data.split()))
106 106

  
107 107

  
108 108
def url_domain(url):
src/django_rbac/models.py
159 159
        ct_ct = ContentType.objects.get_for_model(ContentType)
160 160
        if ct == ct_ct:
161 161
            target = ContentType.objects.get_for_id(self.target_id)
162
            s = u'{0} / {1}'.format(self.operation, target)
162
            s = '{0} / {1}'.format(self.operation, target)
163 163
        else:
164
            s = u'{0} / {1} / {2}'.format(self.operation, ct, self.target)
164
            s = '{0} / {1} / {2}'.format(self.operation, ct, self.target)
165 165
        if self.ou:
166 166
            s += _(u' (scope "{0}")').format(self.ou)
167 167
        return s
tests/test_a2_rbac.py
92 92
    coin = Role.objects.create(name='Coin', slug='coin')
93 93
    coin.get_admin_role()
94 94
    for role in Role.objects.filter(admin_scope_ct__isnull=False):
95
        assert role.slug.startswith('_a2'), u'role %s slug must start with _a2: %s' % (role.name, role.slug)
95
        assert role.slug.startswith('_a2'), 'role %s slug must start with _a2: %s' % (role.name, role.slug)
96 96

  
97 97

  
98 98
def test_admin_roles_update_slug(db):
......
262 262
    assert permissions[0] == {
263 263
        'operation': {'slug': 'add'},
264 264
        'ou': {'uuid': ou.uuid, 'slug': ou.slug, 'name': ou.name},
265
        'target_ct': {'app_label': u'contenttypes', 'model': u'contenttype'},
266
        'target': {'model': u'libertyprovider', 'app_label': u'saml'},
265
        'target_ct': {'app_label': 'contenttypes', 'model': 'contenttype'},
266
        'target': {'model': 'libertyprovider', 'app_label': 'saml'},
267 267
    }
268 268
    assert permissions[1] == {
269 269
        'operation': {'slug': 'add'},
270 270
        'ou': None,
271
        'target_ct': {'app_label': u'a2_rbac', 'model': u'role'},
271
        'target_ct': {'app_label': 'a2_rbac', 'model': 'role'},
272 272
        'target': {
273
            'slug': u'other-role-slug',
273
            'slug': 'other-role-slug',
274 274
            'service': None,
275 275
            'uuid': other_role.uuid,
276
            'ou': {'slug': u'some-ou', 'uuid': some_ou.uuid, 'name': u'some ou'},
277
            'name': u'other role name',
276
            'ou': {'slug': 'some-ou', 'uuid': some_ou.uuid, 'name': 'some ou'},
277
            'name': 'other role name',
278 278
        },
279 279
    }
280 280

  
tests/test_attribute_kinds.py
53 53
    assert response.pyquery.find('.form-field-error #id_nom_de_naissance')
54 54

  
55 55
    form = response.form
56
    form.set('nom_de_naissance', u'Noël')
56
    form.set('nom_de_naissance', 'Noël')
57 57
    form.set('password1', '12345abcdA')
58 58
    form.set('password2', '12345abcdA')
59 59
    response = form.submit().follow()
60
    assert qs.get().attributes.nom_de_naissance == u'Noël'
60
    assert qs.get().attributes.nom_de_naissance == 'Noël'
61 61
    qs.delete()
62 62

  
63 63
    app.authorization = ('Basic', (admin.username, admin.username))
......
71 71
    payload = {
72 72
        'first_name': 'John',
73 73
        'last_name': 'Doe',
74
        'nom_de_naissance': u'Noël',
74
        'nom_de_naissance': 'Noël',
75 75
    }
76 76
    app.post_json('/api/users/', params=payload, status=201)
77
    assert qs.get().attributes.nom_de_naissance == u'Noël'
77
    assert qs.get().attributes.nom_de_naissance == 'Noël'
78 78
    qs.delete()
79 79

  
80 80

  
tests/test_auth_oidc.py
616 616
    user = User.objects.get()
617 617
    # verify user was not modified
618 618
    assert user.username == 'user'
619
    assert user.first_name == u'Jôhn'
620
    assert user.last_name == u'Dôe'
619
    assert user.first_name == 'Jôhn'
620
    assert user.last_name == 'Dôe'
621 621
    assert user.email == 'user@example.net'
622
    assert user.attributes.first_name == u'Jôhn'
623
    assert user.attributes.last_name == u'Dôe'
622
    assert user.attributes.first_name == 'Jôhn'
623
    assert user.attributes.last_name == 'Dôe'
624 624

  
625 625
    response = app.get(reverse('account_management'))
626 626
    with utils.check_log(caplog, 'revoked token from OIDC'):
tests/test_commands.py
160 160

  
161 161

  
162 162
@pytest.mark.parametrize(
163
    "deletion_delay,formatted", [(730, u'2\xa0years'), (500, u'1\xa0year'), (65, u'2\xa0months')]
163
    "deletion_delay,formatted", [(730, '2\xa0years'), (500, '1\xa0year'), (65, '2\xa0months')]
164 164
)
165 165
def test_clean_unused_account_human_duration_format(simple_user, mailoutbox, deletion_delay, formatted):
166 166
    simple_user.ou.clean_unused_accounts_alert = deletion_delay - 1
tests/test_crypto.py
67 67

  
68 68

  
69 69
def test_hmac_url():
70
    key = u'é'
70
    key = 'é'
71 71
    url = 'https://example.invalid/'
72 72
    assert crypto.check_hmac_url(key, url, crypto.hmac_url(key, url))
73
    key = u'é'
74
    url = u'https://example.invalid/\u0000'
73
    key = 'é'
74
    url = 'https://example.invalid/\u0000'
75 75
    assert crypto.check_hmac_url(key, url, crypto.hmac_url(key, url))
tests/test_customfields.py
28 28
@pytest.mark.parametrize(
29 29
    'value',
30 30
    [
31
        u'\xe9',
31
        '\xe9',
32 32
        b'\xc3\xa9',
33 33
        {1: 1, 2: 4, 3: 6, 4: 8, 5: 10},
34 34
        'Hello World',
tests/test_data_transfer.py
325 325
    other_role_dict['permisison'] = {
326 326
        "operation": {"slug": "admin"},
327 327
        "ou": {"slug": "default", "name": "Collectivit\u00e9 par d\u00e9faut"},
328
        'target_ct': {'app_label': u'a2_rbac', 'model': u'role'},
328
        'target_ct': {'app_label': 'a2_rbac', 'model': 'role'},
329 329
        "target": {
330 330
            "slug": "role-deux",
331 331
            "ou": {"slug": "default", "name": "Collectivit\u00e9 par d\u00e9faut"},
......
344 344
        {
345 345
            'operation': {'slug': 'add'},
346 346
            'ou': None,
347
            'target_ct': {'app_label': u'a2_rbac', 'model': u'role'},
348
            'target': {"slug": u'other-role-slug', 'ou': {'slug': 'some-ou'}, 'service': None},
347
            'target_ct': {'app_label': 'a2_rbac', 'model': 'role'},
348
            'target': {"slug": 'other-role-slug', 'ou': {'slug': 'some-ou'}, 'service': None},
349 349
        }
350 350
    ]
351 351

  
......
382 382
        {
383 383
            "operation": {"slug": "admin"},
384 384
            "ou": {"slug": "perm-ou", "name": "perm-ou"},
385
            'target_ct': {'app_label': u'a2_rbac', 'model': u'role'},
385
            'target_ct': {'app_label': 'a2_rbac', 'model': 'role'},
386 386
            "target": {
387 387
                "slug": "perm-role",
388 388
                "ou": {"slug": "perm-ou", "name": "perm ou"},
tests/test_ldap.py
45 45

  
46 46
pytestmark = pytest.mark.skipif(not has_slapd(), reason='slapd is not installed')
47 47

  
48
USERNAME = u'etienne.michu'
48
USERNAME = 'etienne.michu'
49 49
UID = 'etienne.michu'
50 50
CN = 'Étienne Michu'
51 51
DN = 'cn=%s,o=ôrga' % escape_dn_chars(CN)
52 52
PASS = 'passé'
53
UPASS = u'passé'
53
UPASS = 'passé'
54 54
EMAIL = 'etienne.michu@example.net'
55 55
CARLICENSE = '123445ABC'
56 56

  
......
209 209
    settings.LDAP_AUTH_SETTINGS = [
210 210
        {
211 211
            'url': [slapd.ldap_url],
212
            'basedn': u'o=ôrga',
212
            'basedn': 'o=ôrga',
213 213
            'use_tls': False,
214 214
            'attributes': ['jpegPhoto'],
215 215
        }
......
221 221
    assert force_bytes('Étienne Michu') in result.content
222 222
    assert User.objects.count() == 1
223 223
    user = User.objects.get()
224
    assert user.username == u'%s@ldap' % USERNAME
225
    assert user.first_name == u'Étienne'
224
    assert user.username == '%s@ldap' % USERNAME
225
    assert user.first_name == 'Étienne'
226 226
    assert user.last_name == 'Michu'
227 227
    assert user.is_active is True
228 228
    assert user.is_superuser is False
......
237 237
    settings.LDAP_AUTH_SETTINGS = [
238 238
        {
239 239
            'url': [slapd.ldap_url],
240
            'basedn': u'o=ôrga',
240
            'basedn': 'o=ôrga',
241 241
            'use_tls': False,
242 242
        }
243 243
    ]
......
266 266
            'url': [slapd.ldap_url],
267 267
            'binddn': force_text(DN),
268 268
            'bindpw': PASS,
269
            'basedn': u'o=ôrga',
269
            'basedn': 'o=ôrga',
270 270
            'use_tls': False,
271 271
        }
272 272
    ]
......
277 277
    assert force_bytes('Étienne Michu') in result.content
278 278
    assert User.objects.count() == 1
279 279
    user = User.objects.get()
280
    assert user.username == u'%s@ldap' % USERNAME
281
    assert user.first_name == u'Étienne'
280
    assert user.username == '%s@ldap' % USERNAME
281
    assert user.first_name == 'Étienne'
282 282
    assert user.last_name == 'Michu'
283 283
    assert user.is_active is True
284 284
    assert user.is_superuser is False
......
293 293
    settings.LDAP_AUTH_SETTINGS = [
294 294
        {
295 295
            'url': [slapd.ldap_url],
296
            'basedn': u'o=ôrga',
296
            'basedn': 'o=ôrga',
297 297
            'use_tls': False,
298 298
            'is_superuser': True,
299 299
            'is_staff': True,
......
307 307
    settings.LDAP_AUTH_SETTINGS = [
308 308
        {
309 309
            'url': [slapd.ldap_url],
310
            'basedn': u'o=ôrga',
310
            'basedn': 'o=ôrga',
311 311
            'use_tls': False,
312 312
            'is_superuser': True,
313 313
            'is_staff': True,
......
329 329
    settings.LDAP_AUTH_SETTINGS = [
330 330
        {
331 331
            'url': [slapd.ldap_url],
332
            'basedn': u'o=ôrga',
332
            'basedn': 'o=ôrga',
333 333
            'use_tls': False,
334 334
            'keep_password_in_session': True,
335 335
        }
......
341 341
    assert force_bytes('Étienne Michu') in result.content
342 342
    assert User.objects.count() == 1
343 343
    user = User.objects.get()
344
    assert user.username == u'%s@ldap' % USERNAME
345
    assert user.first_name == u'Étienne'
344
    assert user.username == '%s@ldap' % USERNAME
345
    assert user.first_name == 'Étienne'
346 346
    assert user.last_name == 'Michu'
347 347
    assert user.ou == get_default_ou()
348 348
    assert not user.check_password(PASS)
......
357 357
    settings.LDAP_AUTH_SETTINGS = [
358 358
        {
359 359
            'url': [slapd.ldap_url],
360
            'basedn': u'o=ôrga',
360
            'basedn': 'o=ôrga',
361 361
            'use_tls': False,
362 362
            'keep_password': True,
363 363
        }
......
381 381
    settings.LDAP_AUTH_SETTINGS = [
382 382
        {
383 383
            'url': [slapd.ldap_url],
384
            'basedn': u'o=ôrga',
384
            'basedn': 'o=ôrga',
385 385
            'use_tls': False,
386 386
            'ou_slug': 'test',
387 387
        }
......
393 393
    assert force_bytes('Étienne Michu') in result.content
394 394
    assert User.objects.count() == 1
395 395
    user = User.objects.get()
396
    assert user.username == u'%s@ldap' % USERNAME
397
    assert user.first_name == u'Étienne'
398
    assert user.last_name == u'Michu'
396
    assert user.username == '%s@ldap' % USERNAME
397
    assert user.first_name == 'Étienne'
398
    assert user.last_name == 'Michu'
399 399
    assert user.ou == ou
400 400
    assert not user.check_password(PASS)
401 401

  
......
404 404
    settings.LDAP_AUTH_SETTINGS = [
405 405
        {
406 406
            'url': [slapd.ldap_url],
407
            'basedn': u'o=ôrga',
407
            'basedn': 'o=ôrga',
408 408
            'use_tls': False,
409 409
            'ou_slug': 'test',
410 410
        }
......
437 437
    settings.LDAP_AUTH_SETTINGS = [
438 438
        {
439 439
            'url': [slapd.ldap_url],
440
            'basedn': u'o=ôrga',
440
            'basedn': 'o=ôrga',
441 441
            'use_tls': False,
442 442
            'create_group': True,
443 443
            'group_mapping': [
......
450 450
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
451 451
    )
452 452
    assert Group.objects.filter(name='Group1').count() == 1
453
    assert response.context['user'].username == u'%s@ldap' % USERNAME
453
    assert response.context['user'].username == '%s@ldap' % USERNAME
454 454
    assert response.context['user'].groups.count() == 1
455 455

  
456 456

  
......
460 460
    settings.LDAP_AUTH_SETTINGS = [
461 461
        {
462 462
            'url': [slapd.ldap_url],
463
            'basedn': u'o=ôrga',
463
            'basedn': 'o=ôrga',
464 464
            'use_tls': False,
465 465
            'create_group': True,
466 466
            'group_mapping': [
......
474 474
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
475 475
    )
476 476
    assert Group.objects.filter(name='Group2').count() == 1
477
    assert response.context['user'].username == u'%s@ldap' % USERNAME
477
    assert response.context['user'].username == '%s@ldap' % USERNAME
478 478
    assert response.context['user'].groups.count() == 1
479 479

  
480 480

  
......
485 485
    settings.LDAP_AUTH_SETTINGS = [
486 486
        {
487 487
            'url': [slapd.ldap_url],
488
            'basedn': u'o=ôrga',
488
            'basedn': 'o=ôrga',
489 489
            'use_tls': False,
490 490
            # memberOf is not defined on OpenLDAP so we use street for storing DN like
491 491
            # memberOf values
......
499 499
    response = client.post(
500 500
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
501 501
    )
502
    assert response.context['user'].username == u'%s@ldap' % USERNAME
502
    assert response.context['user'].username == '%s@ldap' % USERNAME
503 503
    assert set(response.context['user'].roles.values_list('name', flat=True)) == set(['Role1', 'Role2'])
504 504

  
505 505

  
......
508 508
    settings.LDAP_AUTH_SETTINGS = [
509 509
        {
510 510
            'url': [slapd.ldap_url],
511
            'basedn': u'o=ôrga',
511
            'basedn': 'o=ôrga',
512 512
            'use_tls': False,
513 513
            'group_to_role_mapping': [
514 514
                ['cn=group2,o=ôrga', ['Role2']],
......
519 519
    response = client.post(
520 520
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
521 521
    )
522
    assert response.context['user'].username == u'%s@ldap' % USERNAME
522
    assert response.context['user'].username == '%s@ldap' % USERNAME
523 523
    assert response.context['user'].roles.count() == 1
524 524

  
525 525

  
......
528 528
    settings.LDAP_AUTH_SETTINGS = [
529 529
        {
530 530
            'url': [slapd.ldap_url],
531
            'basedn': u'o=ôrga',
531
            'basedn': 'o=ôrga',
532 532
            'use_tls': False,
533 533
            'group_to_role_mapping': [
534 534
                ['cn=group1,o=ôrga', ['Role3']],
......
580 580
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
581 581
    )
582 582
    assert Group.objects.count() == 0
583
    assert response.context['user'].username == u'%s@ldap' % USERNAME
583
    assert response.context['user'].username == '%s@ldap' % USERNAME
584 584
    assert response.context['user'].is_superuser
585 585
    assert not response.context['user'].is_staff
586 586

  
......
591 591
    settings.LDAP_AUTH_SETTINGS = [
592 592
        {
593 593
            'url': [slapd.ldap_url],
594
            'basedn': u'o=ôrga',
594
            'basedn': 'o=ôrga',
595 595
            'use_tls': False,
596 596
            'groupstaff': [u'cn=group1,o=ôrga'],
597 597
        }
......
600 600
        '/login/', {'login-password-submit': '1', 'username': 'etienne.michu', 'password': PASS}, follow=True
601 601
    )
602 602
    assert Group.objects.count() == 0
603
    assert response.context['user'].username == u'%s@ldap' % USERNAME
603
    assert response.context['user'].username == '%s@ldap' % USERNAME
604 604
    assert response.context['user'].is_staff
605 605
    assert not response.context['user'].is_superuser
606 606

  
......
614 614
    settings.LDAP_AUTH_SETTINGS = [
615 615
        {
616 616
            'url': [slapd.ldap_url],
617
            'basedn': u'o=ôrga',
617
            'basedn': 'o=ôrga',
618 618
            'use_tls': False,
619 619
            'create_group': True,
620 620
            'group_mapping': [
......
699 699
    settings.LDAP_AUTH_SETTINGS = [
700 700
        {
701 701
            'url': [slapd.ldap_url],
702
            'basedn': u'o=ôrga',
702
            'basedn': 'o=ôrga',
703 703
            'use_tls': False,
704 704
            'create_group': True,
705 705
            'group_mapping': [
......
718 718
    settings.LDAP_AUTH_SETTINGS = [
719 719
        {
720 720
            'url': [slapd.ldap_url],
721
            'basedn': u'o=ôrga',
721
            'basedn': 'o=ôrga',
722 722
            'use_tls': False,
723 723
            'create_group': True,
724 724
            'group_mapping': [
......
741 741
    settings.LDAP_AUTH_SETTINGS = [
742 742
        {
743 743
            'url': [slapd.ldap_url],
744
            'basedn': u'o=ôrga',
744
            'basedn': 'o=ôrga',
745 745
            'use_tls': False,
746 746
            'create_group': True,
747 747
            'group_mapping': [
......
766 766
    settings.LDAP_AUTH_SETTINGS = [
767 767
        {
768 768
            'url': [slapd.ldap_url],
769
            'basedn': u'o=ôrga',
769
            'basedn': 'o=ôrga',
770 770
            'use_tls': False,
771 771
            'create_group': True,
772 772
            'group_mapping': [
......
792 792
    settings.LDAP_AUTH_SETTINGS = [
793 793
        {
794 794
            'url': [slapd.ldap_url],
795
            'basedn': u'o=ôrga',
795
            'basedn': 'o=ôrga',
796 796
            'use_tls': False,
797 797
            'create_group': True,
798 798
            'group_mapping': [
......
825 825
    settings.LDAP_AUTH_SETTINGS = [
826 826
        {
827 827
            'url': [slapd.ldap_url],
828
            'basedn': u'o=ôrga',
828
            'basedn': 'o=ôrga',
829 829
            'use_tls': False,
830 830
            'create_group': True,
831 831
            'group_mapping': [
......
892 892
            'url': [slapd.ldap_url],
893 893
            'binddn': force_text(slapd.root_bind_dn),
894 894
            'bindpw': force_text(slapd.root_bind_password),
895
            'basedn': u'o=ôrga',
895
            'basedn': 'o=ôrga',
896 896
            'use_tls': False,
897 897
            'attributes': ['uid', 'carLicense'],
898 898
        }
......
911 911
            'url': [slapd.ldap_url],
912 912
            'binddn': force_text(slapd.root_bind_dn),
913 913
            'bindpw': force_text(slapd.root_bind_password),
914
            'basedn': u'o=ôrga',
914
            'basedn': 'o=ôrga',
915 915
            'use_tls': False,
916 916
            'user_can_change_password': False,
917 917
        }
......
942 942
    settings.LDAP_AUTH_SETTINGS = [
943 943
        {
944 944
            'url': [tls_slapd.ldap_url],
945
            'basedn': u'o=ôrga',
945
            'basedn': 'o=ôrga',
946 946
            'use_tls': False,
947 947
        }
948 948
    ]
......
957 957
    settings.LDAP_AUTH_SETTINGS = [
958 958
        {
959 959
            'url': [tls_slapd.ldap_url],
960
            'basedn': u'o=ôrga',
960
            'basedn': 'o=ôrga',
961 961
            'use_tls': True,
962 962
            'cacertfile': cert_file,
963 963
        }
......
973 973
    settings.LDAP_AUTH_SETTINGS = [
974 974
        {
975 975
            'url': [tls_slapd.ldap_url],
976
            'basedn': u'o=ôrga',
976
            'basedn': 'o=ôrga',
977 977
            'use_tls': True,
978 978
            'cacertfile': cert_file,
979 979
            'certfile': cert_file,
......
992 992
    settings.LDAP_AUTH_SETTINGS = [
993 993
        {
994 994
            'url': [slapd.ldap_url],
995
            'basedn': u'o=ôrga',
995
            'basedn': 'o=ôrga',
996 996
            'use_tls': False,
997 997
            'user_attributes': [
998 998
                {
......
1018 1018
    client.post(
1019 1019
        '/login/', {'login-password-submit': '1', 'username': USERNAME, 'password': PASS}, follow=True
1020 1020
    )
1021
    username = u'%s@ldap' % USERNAME
1021
    username = '%s@ldap' % USERNAME
1022 1022
    user = User.objects.get(username=username)
1023
    assert user.attributes.locality == u'Paris'
1023
    assert user.attributes.locality == 'Paris'
1024 1024
    client.session.flush()
1025 1025
    for i in range(5):
1026 1026
        client.post(
1027 1027
            '/login/',
1028 1028
            {
1029 1029
                'login-password-submit': '1',
1030
                'username': u'mïchu%s' % i,
1030
                'username': 'mïchu%s' % i,
1031 1031
                'password': PASS,
1032 1032
            },
1033 1033
            follow=True,
1034 1034
        )
1035
        username = u'mïchu%s@ldap' % i
1035
        username = 'mïchu%s@ldap' % i
1036 1036
        user = User.objects.get(username=username)
1037
        assert user.attributes.locality == u'locality%s' % i
1037
        assert user.attributes.locality == 'locality%s' % i
1038 1038
        client.session.flush()
1039 1039

  
1040 1040

  
......
1042 1042
    settings.LDAP_AUTH_SETTINGS = [
1043 1043
        {
1044 1044
            'url': [slapd.ldap_url],
1045
            'basedn': u'o=ôrga',
1045
            'basedn': 'o=ôrga',
1046 1046
            'use_tls': False,
1047 1047
        }
1048 1048
    ]
......
1059 1059
    settings.LDAP_AUTH_SETTINGS = [
1060 1060
        {
1061 1061
            'url': [slapd_ppolicy.ldap_url],
1062
            'basedn': u'o=ôrga',
1062
            'basedn': 'o=ôrga',
1063 1063
            'use_tls': False,
1064 1064
        }
1065 1065
    ]
......
1148 1148
    settings.LDAP_AUTH_SETTINGS = [
1149 1149
        {
1150 1150
            'url': [slapd_ppolicy.ldap_url],
1151
            'basedn': u'o=ôrga',
1151
            'basedn': 'o=ôrga',
1152 1152
            'use_tls': False,
1153 1153
        }
1154 1154
    ]
......
1167 1167
    settings.LDAP_AUTH_SETTINGS = [
1168 1168
        {
1169 1169
            'url': [slapd_ppolicy.ldap_url],
1170
            'basedn': u'o=ôrga',
1170
            'basedn': 'o=ôrga',
1171 1171
            'use_tls': False,
1172 1172
            'use_controls': False,
1173 1173
        }
......
1184 1184
    settings.LDAP_AUTH_SETTINGS = [
1185 1185
        {
1186 1186
            'url': [slapd_ppolicy.ldap_url],
1187
            'basedn': u'o=ôrga',
1187
            'basedn': 'o=ôrga',
1188 1188
            'use_tls': False,
1189 1189
        }
1190 1190
    ]
......
1222 1222

  
1223 1223
    user = authenticate(username=USERNAME, password=UPASS)
1224 1224
    assert user.check_password(UPASS)
1225
    password = u'ogutOmyetew4'
1225
    password = 'ogutOmyetew4'
1226 1226
    user.set_password(password)
1227 1227

  
1228 1228
    time.sleep(pwdMaxAge * 3)
......
1240 1240
    settings.LDAP_AUTH_SETTINGS = [
1241 1241
        {
1242 1242
            'url': [slapd_ppolicy.ldap_url],
1243
            'basedn': u'o=ôrga',
1243
            'basedn': 'o=ôrga',
1244 1244
            'use_tls': False,
1245 1245
        }
1246 1246
    ]
......
1277 1277

  
1278 1278
    user = authenticate(username=USERNAME, password=UPASS)
1279 1279
    assert user.check_password(UPASS)
1280
    password = u'ogutOmyetew4'
1280
    password = 'ogutOmyetew4'
1281 1281
    user.set_password(password)
1282 1282

  
1283 1283
    time.sleep(2)
......
1293 1293
            'url': [slapd_ppolicy.ldap_url],
1294 1294
            'binddn': force_text(slapd_ppolicy.root_bind_dn),
1295 1295
            'bindpw': force_text(slapd_ppolicy.root_bind_password),
1296
            'basedn': u'o=ôrga',
1296
            'basedn': 'o=ôrga',
1297 1297
            'use_tls': False,
1298 1298
            'attributes': ['carLicense'],
1299 1299
        }
......
1344 1344
    settings.LDAP_AUTH_SETTINGS = [
1345 1345
        {
1346 1346
            'url': [slapd_ppolicy.ldap_url],
1347
            'basedn': u'o=ôrga',
1347
            'basedn': 'o=ôrga',
1348 1348
            'use_tls': False,
1349 1349
        }
1350 1350
    ]
......
1386 1386
            'url': [slapd.ldap_url],
1387 1387
            'binddn': force_text(DN),
1388 1388
            'bindpw': PASS,
1389
            'basedn': u'o=ôrga',
1389
            'basedn': 'o=ôrga',
1390 1390
            'ou_slug': ou1.slug,
1391 1391
            'use_tls': False,
1392 1392
        }
......
1417 1417
            'url': [slapd.ldap_url],
1418 1418
            'binddn': force_text(DN),
1419 1419
            'bindpw': PASS,
1420
            'basedn': u'o=ôrga',
1420
            'basedn': 'o=ôrga',
1421 1421
            'use_tls': False,
1422 1422
        }
1423 1423
    ]
......
1445 1445
    settings.LDAP_AUTH_SETTINGS = [
1446 1446
        {
1447 1447
            'url': [slapd.ldap_url],
1448
            'basedn': u'o=ôrga',
1448
            'basedn': 'o=ôrga',
1449 1449
            'use_tls': False,
1450 1450
            'user_attributes': [
1451 1451
                {
......
1473 1473
    management.call_command('sync-ldap-users', verbosity=2)
1474 1474
    assert len(capsys.readouterr().out.splitlines()) == 7
1475 1475
    assert User.objects.count() == 6
1476
    assert all(user.first_name == u'Étienne' for user in User.objects.all())
1477
    assert all(user.attributes.first_name == u'Étienne' for user in User.objects.all())
1478
    assert all(user.last_name == u'Michu' for user in User.objects.all())
1479
    assert all(user.attributes.last_name == u'Michu' for user in User.objects.all())
1476
    assert all(user.first_name == 'Étienne' for user in User.objects.all())
1477
    assert all(user.attributes.first_name == 'Étienne' for user in User.objects.all())
1478
    assert all(user.last_name == 'Michu' for user in User.objects.all())
1479
    assert all(user.attributes.last_name == 'Michu' for user in User.objects.all())
1480 1480
    assert all(
1481
        user.attributes.locality == u'Paris' or user.attributes.locality.startswith('locality')
1481
        user.attributes.locality == 'Paris' or user.attributes.locality.startswith('locality')
1482 1482
        for user in User.objects.all()
1483 1483
    )
1484 1484
    assert all(
......
1497 1497
    settings.LDAP_AUTH_SETTINGS = [
1498 1498
        {
1499 1499
            'url': [slapd.ldap_url],
1500
            'basedn': u'o=ôrga',
1500
            'basedn': 'o=ôrga',
1501 1501
            'use_tls': False,
1502 1502
            'user_filter': '(&(objectClass=user)(sAMAccountName=*)',  # wrong
1503 1503
        }
......
1512 1512
    settings.LDAP_AUTH_SETTINGS = [
1513 1513
        {
1514 1514
            'url': [slapd.ldap_url],
1515
            'basedn': u'o=ôrga',
1515
            'basedn': 'o=ôrga',
1516 1516
            'use_tls': False,
1517 1517
            'attributes': ['uid', 'carLicense'],
1518 1518
        }
......
1530 1530
    # simulate LDAP down
1531 1531
    slapd.stop()
1532 1532
    assert user.get_attributes(object(), {}) == {
1533
        'dn': u'cn=étienne michu,o=\xf4rga',
1533
        'dn': 'cn=étienne michu,o=\xf4rga',
1534 1534
        'givenname': [u'\xc9tienne'],
1535 1535
        'mail': [u'etienne.michu@example.net'],
1536 1536
        'sn': [u'Michu'],
......
1546 1546
    ldif = [(ldap.MOD_REPLACE, 'sn', [b'Micho'])]
1547 1547
    conn.modify_s(DN, ldif)
1548 1548
    assert user.get_attributes(object(), {}) == {
1549
        'dn': u'cn=étienne michu,o=\xf4rga',
1549
        'dn': 'cn=étienne michu,o=\xf4rga',
1550 1550
        'givenname': [u'\xc9tienne'],
1551 1551
        'mail': [u'etienne.michu@example.net'],
1552 1552
        'sn': [u'Micho'],
......
1661 1661
            'url': [slapd.ldap_url],
1662 1662
            'binddn': force_text(slapd.root_bind_dn),
1663 1663
            'bindpw': force_text(slapd.root_bind_password),
1664
            'basedn': u'o=ôrga',
1664
            'basedn': 'o=ôrga',
1665 1665
            'use_tls': False,
1666 1666
            'attributes': ['carLicense'],
1667 1667
        }
tests/test_login.py
199 199
    assert response.pyquery.find('select#id_ou')
200 200
    assert len(response.pyquery.find('select#id_ou optgroup')) == 0
201 201
    assert set([elt.text for elt in response.pyquery.find('select#id_ou option')]) == set(
202
        [u'Default organizational unit', u'OU1', u'OU2', u'---------']
202
        [u'Default organizational unit', 'OU1', 'OU2', '---------']
203 203
    )
204 204
    # Check selector is required
205 205
    response.form.set('username', simple_user.username)
......
226 226
    assert response.pyquery.find('select#id_ou')
227 227
    assert len(response.pyquery.find('select#id_ou optgroup')) == 2
228 228
    assert set([elt.text for elt in response.pyquery.find('select#id_ou option')]) == set(
229
        [u'Default organizational unit', u'OU1', u'OU2', u'---------']
229
        [u'Default organizational unit', 'OU1', 'OU2', '---------']
230 230
    )
231
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'Default organizational unit'
231
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'Default organizational unit'
232 232

  
233 233
    # Create a service
234 234
    service = models.Service.objects.create(name='Service', slug='service', ou=ou1)
235 235
    response = app.get('/login/')
236
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'Default organizational unit'
236
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'Default organizational unit'
237 237

  
238 238
    # service is specified but not access-control is defined, default for user is selected
239 239
    response = app.get('/login/?service=service')
240
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'Default organizational unit'
240
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'Default organizational unit'
241 241

  
242 242
    # service is specified, access control is defined but role is empty, default for user is selected
243 243
    service.authorized_roles.through.objects.create(service=service, role=role_ou1)
244 244
    response = app.get('/login/?service=service')
245
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'Default organizational unit'
245
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'Default organizational unit'
246 246

  
247 247
    # user is added to role_ou1, default for user is still selected
248 248
    user_ou1.roles.add(role_ou1)
249 249
    response = app.get('/login/?service=service')
250
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'Default organizational unit'
250
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'Default organizational unit'
251 251

  
252 252
    # Clear cookies, OU1 is selected
253 253
    app.cookiejar.clear()
254 254
    response = app.get('/login/?service=service')
255
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'OU1'
255
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'OU1'
256 256

  
257 257
    # if we change the user's ou, then default selected OU changes
258 258
    user_ou1.ou = ou2
259 259
    user_ou1.save()
260 260
    response = app.get('/login/?service=service')
261
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == u'OU2'
261
    assert response.pyquery.find('select#id_ou option[selected]')[0].text == 'OU2'
262 262

  
263 263

  
264 264
def test_login_test_cookie(app, simple_user):
tests/test_manager.py
373 373
        assert 'search-ou' not in form.fields
374 374
        q = response.pyquery.remove_namespaces()
375 375
        assert len(q('table tbody tr')) == 1
376
        assert q('table tbody tr').text() == u'simple role'
376
        assert q('table tbody tr').text() == 'simple role'
377 377
        assert q('table tbody tr').attr('data-url') == '/manage/roles/%s/' % simple_role.pk
378 378

  
379 379
        form.set('search-internals', True)
......
392 392
        assert 'search-ou' not in response.form.fields
393 393
        q = response.pyquery.remove_namespaces()
394 394
        assert len(q('table tbody tr')) == 1
395
        assert q('table tbody td.name').text() == u'simple role'
395
        assert q('table tbody td.name').text() == 'simple role'
396 396

  
397 397
        response.form.set('search-internals', True)
398 398
        response = response.form.submit()
399 399
        q = response.pyquery.remove_namespaces()
400 400
        assert len(q('table tbody tr')) == 6
401 401
        for elt in q('table tbody td.name a'):
402
            assert 'Manager' in elt.text or elt.text == u'simple role'
402
            assert 'Manager' in elt.text or elt.text == 'simple role'
403 403

  
404 404
    test_user_listing(admin)
405 405
    app.session.flush()
......
436 436
            assert not checked or key == str(get_default_ou().pk)
437 437
        q = response.pyquery.remove_namespaces()
438 438
        assert len(q('table tbody tr')) == 1
439
        assert q('table tbody tr').text() == u'simple role'
439
        assert q('table tbody tr').text() == 'simple role'
440 440

  
441 441
        response.form.set('search-ou', 'all')
442 442
        response = response.form.submit()
......
478 478
        q = response.pyquery.remove_namespaces()
479 479
        assert len(q('table tbody tr')) == 2
480 480
        names = [elt.text for elt in q('table tbody td.name a')]
481
        assert set(names) == {u'simple role', u'role_ou1'}
481
        assert set(names) == {u'simple role', 'role_ou1'}
482 482

  
483 483
        response.form.set('search-ou', 'all')
484 484
        response.form.set('search-internals', True)
......
490 490
                'OU1' in elt.text
491 491
                or 'Default' in elt.text
492 492
                or 'Manager' in elt.text
493
                or elt.text == u'simple role'
494
                or elt.text == u'role_ou1'
493
                or elt.text == 'simple role'
494
                or elt.text == 'role_ou1'
495 495
            )
496 496

  
497 497
        response.form.set('search-ou', 'none')
......
854 854
    assert len(response.json['results']) == 3
855 855
    response = app.get(url, params={'field_id': field_id, 'term': 'Admin cass'})
856 856
    assert len(response.json['results']) == 1
857
    assert response.json['results'][0]['text'] == u'Cassis - Administrateur'
857
    assert response.json['results'][0]['text'] == 'Cassis - Administrateur'
858 858
    response = app.get(url, params={'field_id': field_id, 'term': force_str('Admin édou')})
859 859
    assert len(response.json['results']) == 1
860
    assert response.json['results'][0]['text'] == u'La Bédoule - Administrateur'
860
    assert response.json['results'][0]['text'] == 'La Bédoule - Administrateur'
861 861

  
862 862

  
863 863
def test_roles_for_change_widget(admin, app, db):
tests/test_registration.py
366 366

  
367 367
    response = app.get(reverse('account_management'))
368 368

  
369
    assert u'Nom' in response.text
370
    assert u'Prénom' not in response.text
369
    assert 'Nom' in response.text
370
    assert 'Prénom' not in response.text
371 371

  
372 372
    response = app.get(reverse('profile_edit'))
373 373
    assert 'profession' in response.form.fields
......
382 382

  
383 383
    response = response.follow()
384 384

  
385
    assert u'Nom' in response.text
386
    assert u'Doe' in response.text
387
    assert u'Profession' not in response.text
388
    assert u'pompier' not in response.text
389
    assert u'Prénom' not in response.text
390
    assert u'John' not in response.text
385
    assert 'Nom' in response.text
386
    assert 'Doe' in response.text
387
    assert 'Profession' not in response.text
388
    assert 'pompier' not in response.text
389
    assert 'Prénom' not in response.text
390
    assert 'John' not in response.text
391 391

  
392 392

  
393 393
def test_registration_email_blacklist(app, settings, db):
......
414 414
    response = app.post(reverse('registration_register'), params={'email': 'fred@0d..be'}, status=200)
415 415
    assert 'Enter a valid email address.' in response.context['form'].errors['email']
416 416

  
417
    response = app.post(reverse('registration_register'), params={'email': u'ééééé'}, status=200)
417
    response = app.post(reverse('registration_register'), params={'email': 'ééééé'}, status=200)
418 418
    assert 'Enter a valid email address.' in response.context['form'].errors['email']
419 419

  
420
    response = app.post(reverse('registration_register'), params={'email': u''}, status=200)
420
    response = app.post(reverse('registration_register'), params={'email': ''}, status=200)
421 421
    assert 'This field is required.' in response.context['form'].errors['email']
422 422

  
423 423

  
tests/test_user_manager.py
744 744
def test_manager_create_user_next(superuser_or_admin, app, ou1):
745 745
    login(app, superuser_or_admin, '/manage/')
746 746

  
747
    next_url = u'/example.nowhere.null/'
748
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
747
    next_url = '/example.nowhere.null/'
748
    url = '/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
749 749
    response = app.get(url)
750 750

  
751 751
    # cancel is not handled through form submission, it's a link
......
753 753
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == '../..'
754 754
    assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url
755 755

  
756
    next_url = u'/example.nowhere.null/$UUID/'
757
    cancel_url = u'/example.nowhere.cancel/'
758
    url = u'/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url)
756
    next_url = '/example.nowhere.null/$UUID/'
757
    cancel_url = '/example.nowhere.cancel/'
758
    url = '/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url)
759 759
    response = app.get(url)
760 760

  
761 761
    assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == cancel_url
......
809 809

  
810 810

  
811 811
def test_manager_create_user_next_form_error(superuser_or_admin, app, ou1):
812
    next_url = u'/example.nowhere.null/'
813
    url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
812
    next_url = '/example.nowhere.null/'
813
    url = '/manage/users/%s/add/?next=%s' % (ou1.pk, next_url)
814 814
    login(app, superuser_or_admin, '/manage/')
815 815
    response = app.get(url)
816 816
    form = response.form
......
822 822

  
823 823

  
824 824
def test_manager_add_user_querystring(superuser_or_admin, app, ou1):
825
    querystring = u'stay_here=true'
826
    url = u'/manage/users/add/?%s' % querystring
825
    querystring = 'stay_here=true'
826
    url = '/manage/users/add/?%s' % querystring
827 827
    login(app, superuser_or_admin, '/manage/')
828 828
    response = app.get(url)
829 829

  
......
831 831

  
832 832

  
833 833
def test_manager_edit_user_next(app, simple_user, superuser_or_admin):
834
    next_url = u'/example.nowhere.null/'
835
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
834
    next_url = '/example.nowhere.null/'
835
    url = '/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
836 836
    login(app, superuser_or_admin, '/manage/')
837 837
    response = app.get(url)
838 838

  
......
845 845

  
846 846

  
847 847
def test_manager_edit_user_next_form_error(superuser_or_admin, app, ou1, simple_user):
848
    next_url = u'/example.nowhere.null/'
849
    url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
848
    next_url = '/example.nowhere.null/'
849
    url = '/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url)
850 850
    login(app, superuser_or_admin, '/manage/')
851 851
    response = app.get(url)
852 852
    form = response.form
......
873 873
    some_ou = OU.objects.create(name=u'Some Ou', show_username=False)
874 874

  
875 875
    login(app, admin, '/manage/')
876
    url = u'/manage/users/%s/add/' % some_ou.pk
876
    url = '/manage/users/%s/add/' % some_ou.pk
877 877
    response = app.get(url)
878 878
    q = response.pyquery.remove_namespaces()
879 879
    assert len(q('p[id="id_username_p"]')) == 0
......
893 893
    simple_user.email_verified = True
894 894
    simple_user.save()
895 895

  
896
    url = u'/manage/users/%s/edit/' % simple_user.pk
896
    url = '/manage/users/%s/edit/' % simple_user.pk
897 897
    login(app, superuser_or_admin, '/manage/')
898 898

  
899 899
    user = User.objects.get(id=simple_user.id)
......
909 909

  
910 910

  
911 911
def test_manager_edit_user_address_autocomplete(app, simple_user, superuser_or_admin):
912
    url = u'/manage/users/%s/edit/' % simple_user.pk
912
    url = '/manage/users/%s/edit/' % simple_user.pk
913 913
    login(app, superuser_or_admin, '/manage/')
914 914

  
915 915
    Attribute.objects.create(
tests/utils.py
261 261
def text_content(node):
262 262
    """Extract text content from node and all its children. Equivalent to
263 263
    xmlNodeGetContent from libxml."""
264
    return u''.join(node.itertext()) if node is not None else ''
264
    return ''.join(node.itertext()) if node is not None else ''
265 265

  
266 266

  
267 267
def assert_event(event_type_name, user=None, session=None, service=None, **data):
268
-