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

1from typing import Optional 

2 

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 

11 

12 

13class Config(gws.base.layer.Config): 

14 """Database layer""" 

15 

16 dbUid: Optional[str] 

17 """Database provider uid""" 

18 tableName: str 

19 """sql table name""" 

20 

21 

22class Object(gws.base.layer.vector.Object): 

23 db: gws.DatabaseProvider 

24 tableName: str 

25 

26 def configure(self): 

27 self.configure_layer() 

28 

29 def configure_provider(self): 

30 return gws.config.util.configure_database_provider_for(self) 

31 

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 

40 

41 def configure_models(self): 

42 return gws.config.util.configure_models_for(self, with_default=True) 

43 

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 ) 

52 

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 

60 

61 def configure_search(self): 

62 if super().configure_search(): 

63 return True 

64 self.finders.append(self.create_finder(None)) 

65 return True 

66 

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 )