Coverage for /home/runner/work/viur-core/viur-core/viur/src/viur/core/modules/formmailer.py: 0%
43 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-02-07 19:28 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-02-07 19:28 +0000
1from viur.core.skeleton import RelSkel
2from viur.core import errors, utils, securitykey, email
3from viur.core.decorators import *
4from viur.core.bones import BaseBone
5from viur.core.module import Module
8class MailSkel(RelSkel):
9 changedate = None # Changedates won't apply here
12class Formmailer(Module):
13 """
14 Formmailer is the standard module to implement a form mailer for contact request or similar forms.
15 """
17 mailTemplate = None
19 @exposed
20 @skey(allow_empty=True)
21 def index(self, *args, **kwargs):
22 if not self.canUse():
23 raise errors.Forbidden() # Unauthorized
25 skel = self.mailSkel()
27 if len(kwargs) == 0:
28 return self.render.add(skel=skel, failed=False)
30 if not skel.fromClient(kwargs):
31 return self.render.add(skel=skel, failed=True)
33 # Allow bones to perform outstanding "magic" operations before sending the mail
34 for key, _bone in skel.items():
35 if isinstance(_bone, BaseBone):
36 _bone.performMagic(skel, key, isAdd=True)
38 # Get recipients
39 rcpts = self.getRcpts(skel)
41 # Get additional options for send_email
42 opts = self.getOptions(skel)
43 if not isinstance(opts, dict):
44 opts = {}
46 # Send the email!
47 email.send_email(dests=rcpts, tpl=self.mailTemplate, skel=skel, **opts)
48 self.onAdded(skel)
50 return self.render.addSuccess(skel)
52 @exposed
53 def add(self, *args, **kwargs):
54 return self.index(*args, **kwargs)
56 def canUse(self) -> bool:
57 return False
59 def mailSkel(self):
60 raise NotImplementedError("You must implement the \"mailSkel\" function!")
62 def getRcpts(self, skel):
63 raise NotImplementedError("You must implement the \"getRcpts\" function!")
65 def getOptions(self, skel):
66 return None
68 def onAdded(self, skel):
69 pass
72Formmailer.html = True