1
1
import json
2
+ import os
2
3
from abc import ABCMeta , abstractmethod
3
4
4
5
import plotly .graph_objects as go
6
+ import yaml
5
7
from geojson import Feature , Polygon
6
8
7
- from ohsome_quality_api .definitions import get_attribution , get_metadata
9
+ from ohsome_quality_api .definitions import get_attribution
8
10
from ohsome_quality_api .indicators .models import IndicatorMetadata , Result
9
11
from ohsome_quality_api .topics .models import BaseTopic as Topic
10
- from ohsome_quality_api .utils .helper import json_serialize
12
+ from ohsome_quality_api .utils .helper import (
13
+ camel_to_hyphen ,
14
+ camel_to_snake ,
15
+ get_module_dir ,
16
+ json_serialize ,
17
+ )
11
18
12
19
13
20
class BaseIndicator (metaclass = ABCMeta ):
@@ -18,9 +25,7 @@ def __init__(
18
25
topic : Topic ,
19
26
feature : Feature ,
20
27
) -> None :
21
- self .metadata : IndicatorMetadata = get_metadata (
22
- "indicators" , type (self ).__name__
23
- )
28
+ self .metadata : IndicatorMetadata = self .get_template ()
24
29
self .topic : Topic = topic
25
30
self .feature : Feature = feature
26
31
self .result : Result = Result (
@@ -167,3 +172,15 @@ def _get_default_figure(self) -> None:
167
172
raw = fig .to_dict ()
168
173
raw ["layout" ].pop ("template" ) # remove boilerplate
169
174
self .result .figure = raw
175
+
176
+ def get_template (self ) -> dict :
177
+ """Get template for indicator."""
178
+ indicator_key = camel_to_snake (type (self ).__name__ )
179
+ dir = get_module_dir (f"ohsome_quality_api.indicators.{ indicator_key } " )
180
+ file = os .path .join (dir , "metadata.yaml" )
181
+ with open (file , "r" ) as file :
182
+ raw = yaml .safe_load (file )
183
+ metadata = {}
184
+ for k , v in raw .items ():
185
+ metadata [k ] = IndicatorMetadata (** v )
186
+ return metadata [camel_to_hyphen (type (self ).__name__ )]
0 commit comments