def cleanup_email_addresses(request, addresses):
    """
    Takes a list of EmailAddress instances and cleans it up, making
    sure only valid ones remain, without multiple primaries etc.

    Order is important: e.g. if multiple primary e-mail addresses
    exist, the first one encountered will be kept as primary.
    """
    from .models import EmailAddress
    adapter = get_adapter(request)
    # Let's group by `email`
    e2a = OrderedDict()  # maps email to EmailAddress
    primary_addresses = []
    verified_addresses = []
    primary_verified_addresses = []
    for address in addresses:
        # Pick up only valid ones...
        email = valid_email_or_none(address.email)
        if not email:
            continue
        # ... and non-conflicting ones...
        if (app_settings.UNIQUE_EMAIL and
                EmailAddress.objects.filter(email__iexact=email).exists()):
            continue
        a = e2a.get(email.lower())
        if a:
            a.primary = a.primary or address.primary
            a.verified = a.verified or address.verified
        else:
            a = address
            a.verified = a.verified or adapter.is_email_verified(request,
                                                                 a.email)
            e2a[email.lower()] = a
        if a.primary:
            primary_addresses.append(a)
            if a.verified:
                primary_verified_addresses.append(a)
        if a.verified:
            verified_addresses.append(a)
    # Now that we got things sorted out, let's assign a primary
    if primary_verified_addresses:
        primary_address = primary_verified_addresses[0]
    elif verified_addresses:
        # Pick any verified as primary
        primary_address = verified_addresses[0]
    elif primary_addresses:
        # Okay, let's pick primary then, even if unverified
        primary_address = primary_addresses[0]
    elif e2a:
        # Pick the first
        primary_address = e2a.keys()[0]
    else:
        # Empty
        primary_address = None
    # There can only be one primary
    for a in e2a.values():
        a.primary = primary_address.email.lower() == a.email.lower()
    return list(e2a.values()), primary_address
def cleanup_email_addresses ( request , addresses ) : from . models import EmailAddress adapter = get_adapter ( request ) e2a = OrderedDict ( ) primary_addresses = [ ] verified_addresses = [ ] primary_verified_addresses = [ ] for address in addresses : email = valid_email_or_none ( address . email ) if not email : continue if ( app_settings . UNIQUE_EMAIL and EmailAddress . objects . filter ( email__iexact = email ) . exists ( ) ) : continue a = e2a . get ( email . lower ( ) ) if a : a . primary = a . primary or address . primary a . verified = a . verified or address . verified else : a = address a . verified = a . verified or adapter . is_email_verified ( request , a . email ) e2a [ email . lower ( ) ] = a if a . primary : primary_addresses . append ( a ) if a . verified : primary_verified_addresses . append ( a ) if a . verified : verified_addresses . append ( a ) if primary_verified_addresses : primary_address = primary_verified_addresses [ 0 ] elif verified_addresses : primary_address = verified_addresses [ 0 ] elif primary_addresses : primary_address = primary_addresses [ 0 ] elif e2a : primary_address = e2a . keys ( ) [ 0 ] else : primary_address = None for a in e2a . values ( ) : a . primary = primary_address . email . lower ( ) == a . email . lower ( ) return list ( e2a . values ( ) ) , primary_address
Takes a list of EmailAddress instances and cleans it up, making
    sure only valid ones remain, without multiple primaries etc.

    Order is important: e.g. if multiple primary e-mail addresses
    exist, the first one encountered will be kept as primary.