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
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 12:46 +0200
1from typing import Optional
4import gws
5import gws.lib.inifile
6import gws.lib.intl
7import gws.lib.mime
10class Config(gws.ConfigWithAccess):
11 """Template configuration."""
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."""
27class Props(gws.Props):
28 mapSize: Optional[gws.Size]
29 pageSize: Optional[gws.Size]
30 title: str
33DEFAULT_MAP_SIZE = (50, 50, gws.Uom.mm)
34DEFAULT_PAGE_SIZE = (210, 297, gws.Uom.mm)
37class Object(gws.Template):
38 def configure(self):
39 self.title = self.cfg('title', default='')
40 self.subject = self.cfg('subject', default='')
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)
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')
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 )
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')
65 return gws.u.get_app_global('gws.base.application.default_strings', get)
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)
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()
80 f = gws.lib.intl.formatters(locale)
82 args.setdefault('locale', locale)
83 args.setdefault('date', f[0])
84 args.setdefault('time', f[1])
85 args.setdefault('number', f[2])
87 s = self._defaultStrings()
88 s = s.get(locale.language) or s['en']
89 s.update(args.get('STRINGS', {}))
90 args['STRINGS'] = s
92 # obsolete
93 args.setdefault('gwsVersion', self.root.app.version)
94 args.setdefault('gwsBaseUrl', gws.c.SERVER_ENDPOINT)
96 return gws.TemplateArgs(args)
98 def notify(self, tri: gws.TemplateRenderInput, message: str):
99 if tri.notify:
100 tri.notify(message)