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

69 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-24 12:46 +0200

1from typing import Optional 

2 

3 

4import gws 

5import gws.lib.inifile 

6import gws.lib.intl 

7import gws.lib.mime 

8 

9 

10class Config(gws.ConfigWithAccess): 

11 """Template configuration.""" 

12 

13 mapSize: Optional[gws.UomSizeStr] 

14 """Map size.""" 

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

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

17 pageSize: Optional[gws.UomSizeStr] 

18 """Page size.""" 

19 pageMargin: Optional[gws.UomExtentStr] 

20 """Page margin.""" 

21 subject: str = '' 

22 """Template purpose.""" 

23 title: str = '' 

24 """Template title.""" 

25 

26 

27class Props(gws.Props): 

28 mapSize: Optional[gws.Size] 

29 pageSize: Optional[gws.Size] 

30 title: str 

31 

32 

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

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

35 

36 

37class Object(gws.Template): 

38 def configure(self): 

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

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

41 

42 self.mimeTypes = [] 

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

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

45 if not m: 

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

47 self.mimeTypes.append(m) 

48 

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

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

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

52 

53 def props(self, user): 

54 return gws.Data( 

55 mapSize=self.mapSize, 

56 pageSize=self.pageSize, 

57 title=self.title, 

58 uid=self.uid, 

59 ) 

60 

61 def _defaultStrings(self): 

62 def get(): 

63 return gws.lib.inifile.from_paths(f'{gws.c.APP_DIR}/gws/base/application/templates/strings.ini') 

64 

65 return gws.u.get_app_global('gws.base.application.default_strings', get) 

66 

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

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

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

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

71 

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

73 if not locale: 

74 ls = self.root.app.localeUids 

75 if ls: 

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

77 if not locale: 

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

79 

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

81 

82 args.setdefault('locale', locale) 

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

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

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

86 

87 s = self._defaultStrings() 

88 s = s.get(locale.language) or s['en'] 

89 s.update(args.get('STRINGS', {})) 

90 args['STRINGS'] = s 

91 

92 # obsolete 

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

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

95 

96 return gws.TemplateArgs(args) 

97 

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

99 if tri.notify: 

100 tri.notify(message)