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

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 

6 

7 

8class MailSkel(RelSkel): 

9 changedate = None # Changedates won't apply here 

10 

11 

12class Formmailer(Module): 

13 """ 

14 Formmailer is the standard module to implement a form mailer for contact request or similar forms. 

15 """ 

16 

17 mailTemplate = None 

18 

19 @exposed 

20 @skey(allow_empty=True) 

21 def index(self, *args, **kwargs): 

22 if not self.canUse(): 

23 raise errors.Forbidden() # Unauthorized 

24 

25 skel = self.mailSkel() 

26 

27 if len(kwargs) == 0: 

28 return self.render.add(skel=skel, failed=False) 

29 

30 if not skel.fromClient(kwargs): 

31 return self.render.add(skel=skel, failed=True) 

32 

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) 

37 

38 # Get recipients 

39 rcpts = self.getRcpts(skel) 

40 

41 # Get additional options for send_email 

42 opts = self.getOptions(skel) 

43 if not isinstance(opts, dict): 

44 opts = {} 

45 

46 # Send the email! 

47 email.send_email(dests=rcpts, tpl=self.mailTemplate, skel=skel, **opts) 

48 self.onAdded(skel) 

49 

50 return self.render.addSuccess(skel) 

51 

52 @exposed 

53 def add(self, *args, **kwargs): 

54 return self.index(*args, **kwargs) 

55 

56 def canUse(self) -> bool: 

57 return False 

58 

59 def mailSkel(self): 

60 raise NotImplementedError("You must implement the \"mailSkel\" function!") 

61 

62 def getRcpts(self, skel): 

63 raise NotImplementedError("You must implement the \"getRcpts\" function!") 

64 

65 def getOptions(self, skel): 

66 return None 

67 

68 def onAdded(self, skel): 

69 pass 

70 

71 

72Formmailer.html = True