Skip to content

Commit

Permalink
Base custom User model (#972)
Browse files Browse the repository at this point in the history
* Add a custom User model to replace the default one

* SQL update the migrations table to fake-apply the custom User initial migration

* Remove useless STATICFILES settings

* Update settings with the Django Admin seed env vars
  • Loading branch information
danniel authored Apr 2, 2024
1 parent 2eb8d3f commit 2670eaf
Show file tree
Hide file tree
Showing 10 changed files with 124 additions and 6 deletions.
15 changes: 9 additions & 6 deletions backend/seismic_site/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
HERE_MAPS_API_KEY=(str, ""),
DATA_UPLOAD_MAX_NUMBER_FIELDS=(int, 1000),
BACKGROUND_WORKERS_COUNT=(int, 1),
DJANGO_ADMIN_EMAIL=(str, ""),
DJANGO_ADMIN_PASSWORD=(str, ""),
# email settings
EMAIL_SEND_METHOD=(str, "async"),
EMAIL_BACKEND=(str, "django.core.mail.backends.console.EmailBackend"),
Expand Down Expand Up @@ -149,6 +151,7 @@
"utils",
"buildings",
"static_custom",
"users",
# api documentation
"drf_spectacular",
]
Expand Down Expand Up @@ -224,6 +227,11 @@
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"


AUTH_USER_MODEL = "users.User"
DJANGO_ADMIN_EMAIL = env.str("DJANGO_ADMIN_EMAIL")
DJANGO_ADMIN_PASSWORD = env.str("DJANGO_ADMIN_PASSWORD")


# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators

Expand Down Expand Up @@ -305,12 +313,7 @@
STATIC_ROOT = os.path.abspath(os.path.join(BASE_DIR, "static"))
MEDIA_ROOT = os.path.abspath(os.path.join(BASE_DIR, "media"))

DEV_DEPENDECIES_LOCATION = "bower_components"

STATICFILES_DIRS = [
os.path.abspath(os.path.join(DEV_DEPENDECIES_LOCATION)),
os.path.abspath(os.path.join("static_extras")),
]
STATICFILES_DIRS = []

default_storage_options = {}

Expand Down
Empty file added backend/users/__init__.py
Empty file.
1 change: 1 addition & 0 deletions backend/users/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Register your models here.
6 changes: 6 additions & 0 deletions backend/users/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class UsersConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "users"
93 changes: 93 additions & 0 deletions backend/users/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Generated by Django 4.2.11 on 2024-04-02 05:23

import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone


class Migration(migrations.Migration):

initial = True

dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
]

operations = [
migrations.CreateModel(
name="User",
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("password", models.CharField(max_length=128, verbose_name="password")),
("last_login", models.DateTimeField(blank=True, null=True, verbose_name="last login")),
(
"is_superuser",
models.BooleanField(
default=False,
help_text="Designates that this user has all permissions without explicitly assigning them.",
verbose_name="superuser status",
),
),
(
"username",
models.CharField(
error_messages={"unique": "A user with that username already exists."},
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
max_length=150,
unique=True,
validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
verbose_name="username",
),
),
("first_name", models.CharField(blank=True, max_length=150, verbose_name="first name")),
("last_name", models.CharField(blank=True, max_length=150, verbose_name="last name")),
("email", models.EmailField(blank=True, max_length=254, verbose_name="email address")),
(
"is_staff",
models.BooleanField(
default=False,
help_text="Designates whether the user can log into this admin site.",
verbose_name="staff status",
),
),
(
"is_active",
models.BooleanField(
default=True,
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
verbose_name="active",
),
),
("date_joined", models.DateTimeField(default=django.utils.timezone.now, verbose_name="date joined")),
(
"groups",
models.ManyToManyField(
blank=True,
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
related_name="user_set",
related_query_name="user",
to="auth.group",
verbose_name="groups",
),
),
(
"user_permissions",
models.ManyToManyField(
blank=True,
help_text="Specific permissions for this user.",
related_name="user_set",
related_query_name="user",
to="auth.permission",
verbose_name="user permissions",
),
),
],
options={
"db_table": "auth_user",
},
managers=[
("objects", django.contrib.auth.models.UserManager()),
],
),
]
Empty file.
6 changes: 6 additions & 0 deletions backend/users/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
class Meta:
db_table = "auth_user" # TODO: This will be changed back after the data migration
1 change: 1 addition & 0 deletions backend/users/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your tests here.
1 change: 1 addition & 0 deletions backend/users/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Create your views here.
7 changes: 7 additions & 0 deletions docker/s6-rc.d/init/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ python3 manage.py check

# Run the database migrations
if is_enabled "${RUN_MIGRATIONS:-False}"; then

# Fix the User model
echo "Fixing the User model"
echo "INSERT INTO django_migrations (app, name, applied) SELECT 'users', '0001_initial', CURRENT_TIMESTAMP WHERE NOT EXISTS (SELECT app FROM django_migrations WHERE app='users' AND name='0001_initial');" | python3 manage.py dbshell
echo "UPDATE django_content_type SET app_label = 'users' WHERE app_label = 'auth' and model = 'user';" | python manage.py dbshell

# Run the actual migrations
echo "Migrating database"
python3 manage.py migrate --run-syncdb
python3 manage.py createcachetable
Expand Down

0 comments on commit 2670eaf

Please sign in to comment.