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 22:59 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 22:59 +0200
1from typing import Optional
3import os
5import gws
6import gws.base.model
7import gws.config.util
8import gws.lib.intl
9import gws.lib.mime
12class Config(gws.ConfigWithAccess):
13 """Template configuration."""
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."""
29class Props(gws.Props):
30 mapSize: Optional[gws.Size]
31 pageSize: Optional[gws.Size]
32 title: str
35DEFAULT_MAP_SIZE = (50, 50, gws.Uom.mm)
36DEFAULT_PAGE_SIZE = (210, 297, gws.Uom.mm)
39class Object(gws.Template):
40 def configure(self):
41 self.title = self.cfg('title', default='')
42 self.subject = self.cfg('subject', default='')
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)
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')
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 )
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)
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()
76 f = gws.lib.intl.formatters(locale)
78 args.setdefault('locale', locale)
79 args.setdefault('date', f[0])
80 args.setdefault('time', f[1])
81 args.setdefault('number', f[2])
83 # obsolete
84 args.setdefault('gwsVersion', self.root.app.version)
85 args.setdefault('gwsBaseUrl', gws.c.SERVER_ENDPOINT)
87 return gws.TemplateArgs(args)
89 def notify(self, tri: gws.TemplateRenderInput, message: str):
90 if tri.notify:
91 tri.notify(message)