]> git.0d.be Git - django-panik-newsletter.git/commitdiff
add support for subscribing to mailman3 v2023
authorFrédéric Péters <fpeters@0d.be>
Thu, 19 Jan 2023 13:44:59 +0000 (14:44 +0100)
committerFrédéric Péters <fpeters@0d.be>
Thu, 19 Jan 2023 13:44:59 +0000 (14:44 +0100)
debian/control
newsletter/models.py

index 414e8e21da05c424dae368dd6b29b64980fe363c..e8cd2d3766ddff0a2ffcaba9ad25baf9d5734932 100644 (file)
@@ -5,6 +5,7 @@ Maintainer: Frederic Peters <fred@radiopanik.org>
 Build-Depends: debhelper-compat (= 12),
                python3-all,
                python3-django,
 Build-Depends: debhelper-compat (= 12),
                python3-all,
                python3-django,
+               python3-mechanize,
                python3-setuptools,
                dh-python
 Standards-Version: 3.9.1
                python3-setuptools,
                dh-python
 Standards-Version: 3.9.1
index a689138084d69aa460eae02d58066b061d23c007..d24d36ad1a9f90df5947c0595c238a2813df374b 100644 (file)
@@ -7,6 +7,7 @@ from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
 
 import html2text
 from email.mime.text import MIMEText
 
 import html2text
+import mechanize
 import requests
 from ckeditor.fields import RichTextField
 from django.conf import settings
 import requests
 from ckeditor.fields import RichTextField
 from django.conf import settings
@@ -58,6 +59,8 @@ class Subscriber(models.Model):
         newsletter_service = getattr(settings, 'NEWSLETTER_SERVICE', 'mailman')
         if newsletter_service == 'mailman':
             return self.subscribe_in_mailman()
         newsletter_service = getattr(settings, 'NEWSLETTER_SERVICE', 'mailman')
         if newsletter_service == 'mailman':
             return self.subscribe_in_mailman()
+        elif newsletter_service == 'mailman3':
+            return self.subscribe_in_mailman3()
         elif newsletter_service == 'mailchimp':
             return self.subscribe_in_mailchimp()
 
         elif newsletter_service == 'mailchimp':
             return self.subscribe_in_mailchimp()
 
@@ -76,6 +79,27 @@ class Subscriber(models.Model):
         self.is_registered = True
         self.save()
 
         self.is_registered = True
         self.save()
 
+    def subscribe_in_mailman3(self):
+        # emulate browser to login and subscribe user
+        br = mechanize.Browser()
+        br.open(settings.NEWSLETTER_MAILMAN3_LIST_URL)
+        br.follow_link(url_regex=re.compile('/accounts/login'))
+        br.select_form(action=lambda x: '/login/' in x)
+        br['login'] = settings.NEWSLETTER_MAILMAN3_LOGIN
+        br['password'] = settings.NEWSLETTER_MAILMAN3_PASSWORD
+        response = br.submit()
+        assert br.find_link(url_regex=re.compile('/accounts/logout'))
+        br.open(settings.NEWSLETTER_MAILMAN3_LIST_URL + 'mass_subscribe/')
+        br.select_form(action=lambda x: '/mass_subscribe/' in x)
+        br['emails'] = self.email
+        br['pre_confirmed'] = ['on']
+        br['pre_approved'] = ['on']
+        br['pre_verified'] = ['on']
+        br['send_welcome_message'] = ['False']
+        response = br.submit()
+        self.is_registered = True
+        self.save()
+
     def subscribe_in_mailchimp(self):
         dc = settings.MAILCHIMP_DC
         apikey = settings.MAILCHIMP_APIKEY
     def subscribe_in_mailchimp(self):
         dc = settings.MAILCHIMP_DC
         apikey = settings.MAILCHIMP_APIKEY