|
1 | 1 | import time |
2 | 2 |
|
3 | | -from .models import PortalUser |
| 3 | +from django.contrib.auth.models import User |
| 4 | + |
| 5 | +from .models import PortalUser, generate_username |
4 | 6 | from ..exceptions import LoginToPortalError, LogoutError |
5 | 7 | from ..utils import get_session_id |
6 | 8 |
|
@@ -78,3 +80,41 @@ def logout(client): |
78 | 80 | client.session_id = None |
79 | 81 | else: # Failure . . . |
80 | 82 | raise LogoutError(result=result) |
| 83 | + |
| 84 | + |
| 85 | +def get_user_for_membersuite_entity(membersuite_entity): |
| 86 | + """Returns a User for `membersuite_entity`. |
| 87 | +
|
| 88 | + membersuite_entity is any MemberSuite object that has the fields |
| 89 | + membersuite_id, email_address, first_name, and last_name, e.g., |
| 90 | + PortalUser or Individual. |
| 91 | +
|
| 92 | + """ |
| 93 | + user = None |
| 94 | + user_created = False |
| 95 | + |
| 96 | + # First, try to match on username. |
| 97 | + user_username = generate_username(membersuite_entity) |
| 98 | + try: |
| 99 | + user = User.objects.get(username=user_username) |
| 100 | + except User.DoesNotExist: |
| 101 | + pass |
| 102 | + |
| 103 | + # Next, try to match on email address. |
| 104 | + if not user: |
| 105 | + try: |
| 106 | + user = User.objects.filter( |
| 107 | + email=membersuite_entity.email_address)[0] |
| 108 | + except IndexError: |
| 109 | + pass |
| 110 | + |
| 111 | + # No match? Create one. |
| 112 | + if not user: |
| 113 | + user = User.objects.create( |
| 114 | + username=user_username, |
| 115 | + email=membersuite_entity.email_address, |
| 116 | + first_name=membersuite_entity.first_name, |
| 117 | + last_name=membersuite_entity.last_name) |
| 118 | + user_created = True |
| 119 | + |
| 120 | + return user, user_created |
0 commit comments