from django import forms from django.conf import settings from links.services import ValidationError, build_tracked_url, validate_target_url class DebugCreateForm(forms.Form): target_url = forms.URLField( label="Target URL", widget=forms.URLInput( attrs={"placeholder": "https://mkdrealtor.com/listings/oak-st", "autofocus": True} ), ) title = forms.CharField(label="Title", required=False, max_length=200) external_ref = forms.CharField(label="External ref", required=False, max_length=64) def clean_target_url(self) -> str: raw = self.cleaned_data["target_url"] try: return validate_target_url(raw) except ValidationError as exc: raise forms.ValidationError(str(exc)) from exc def allowlisted_domain_choices() -> list[str]: hosts = list(getattr(settings, "SHORT_ALLOWED_HOSTS", []) or []) return [host for host in hosts if host and not host.startswith("*")] class QuickMintForm(forms.Form): domain = forms.CharField( label="Domain", max_length=253, widget=forms.TextInput( attrs={ "placeholder": "mkdrealtor.com", "list": "allowed-domains", "autocomplete": "off", } ), ) campaign = forms.CharField( label="Campaign", max_length=200, widget=forms.TextInput(attrs={"placeholder": "open-house"}), ) source = forms.CharField( label="Source", max_length=200, widget=forms.TextInput(attrs={"placeholder": "sms"}), ) metric = forms.CharField( label="Metric", max_length=200, widget=forms.TextInput(attrs={"placeholder": "listing-click"}), help_text="Stored as utm_medium.", ) def clean(self): cleaned = super().clean() domain = cleaned.get("domain") campaign = cleaned.get("campaign") source = cleaned.get("source") metric = cleaned.get("metric") if not all((domain, campaign, source, metric)): return cleaned try: cleaned["target_url"] = build_tracked_url( domain=domain, campaign=campaign, source=source, metric=metric, ) except ValidationError as exc: self.add_error("domain", str(exc)) return cleaned