Skip to content

Commit

Permalink
Merge branch 'issue/django-setup-configuration-tokens' into issue/dja…
Browse files Browse the repository at this point in the history
…ngo-setup-configuration-mozilla-django-oidc-db
  • Loading branch information
danielmursa-dev committed Dec 11, 2024
2 parents 35d118a + 41818ca commit 30b82a1
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 69 deletions.
Empty file.
18 changes: 18 additions & 0 deletions src/objecttypes/setup_configuration/models/sites.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django.contrib.sites.models import Site

from django_setup_configuration.models import ConfigurationModel
from pydantic import Field


class SiteConfigurationModel(ConfigurationModel):
class Meta:
django_model_refs = {
Site: (
"domain",
"name",
)
}


class SitesConfigurationModel(ConfigurationModel):
items: list[SiteConfigurationModel] = Field()
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from django.contrib.sites.models import Site

from django_setup_configuration.models import ConfigurationModel
from pydantic import Field

Expand All @@ -23,17 +21,3 @@ class Meta:

class TokenAuthGroupConfigurationModel(ConfigurationModel):
items: list[TokenAuthConfigurationModel] = Field()


class SiteConfigurationModel(ConfigurationModel):
class Meta:
django_model_refs = {
Site: (
"domain",
"name",
)
}


class SiteGroupConfigurationModel(ConfigurationModel):
items: list[SiteConfigurationModel] = Field()
Empty file.
60 changes: 60 additions & 0 deletions src/objecttypes/setup_configuration/steps/sites.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import logging

from django.contrib.sites.models import Site
from django.core.exceptions import ValidationError
from django.db import IntegrityError

from django_setup_configuration.configuration import BaseConfigurationStep
from django_setup_configuration.exceptions import ConfigurationRunFailed

from objecttypes.setup_configuration.models.sites import SitesConfigurationModel

logger = logging.getLogger(__name__)


class SitesConfigurationStep(BaseConfigurationStep[SitesConfigurationModel]):
"""
Configure the application site/domain.
"""

namespace = "objecttypes_sites"
enable_setting = "objecttypes_sites_config_enable"

verbose_name = "Configuration to set up Sites for ObjectTypes"
config_model = SitesConfigurationModel

def execute(self, model: SitesConfigurationModel) -> None:
for item in model.items:
logger.info(f"Configuring {item.domain}")

model_kwargs = {
"domain": item.domain,
"name": item.name,
}

instance = Site(**model_kwargs)

try:
instance.full_clean(exclude=("id",), validate_unique=False)
except ValidationError as exception:
exception_message = f"Validation error(s) occured for {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

logger.debug(f"No validation errors found for {item.domain}")

try:
logger.debug(f"Saving {item.domain}")
Site.objects.update_or_create(
domain=item.domain,
defaults={
key: value
for key, value in model_kwargs.items()
if key != "domain"
},
)

except IntegrityError as exception:
exception_message = f"Failed configuring token {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

logger.info(f"Configured {item.domain}")
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import logging

from django.contrib.sites.models import Site
from django.core.exceptions import ValidationError
from django.db import IntegrityError

from django_setup_configuration.configuration import BaseConfigurationStep
from django_setup_configuration.exceptions import ConfigurationRunFailed

from objecttypes.setup_configuration.models import (
SiteGroupConfigurationModel,
from objecttypes.setup_configuration.models.token_auth import (
TokenAuthGroupConfigurationModel,
)
from objecttypes.token.models import TokenAuth
Expand Down Expand Up @@ -71,51 +69,3 @@ def execute(self, model: TokenAuthGroupConfigurationModel) -> None:
raise ConfigurationRunFailed(exception_message) from exception

logger.info(f"Configured {item.identifier}")


class SitesConfigurationStep(BaseConfigurationStep[SiteGroupConfigurationModel]):
"""
Configure the application site/domain.
"""

namespace = "objecttypes_sites"
enable_setting = "objecttypes_sites_config_enable"

verbose_name = "Configuration to set up Sites for ObjectTypes"
config_model = SiteGroupConfigurationModel

def execute(self, model: SiteGroupConfigurationModel) -> None:
for item in model.items:
logger.info(f"Configuring {item.domain}")

model_kwargs = {
"domain": item.domain,
"name": item.name,
}

instance = Site(**model_kwargs)

try:
instance.full_clean(exclude=("id",), validate_unique=False)
except ValidationError as exception:
exception_message = f"Validation error(s) occured for {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

logger.debug(f"No validation errors found for {item.domain}")

try:
logger.debug(f"Saving {item.domain}")
Site.objects.update_or_create(
domain=item.domain,
defaults={
key: value
for key, value in model_kwargs.items()
if key != "domain"
},
)

except IntegrityError as exception:
exception_message = f"Failed configuring token {item.domain}."
raise ConfigurationRunFailed(exception_message) from exception

logger.info(f"Configured {item.domain}")
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from django_setup_configuration.exceptions import PrerequisiteFailed
from django_setup_configuration.test_utils import execute_single_step

from objecttypes.setup_configuration.steps import SitesConfigurationStep
from objecttypes.setup_configuration.steps.sites import SitesConfigurationStep

DIR_FILES = (Path(__file__).parent / "files/sites").resolve()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
)
from django_setup_configuration.test_utils import execute_single_step

from objecttypes.setup_configuration.steps import TokenAuthConfigurationStep
from objecttypes.setup_configuration.steps.token_auth import TokenAuthConfigurationStep
from objecttypes.token.models import TokenAuth
from objecttypes.token.tests.factories.token import TokenAuthFactory

Expand Down

0 comments on commit 30b82a1

Please sign in to comment.