From 43c7303a446811a0618fe9900fc6428f3dc00b5d Mon Sep 17 00:00:00 2001 From: Mert Emirimam <48881002+mertemr@users.noreply.github.com> Date: Sat, 14 Jun 2025 15:01:56 +0300 Subject: [PATCH 1/2] Add support for random server selection in TCP and HTTP backends --- mjml/settings.py | 2 ++ mjml/tools.py | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mjml/settings.py b/mjml/settings.py index 714d92a..c8c82a6 100644 --- a/mjml/settings.py +++ b/mjml/settings.py @@ -9,6 +9,7 @@ # tcpserver backend mode configs MJML_TCPSERVERS = getattr(settings, 'MJML_TCPSERVERS', [('127.0.0.1', 28101)]) +MJML_TCPSERVERS_USE_RANDOM = getattr(settings, 'MJML_TCPSERVERS_RANDOM', True) assert isinstance(MJML_TCPSERVERS, (list, tuple)) for t in MJML_TCPSERVERS: assert isinstance(t, (list, tuple)) and len(t) == 2 and isinstance(t[0], str) and isinstance(t[1], int) @@ -18,6 +19,7 @@ 'URL': 'https://api.mjml.io/v1/render', 'HTTP_AUTH': None, # None (default) or ('login', 'password') }]) +MJML_HTTPSERVERS_USE_RANDOM = getattr(settings, 'MJML_HTTPSERVERS_RANDOM', True) assert isinstance(MJML_HTTPSERVERS, (list, tuple)) for t in MJML_HTTPSERVERS: assert isinstance(t, dict) diff --git a/mjml/tools.py b/mjml/tools.py index c064fdd..7c32a64 100644 --- a/mjml/tools.py +++ b/mjml/tools.py @@ -59,7 +59,8 @@ def socket_recvall(sock: socket.socket, n: int) -> Optional[bytes]: def _mjml_render_by_tcpserver(mjml_code: str) -> str: if len(mjml_settings.MJML_TCPSERVERS) > 1: servers = list(mjml_settings.MJML_TCPSERVERS)[:] - random.shuffle(servers) + if mjml_settings.MJML_TCPSERVERS_USE_RANDOM: + random.shuffle(servers) else: servers = mjml_settings.MJML_TCPSERVERS mjml_code_data = force_bytes(mjml_code) @@ -102,7 +103,8 @@ def _mjml_render_by_httpserver(mjml_code: str) -> str: if len(mjml_settings.MJML_HTTPSERVERS) > 1: servers = list(mjml_settings.MJML_HTTPSERVERS)[:] - random.shuffle(servers) + if mjml_settings.MJML_HTTPSERVERS_USE_RANDOM: + random.shuffle(servers) else: servers = mjml_settings.MJML_HTTPSERVERS From 0a85e28d6882b1b74ee58ba89277d1e636c3a9e7 Mon Sep 17 00:00:00 2001 From: Mert Emirimam <48881002+mertemr@users.noreply.github.com> Date: Sat, 14 Jun 2025 15:05:03 +0300 Subject: [PATCH 2/2] Fix condition checks for random server selection in TCP and HTTP backends --- mjml/tools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mjml/tools.py b/mjml/tools.py index 7c32a64..81165ea 100644 --- a/mjml/tools.py +++ b/mjml/tools.py @@ -59,7 +59,7 @@ def socket_recvall(sock: socket.socket, n: int) -> Optional[bytes]: def _mjml_render_by_tcpserver(mjml_code: str) -> str: if len(mjml_settings.MJML_TCPSERVERS) > 1: servers = list(mjml_settings.MJML_TCPSERVERS)[:] - if mjml_settings.MJML_TCPSERVERS_USE_RANDOM: + if mjml_settings.MJML_TCPSERVERS_USE_RANDOM is True: random.shuffle(servers) else: servers = mjml_settings.MJML_TCPSERVERS @@ -103,7 +103,7 @@ def _mjml_render_by_httpserver(mjml_code: str) -> str: if len(mjml_settings.MJML_HTTPSERVERS) > 1: servers = list(mjml_settings.MJML_HTTPSERVERS)[:] - if mjml_settings.MJML_HTTPSERVERS_USE_RANDOM: + if mjml_settings.MJML_HTTPSERVERS_USE_RANDOM is True: random.shuffle(servers) else: servers = mjml_settings.MJML_HTTPSERVERS