Coverage for gws-app/gws/base/template/core.py: 95%

63 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-16 23:09 +0200

1from typing import Optional 

2 

3import os 

4 

5import gws 

6import gws.base.model 

7import gws.config.util 

8import gws.lib.intl 

9import gws.lib.mime 

10 

11 

12class Config(gws.ConfigWithAccess): 

13 """Template configuration.""" 

14 

15 mapSize: Optional[gws.UomSizeStr] 

16 """Map size.""" 

17 mimeTypes: Optional[list[gws.MimeType]] 

18 """Mime types this template can generate.""" 

19 pageSize: Optional[gws.UomSizeStr] 

20 """Page size.""" 

21 pageMargin: Optional[gws.UomExtentStr] 

22 """Page margin.""" 

23 subject: str = '' 

24 """Template purpose.""" 

25 title: str = '' 

26 """Template title.""" 

27 

28 

29class Props(gws.Props): 

30 mapSize: Optional[gws.Size] 

31 pageSize: Optional[gws.Size] 

32 title: str 

33 

34 

35DEFAULT_MAP_SIZE = (50, 50, gws.Uom.mm) 

36DEFAULT_PAGE_SIZE = (210, 297, gws.Uom.mm) 

37 

38 

39class Object(gws.Template): 

40 def configure(self): 

41 self.title = self.cfg('title', default='') 

42 self.subject = self.cfg('subject', default='') 

43 

44 self.mimeTypes = [] 

45 for p in self.cfg('mimeTypes', default=[]): 

46 m = gws.lib.mime.get(p) 

47 if not m: 

48 raise gws.ConfigurationError(f'invalid mime type {p!r}') 

49 self.mimeTypes.append(m) 

50 

51 self.mapSize = self.cfg('mapSize') or DEFAULT_MAP_SIZE 

52 self.pageSize = self.cfg('pageSize') or DEFAULT_PAGE_SIZE 

53 self.pageMargin = self.cfg('pageMargin') 

54 

55 def props(self, user): 

56 return gws.Data( 

57 mapSize=self.mapSize, 

58 pageSize=self.pageSize, 

59 title=self.title, 

60 uid=self.uid, 

61 ) 

62 

63 def prepare_args(self, tri: gws.TemplateRenderInput) -> gws.TemplateArgs: 

64 args = gws.u.merge({}, tri.args) 

65 args.setdefault('app', self.root.app) 

66 args.setdefault('subject', self.subject) 

67 

68 locale = args.get('locale') or tri.locale 

69 if not locale: 

70 ls = self.root.app.localeUids 

71 if ls: 

72 locale = gws.lib.intl.locale(ls[0], fallback=True) 

73 if not locale: 

74 locale = gws.lib.intl.default_locale() 

75 

76 f = gws.lib.intl.formatters(locale) 

77 

78 args.setdefault('locale', locale) 

79 args.setdefault('date', f[0]) 

80 args.setdefault('time', f[1]) 

81 args.setdefault('number', f[2]) 

82 

83 # obsolete 

84 args.setdefault('gwsVersion', self.root.app.version) 

85 args.setdefault('gwsBaseUrl', gws.c.SERVER_ENDPOINT) 

86 

87 return gws.TemplateArgs(args) 

88 

89 def notify(self, tri: gws.TemplateRenderInput, message: str): 

90 if tri.notify: 

91 tri.notify(message)