Coverage for gws-app/gws/base/database/layer.py: 0%
47 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1from typing import Optional
3import gws
4import gws.base.database
5import gws.base.layer
6import gws.gis.bounds
7import gws.base.feature
8import gws.gis.crs
9import gws.base.shape
10import gws.config.util
13class Config(gws.base.layer.Config):
14 """Database layer"""
16 dbUid: Optional[str]
17 """Database provider uid"""
18 tableName: str
19 """sql table name"""
22class Object(gws.base.layer.vector.Object):
23 db: gws.DatabaseProvider
24 tableName: str
26 def configure(self):
27 self.configure_layer()
29 def configure_provider(self):
30 return gws.config.util.configure_database_provider_for(self)
32 def configure_sources(self):
33 self.tableName = self.cfg('tableName') or self.cfg('_defaultTableName')
34 desc = self.db.describe(self.tableName)
35 if not desc:
36 raise gws.Error(f'table {self.tableName!r} not found or not readable')
37 self.geometryType = desc.geometryType
38 self.geometryCrs = gws.gis.crs.get(desc.geometrySrid)
39 return True
41 def configure_models(self):
42 return gws.config.util.configure_models_for(self, with_default=True)
44 def create_model(self, cfg):
45 return self.create_child(
46 gws.ext.object.model,
47 cfg,
48 type=self.extType,
49 _defaultDb=self.db,
50 _defaultTableName=self.tableName
51 )
53 def configure_bounds(self):
54 if super().configure_bounds():
55 return True
56 b = self.db.table_bounds(self.tableName)
57 if b:
58 self.bounds = gws.gis.bounds.transform(b, self.mapCrs)
59 return True
61 def configure_search(self):
62 if super().configure_search():
63 return True
64 self.finders.append(self.create_finder(None))
65 return True
67 def create_finder(self, cfg):
68 return self.create_child(
69 gws.ext.object.finder,
70 cfg,
71 type=self.extType,
72 _defaultDb=self.db,
73 _defaultTableName=self.tableName
74 )