Coverage for gws-app/gws/base/model/default_model.py: 66%

41 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-05 13:35 +0200

1"""Default model.""" 

2 

3from typing import Optional, cast 

4 

5import gws 

6import gws.base.feature 

7import gws.lib.shape 

8from . import core 

9 

10 

11@gws.ext.config.model('default') 

12class Config(core.Config): 

13 """Default model configuration.""" 

14 

15 pass 

16 

17 

18@gws.ext.object.model('default') 

19class Object(core.Object): 

20 """Default model. 

21 

22 Used when no model is configured. Copies all attributes between records, 

23 features and props as they are, converting the geometry between shapes and shape props. 

24 """ 

25 

26 def configure(self): 

27 self.uidName = core.DEFAULT_UID_NAME 

28 self.geometryName = core.DEFAULT_GEOMETRY_NAME 

29 self.loadingStrategy = gws.FeatureLoadingStrategy.all 

30 

31 self.configure_fields() 

32 

33 def feature_from_props(self, props, mc): 

34 feature = super().feature_from_props(props, mc) 

35 feature.attributes = dict(props.attributes) 

36 

37 if self.geometryName: 

38 p = props.attributes.get(self.geometryName) 

39 if p: 

40 feature.attributes[self.geometryName] = gws.lib.shape.from_props(p) 

41 

42 return feature 

43 

44 def feature_to_props(self, feature: gws.Feature, mc): 

45 props = super().feature_to_props(feature, mc) 

46 props.attributes = dict(feature.attributes) 

47 s = feature.shape() 

48 if s is not None: 

49 props.attributes[self.geometryName] = s.to_props() 

50 return props 

51 

52 def feature_from_record(self, record: gws.FeatureRecord, mc: gws.ModelContext) -> gws.Feature: 

53 """Create a feature from a record. 

54 

55 The record attributes become the feature attributes. The record uid and shape, 

56 if present, are stored under the uid and geometry names, and the ``layerName`` 

57 from the record metadata becomes the feature category. 

58 

59 Args: 

60 record: The source record. 

61 mc: The model context. 

62 

63 Returns: 

64 A new feature of this model. 

65 """ 

66 record = cast(gws.FeatureRecord, gws.u.to_data_object(record)) 

67 feature = gws.base.feature.new(model=self, record=record) 

68 feature.attributes = record.attributes 

69 if record.uid and self.uidName: 

70 feature.attributes[self.uidName] = record.uid 

71 if record.shape and self.geometryName: 

72 feature.attributes[self.geometryName] = record.shape 

73 if record.meta: 

74 feature.category = record.meta.get('layerName', '') 

75 return feature