Server IP : 85.214.239.14 / Your IP : 18.217.10.152 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/cwd/proc/3/cwd/srv/modoboa/env/lib64/python3.5/site-packages/modoboa/relaydomains/ |
Upload File : |
"""Postfix relay domains extension forms.""" from django.db.models.signals import pre_save, post_save from modoboa.lib.form_utils import WizardStep from modoboa.transport import forms as tr_forms, models as tr_models class DisableSignals(object): """Context manager to disable signals.""" def __init__(self): self.stashed_signals = {} self.disabled_signals = [pre_save, post_save] def __enter__(self): for signal in self.disabled_signals: self.disconnect(signal) def __exit__(self, exc_type, exc_val, exc_tb): for signal in list(self.stashed_signals.keys()): self.reconnect(signal) def disconnect(self, signal): self.stashed_signals[signal] = signal.receivers signal.receivers = [] def reconnect(self, signal): signal.receivers = self.stashed_signals.get(signal, []) del self.stashed_signals[signal] class RelayDomainWizardStep(WizardStep): """A custom wizard step.""" def check_access(self, wizard): """Check if domain is a relay domain.""" return wizard.steps[0].form.cleaned_data["type"] == "relaydomain" class RelayDomainFormGeneral(tr_forms.TransportForm): """A form to display transport.""" class Meta: model = tr_models.Transport exclude = [ "creation", "pattern", "next_hop", "enabled", "_settings" ] def save(self, *args, **kwargs): """Custom save method.""" domain = kwargs.pop("domain", None) if domain.type != "relaydomain": # We don't want to recreate the transport we just deleted it # (post_save signal). return None instance = super(RelayDomainFormGeneral, self).save() instance.pattern = domain.name instance.save() if not domain.transport: domain.transport = instance with DisableSignals(): domain.save(update_fields=["transport"]) return instance