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
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
1"""Default model."""
3from typing import Optional, cast
5import gws
6import gws.base.feature
7import gws.lib.shape
8from . import core
11@gws.ext.config.model('default')
12class Config(core.Config):
13 """Default model configuration."""
15 pass
18@gws.ext.object.model('default')
19class Object(core.Object):
20 """Default model.
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 """
26 def configure(self):
27 self.uidName = core.DEFAULT_UID_NAME
28 self.geometryName = core.DEFAULT_GEOMETRY_NAME
29 self.loadingStrategy = gws.FeatureLoadingStrategy.all
31 self.configure_fields()
33 def feature_from_props(self, props, mc):
34 feature = super().feature_from_props(props, mc)
35 feature.attributes = dict(props.attributes)
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)
42 return feature
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
52 def feature_from_record(self, record: gws.FeatureRecord, mc: gws.ModelContext) -> gws.Feature:
53 """Create a feature from a record.
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.
59 Args:
60 record: The source record.
61 mc: The model context.
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