1
+ import json
2
+ import pathlib
3
+ from enum import StrEnum
1
4
from typing import Any
2
- from pydantic import Field , Json , model_validator
3
5
4
- import pathlib
5
6
from jinja2 import Environment
6
- import json
7
- from contentctl . objects . security_content_object import SecurityContentObject
7
+ from pydantic import Field , Json , model_validator
8
+
8
9
from contentctl .objects .config import build
9
- from enum import StrEnum
10
+ from contentctl . objects . security_content_object import SecurityContentObject
10
11
11
- DEFAULT_DASHBAORD_JINJA2_TEMPLATE = """<dashboard version="2" theme="{{ dashboard.theme }}">
12
- <label>{{ dashboard.label(config) }}</label>
12
+ DEFAULT_DASHBOARD_JINJA2_TEMPLATE = """<dashboard version="2" theme="{{ dashboard.theme }}">
13
+ <label>{{ dashboard.name }}</label>
13
14
<description></description>
14
15
<definition><![CDATA[
15
16
{{ dashboard.pretty_print_json_obj() }}
@@ -31,7 +32,7 @@ class DashboardTheme(StrEnum):
31
32
32
33
class Dashboard (SecurityContentObject ):
33
34
j2_template : str = Field (
34
- default = DEFAULT_DASHBAORD_JINJA2_TEMPLATE ,
35
+ default = DEFAULT_DASHBOARD_JINJA2_TEMPLATE ,
35
36
description = "Jinja2 Template used to construct the dashboard" ,
36
37
)
37
38
description : str = Field (
@@ -48,9 +49,6 @@ class Dashboard(SecurityContentObject):
48
49
..., description = "Valid JSON object that describes the dashboard"
49
50
)
50
51
51
- def label (self , config : build ) -> str :
52
- return f"{ config .app .label } - { self .name } "
53
-
54
52
@model_validator (mode = "before" )
55
53
@classmethod
56
54
def validate_fields_from_json (cls , data : Any ) -> Any :
@@ -98,7 +96,16 @@ def pretty_print_json_obj(self):
98
96
return json .dumps (self .json_obj , indent = 4 )
99
97
100
98
def getOutputFilepathRelativeToAppRoot (self , config : build ) -> pathlib .Path :
101
- filename = f"{ self .file_path .stem } .xml" .lower ()
99
+ if self .file_path is None :
100
+ raise FileNotFoundError (
101
+ f"Dashboard { self .name } file_path was None. Dashboards must be backed by a file."
102
+ )
103
+ # Prefix with the appLabel__ in order to make a search for these easy with match="__"
104
+ # in the default.xml file
105
+ filename = f"{ config .app .label } __{ self .file_path .stem } .xml" .lower ().replace (
106
+ " " , "_"
107
+ )
108
+
102
109
return pathlib .Path ("default/data/ui/views" ) / filename
103
110
104
111
def writeDashboardFile (self , j2_env : Environment , config : build ):
0 commit comments