Skip to content

Commit 7f5ed9a

Browse files
committed
reverts adding middle name to last_name in commit c9ed0e8
The `full_name` is none-the-less passed to `create_user` when the user model manager allows it (ex: djaodjin-signup creates `Contact` models attached to the user).
1 parent c9ed0e8 commit 7f5ed9a

File tree

2 files changed

+73
-47
lines changed

2 files changed

+73
-47
lines changed

saas/api/roles.py

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
import logging
2828

2929
from django.contrib.auth import get_user_model
30+
from django.core.exceptions import FieldDoesNotExist
3031
from django.db import transaction, IntegrityError
3132
from django.db.models import Q
3233
from django.http import Http404
34+
from django.template.defaultfilters import slugify
3335
from rest_framework import serializers, status
3436
from rest_framework.exceptions import PermissionDenied
3537
from rest_framework.generics import (ListAPIView, ListCreateAPIView,
@@ -43,7 +45,7 @@
4345
from ..docs import extend_schema, OpenApiResponse
4446
from ..decorators import _has_valid_access
4547
from ..filters import OrderingFilter, SearchFilter
46-
from ..helpers import full_name_natural_split
48+
from ..helpers import full_name_natural_parts
4749
from ..mixins import (OrganizationMixin, OrganizationCreateMixin,
4850
OrganizationSmartListMixin, RoleDescriptionMixin, RoleMixin,
4951
RoleSmartListMixin, UserMixin)
@@ -70,52 +72,53 @@ def create_user_from_email(email, password=None, **kwargs):
7072
# `signup.models.ActivatedUserManager.create_user_from_email`.
7173
# Its purpose here instead of calling the above is to have
7274
# djaodjin-saas works as a stand-alone project (no dependency on signup).
75+
request = kwargs.pop('request', None)
7376
user = None
7477
user_model = get_user_model()
75-
first_name = kwargs.get('first_name', "")
76-
last_name = kwargs.get('last_name', "")
77-
if not (first_name or last_name):
78-
first_name, last_name = full_name_natural_split(
79-
kwargs.get('full_name', ''))
80-
first_name = _clean_field(
81-
user_model, 'first_name', first_name, prefix='user_')
82-
last_name = _clean_field(
83-
user_model, 'last_name', last_name, prefix='user_')
8478
# The e-mail address was already validated by the Serializer.
8579
err = IntegrityError()
86-
if hasattr(user_model.objects, 'create_user_from_email'):
87-
# Implementation Note:
88-
# calling `signup.models.ActivatedUserManager.create_user_from_email`
89-
# directly bypasses sending a `user_registered` signal.
90-
user = user_model.objects.create_user_from_email(
91-
email, password=password,
92-
first_name=first_name, last_name=last_name)
93-
else:
94-
username = _clean_field(
95-
user_model, 'username', email.split('@')[0], prefix='user_')
96-
#pylint:disable=protected-access
97-
field = user_model._meta.get_field('username')
98-
max_length = field.max_length
99-
trials = 0
100-
username_base = username
101-
while trials < 10:
80+
user_kwargs = {}
81+
user_kwargs.update(kwargs)
82+
username = _clean_field(
83+
user_model, 'username', slugify(email.split('@')[0]), prefix='user_')
84+
if ('first_name' not in user_kwargs or
85+
'last_name' not in user_kwargs):
86+
first_name, _mid, last_name = \
87+
full_name_natural_parts(kwargs.get('full_name'))
88+
if 'first_name' not in user_kwargs:
89+
user_kwargs.update({'first_name': first_name})
90+
if 'last_name' not in user_kwargs:
91+
user_kwargs.update({'last_name': last_name})
92+
if not hasattr(user_model.objects, 'create_user_from_email'):
93+
# When djaodjin-saas is used in conjunction with djaodjin-signup,
94+
# we are able to set a full_name, phone number, etc.
95+
for field_name in kwargs:
10296
try:
103-
user = user_model.objects.create_user(username,
104-
email=email, first_name=first_name, last_name=last_name)
105-
break
106-
except IntegrityError as exp:
107-
err = exp
108-
suffix = '-%s' % generate_random_slug(3)
109-
if len(username_base) + len(suffix) > max_length:
110-
username = '%s%s' % (
111-
username_base[:(max_length - len(suffix))],
112-
suffix)
113-
else:
114-
username = '%s%s' % (username_base, suffix)
115-
trials = trials + 1
97+
_field = user_model._meta.get_field(field_name)
98+
except (FieldDoesNotExist, KeyError):
99+
del user_kwargs[field_name]
100+
#pylint:disable=protected-access
101+
field = user_model._meta.get_field('username')
102+
max_length = field.max_length
103+
trials = 0
104+
username_base = username
105+
while trials < 10:
106+
try:
107+
user = user_model.objects.create_user(username,
108+
email=email, password=password, **user_kwargs)
109+
break
110+
except IntegrityError as exp:
111+
err = exp
112+
suffix = '-%s' % generate_random_slug(3)
113+
if len(username_base) + len(suffix) > max_length:
114+
username = '%s%s' % (
115+
username_base[:(max_length - len(suffix))],
116+
suffix)
117+
else:
118+
username = '%s%s' % (username_base, suffix)
119+
trials = trials + 1
116120
if not user:
117121
raise err
118-
request = kwargs.get('request', None)
119122
invited_by = request.user if request else None
120123
LOGGER.info("'%s %s <%s>' invited by '%s'",
121124
user.first_name, user.last_name, user.email, invited_by,

saas/mixins.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
from django.contrib.auth import REDIRECT_FIELD_NAME, get_user_model
3131
from django.contrib.auth.hashers import UNUSABLE_PASSWORD_PREFIX
32+
from django.core.exceptions import FieldDoesNotExist
3233
from django.db import models, transaction, IntegrityError
3334
from django.http import Http404
3435
from django.template.defaultfilters import slugify
@@ -41,7 +42,7 @@
4142
is_authenticated, reverse, six)
4243
from .decorators import _valid_manager
4344
from .filters import DateRangeFilter, OrderingFilter, SearchFilter
44-
from .helpers import (datetime_or_now, full_name_natural_split,
45+
from .helpers import (datetime_or_now, full_name_natural_parts,
4546
update_context_urls)
4647
from .models import (CartItem, Charge, Coupon, Plan, Price,
4748
RoleDescription, Subscription, Transaction, get_broker, sum_orig_amount)
@@ -515,9 +516,10 @@ class OrganizationCreateMixin(object):
515516

516517
def create_organization(self, validated_data):
517518
organization_model = get_organization_model()
519+
full_name = validated_data.get('full_name')
518520
organization = organization_model(
519521
slug=validated_data.get('slug', None),
520-
full_name=validated_data.get('full_name'),
522+
full_name=full_name,
521523
email=validated_data.get('email'),
522524
default_timezone=validated_data.get(
523525
'default_timezone', settings.TIME_ZONE),
@@ -549,13 +551,34 @@ def create_organization(self, validated_data):
549551
# does not exist so we have a chance to create
550552
# a slug/username.
551553
organization.save()
552-
first_name, last_name = full_name_natural_split(
553-
organization.full_name)
554+
user_kwargs = {}
555+
user_kwargs.update(validated_data)
556+
if 'email' in user_kwargs:
557+
del user_kwargs['email']
558+
if ('first_name' not in user_kwargs or
559+
'last_name' not in user_kwargs):
560+
first_name, _mid, last_name = \
561+
full_name_natural_parts(full_name)
562+
if 'first_name' not in user_kwargs:
563+
user_kwargs.update({'first_name': first_name})
564+
if 'last_name' not in user_kwargs:
565+
user_kwargs.update({'last_name': last_name})
566+
if not hasattr(self.user_model.objects,
567+
'create_user_from_email'):
568+
# When djaodjin-saas is used in conjunction
569+
# with djaodjin-signup, we are able to set
570+
# a full_name, phone number, etc.
571+
for field_name in validated_data:
572+
try:
573+
_field = \
574+
self.user_model._meta.get_field(
575+
field_name)
576+
except (FieldDoesNotExist, KeyError):
577+
del user_kwargs[field_name]
554578
user = self.user_model.objects.create_user(
555-
username=organization.slug,
579+
organization.slug,
556580
email=organization.email,
557-
first_name=first_name,
558-
last_name=last_name)
581+
**user_kwargs)
559582
organization.add_manager(user)
560583
else:
561584
# When `slug` is not present, `save` would try to create

0 commit comments

Comments
 (0)