layrz-sdk 3.0.4__tar.gz → 3.0.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of layrz-sdk might be problematic. Click here for more details.

Files changed (76) hide show
  1. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/PKG-INFO +1 -1
  2. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/__init__.py +5 -5
  3. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/__init__.py +2 -1
  4. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/alignment.py +1 -1
  5. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/bar.py +78 -5
  6. layrz_sdk-3.0.6/layrz_sdk/entities/charts/color.py +35 -0
  7. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/column.py +78 -5
  8. layrz_sdk-3.0.6/layrz_sdk/entities/charts/configuration.py +53 -0
  9. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/data_type.py +4 -4
  10. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/line.py +51 -5
  11. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/map.py +6 -5
  12. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/number.py +11 -3
  13. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/pie.py +39 -5
  14. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/radial_bar.py +39 -5
  15. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/render_technology.py +3 -0
  16. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/scatter.py +94 -5
  17. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/serie.py +1 -1
  18. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/table.py +11 -3
  19. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk.egg-info/PKG-INFO +1 -1
  20. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk.egg-info/SOURCES.txt +1 -0
  21. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/pyproject.toml +1 -1
  22. layrz_sdk-3.0.4/layrz_sdk/entities/charts/configuration.py +0 -25
  23. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/LICENSE +0 -0
  24. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/README.md +0 -0
  25. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/__init__.py +0 -0
  26. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/__init__.py +0 -0
  27. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/request.py +0 -0
  28. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/response.py +0 -0
  29. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/result.py +0 -0
  30. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/service.py +0 -0
  31. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/broadcasts/status.py +0 -0
  32. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/cases/__init__.py +0 -0
  33. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/cases/case.py +0 -0
  34. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/cases/comment.py +0 -0
  35. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/cases/trigger.py +0 -0
  36. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/exceptions.py +0 -0
  37. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/html.py +0 -0
  38. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/radar.py +0 -0
  39. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/serie_type.py +0 -0
  40. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/charts/timeline.py +0 -0
  41. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/checkpoints/__init__.py +0 -0
  42. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/checkpoints/checkpoint.py +0 -0
  43. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/checkpoints/geofence.py +0 -0
  44. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/checkpoints/waypoint.py +0 -0
  45. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/events/__init__.py +0 -0
  46. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/events/event.py +0 -0
  47. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/formatting/__init__.py +0 -0
  48. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/formatting/text_align.py +0 -0
  49. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/__init__.py +0 -0
  50. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/asset.py +0 -0
  51. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/asset_operation_mode.py +0 -0
  52. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/custom_field.py +0 -0
  53. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/device.py +0 -0
  54. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/sensor.py +0 -0
  55. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/general/user.py +0 -0
  56. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/repcom/__init__.py +0 -0
  57. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/repcom/transaction.py +0 -0
  58. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/__init__.py +0 -0
  59. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/col.py +0 -0
  60. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/format.py +0 -0
  61. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/header.py +0 -0
  62. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/page.py +0 -0
  63. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/report.py +0 -0
  64. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/reports/row.py +0 -0
  65. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/telemetry/__init__.py +0 -0
  66. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/telemetry/message.py +0 -0
  67. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/entities/telemetry/position.py +0 -0
  68. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/helpers/__init__.py +0 -0
  69. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/helpers/color.py +0 -0
  70. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/lcl/__init__.py +0 -0
  71. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk/lcl/core.py +0 -0
  72. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk.egg-info/dependency_links.txt +0 -0
  73. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk.egg-info/requires.txt +0 -0
  74. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/layrz_sdk.egg-info/top_level.txt +0 -0
  75. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/setup.cfg +0 -0
  76. {layrz_sdk-3.0.4 → layrz_sdk-3.0.6}/tests/test_lcl.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 3.0.4
3
+ Version: 3.0.6
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -4,11 +4,11 @@ from .broadcasts import (BroadcastRequest, BroadcastResponse, BroadcastResult, B
4
4
  # Cases entitites
5
5
  from .cases import Case, CaseIgnoredStatus, CaseStatus, Comment, Trigger
6
6
  # Charts entities
7
- from .charts import (AreaChart, BarChart, ChartAlignment, ChartConfiguration, ChartDataSerie, ChartDataSerieType,
8
- ChartDataType, ChartException, ChartRenderTechnology, ColumnChart, HTMLChart, LineChart,
9
- MapCenterType, MapChart, MapPoint, NumberChart, PieChart, RadarChart, RadialBarChart, ScatterChart,
10
- ScatterSerie, ScatterSerieItem, TableChart, TableHeader, TableRow, TimelineChart, TimelineSerie,
11
- TimelineSerieItem)
7
+ from .charts import (AreaChart, AxisConfig, BarChart, ChartAlignment, ChartColor, ChartConfiguration, ChartDataSerie,
8
+ ChartDataSerieType, ChartDataType, ChartException, ChartRenderTechnology, ColumnChart, HTMLChart,
9
+ LineChart, MapCenterType, MapChart, MapPoint, NumberChart, PieChart, RadarChart, RadialBarChart,
10
+ ScatterChart, ScatterSerie, ScatterSerieItem, TableChart, TableHeader, TableRow, TimelineChart,
11
+ TimelineSerie, TimelineSerieItem, get_color_list)
12
12
  # Checkpoints entities
13
13
  from .checkpoints import Checkpoint, Geofence, Waypoint
14
14
  # Events entities
@@ -1,8 +1,9 @@
1
1
  """ Charts entities """
2
2
  from .alignment import ChartAlignment
3
3
  from .bar import BarChart
4
+ from .color import ChartColor, get_color_list
4
5
  from .column import ColumnChart
5
- from .configuration import ChartConfiguration
6
+ from .configuration import ChartConfiguration, AxisConfig
6
7
  from .data_type import ChartDataType
7
8
  from .exceptions import ChartException
8
9
  from .html import HTMLChart
@@ -13,7 +13,7 @@ class ChartAlignment(Enum):
13
13
  @property
14
14
  def _readable(self) -> str:
15
15
  """ Readable """
16
- return f'BroadcastStatus.{self.value}'
16
+ return f'ChartAlignment.{self.value}'
17
17
 
18
18
  def __str__(self) -> str:
19
19
  """ Readable property """
@@ -1,6 +1,8 @@
1
1
  """ Bar chart """
2
2
  from .alignment import ChartAlignment
3
+ from .configuration import AxisConfig
3
4
  from .exceptions import ChartException
5
+ from .render_technology import ChartRenderTechnology
4
6
  from .serie import ChartDataSerie
5
7
  from .serie_type import ChartDataSerieType
6
8
 
@@ -16,6 +18,8 @@ class BarChart:
16
18
  y_axis: list[ChartDataSerie],
17
19
  title: str = 'Chart',
18
20
  align: ChartAlignment = ChartAlignment.CENTER,
21
+ x_axis_config: AxisConfig = None,
22
+ y_axis_config: AxisConfig = None,
19
23
  ) -> None:
20
24
  """
21
25
  Constructor
@@ -27,6 +31,8 @@ class BarChart:
27
31
  Please read the documentation to more information.
28
32
  - title : Title of the chart
29
33
  - align : Alignment of the title
34
+ - x_axis_config : Configuration of the X Axis
35
+ - y_axis_config : Configuration of the Y Axis
30
36
  """
31
37
  for i, serie in enumerate(y_axis):
32
38
  if not isinstance(serie, ChartDataSerie):
@@ -45,7 +51,24 @@ class BarChart:
45
51
  raise ChartException('align must be an instance of ChartAlignment')
46
52
  self.align = align
47
53
 
48
- def render(self, use_new_definition: bool = False) -> dict | list[dict]:
54
+ if x_axis_config is None:
55
+ x_axis_config = AxisConfig()
56
+
57
+ if not isinstance(x_axis_config, AxisConfig):
58
+ raise ChartException('x_axis_config must be an instance of AxisConfig')
59
+ self.x_axis_config = x_axis_config
60
+
61
+ if y_axis_config is None:
62
+ y_axis_config = AxisConfig()
63
+
64
+ if not isinstance(y_axis_config, AxisConfig):
65
+ raise ChartException('y_axis_config must be an instance of AxisConfig')
66
+ self.y_axis_config = y_axis_config
67
+
68
+ def render(
69
+ self,
70
+ technology: ChartRenderTechnology = ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS,
71
+ ) -> dict:
49
72
  """
50
73
  Render chart to a graphic Library.
51
74
  We have two graphic libraries: GRAPHIC and APEXCHARTS.
@@ -53,17 +76,67 @@ class BarChart:
53
76
  GRAPHIC is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
54
77
  APEXCHARTS is a Javascript chart library. This is the default option.
55
78
  """
56
- if use_new_definition:
79
+ if technology == ChartRenderTechnology.GRAPHIC:
57
80
  return {
58
81
  'library': 'GRAPHIC',
59
82
  'chart': 'BAR',
60
83
  'configuration': self._render_graphic(),
61
84
  }
62
85
 
86
+ if technology == ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS:
87
+ return {
88
+ 'library': 'SYNCFUSION_FLUTTER_CHARTS',
89
+ 'chart': 'BAR',
90
+ 'configuration': self._render_syncfusion_flutter_charts(),
91
+ }
92
+
93
+ if technology == ChartRenderTechnology.APEX_CHARTS:
94
+ return {
95
+ 'library': 'APEXCHARTS',
96
+ 'chart': 'BAR',
97
+ 'configuration': self._render_apexcharts(),
98
+ }
99
+
100
+ return {
101
+ 'library': 'FLUTTER',
102
+ 'chart': 'TEXT',
103
+ 'configuration': [f'Unsupported rendering technology {technology.name}'],
104
+ }
105
+
106
+ def _render_syncfusion_flutter_charts(self) -> list[dict]:
107
+ """
108
+ Converts the configuration of the chart to Syncfusion Flutter Charts.
109
+ """
110
+ series = []
111
+
112
+ for serie in self.y_axis:
113
+ values = []
114
+ for i, value in enumerate(serie.data):
115
+ x_axis = self.x_axis.data[i]
116
+ values.append({'xAxis': x_axis, 'yAxis': value})
117
+
118
+ series.append({
119
+ 'label': serie.label,
120
+ 'color': serie.color,
121
+ 'values': values,
122
+ })
123
+
63
124
  return {
64
- 'library': 'APEXCHARTS',
65
- 'chart': 'BAR',
66
- 'configuration': self._render_apexcharts(),
125
+ 'series': series,
126
+ 'xAxis': {
127
+ 'label': self.x_axis_config.label,
128
+ 'measureUnit': self.x_axis_config.measure_unit,
129
+ 'dataType': self.x_axis_config.data_type.value,
130
+ 'minValue': self.x_axis_config.min_value,
131
+ 'maxValue': self.x_axis_config.max_value,
132
+ },
133
+ 'yAxis': {
134
+ 'label': self.y_axis_config.label,
135
+ 'measureUnit': self.y_axis_config.measure_unit,
136
+ 'dataType': self.y_axis_config.data_type.value,
137
+ 'minValue': self.y_axis_config.min_value,
138
+ 'maxValue': self.y_axis_config.max_value,
139
+ },
67
140
  }
68
141
 
69
142
  def _render_graphic(self) -> list[dict]:
@@ -0,0 +1,35 @@
1
+ """ Chart alignment """
2
+ from enum import Enum
3
+
4
+
5
+ class ChartColor(Enum):
6
+ """ Chart color list, ideal to use to colorize the series """
7
+ RED = '#F44336'
8
+ BLUE = '#2196F3'
9
+ GREEN = '#4CAF50'
10
+ PURPLE = '#9C27B0'
11
+ ORANGE = '#FF9800'
12
+ PINK = '#E91E63'
13
+ TEAL = '#009688'
14
+ AMBER = '#FFC107'
15
+ CYAN = '#00BCD4'
16
+ INDIGO = '#3F51B5'
17
+ LIME = '#CDDC39'
18
+
19
+ @property
20
+ def _readable(self) -> str:
21
+ """ Readable """
22
+ return f'ChartColor.{self.value}'
23
+
24
+ def __str__(self) -> str:
25
+ """ Readable property """
26
+ return self._readable
27
+
28
+ def __repr__(self) -> str:
29
+ """ Readable property """
30
+ return self._readable
31
+
32
+
33
+ def get_color_list() -> list[str]:
34
+ """ Get all colors """
35
+ return [color.value for color in ChartColor]
@@ -2,7 +2,9 @@
2
2
  from layrz_sdk.helpers import convert_to_rgba
3
3
 
4
4
  from .alignment import ChartAlignment
5
+ from .configuration import AxisConfig
5
6
  from .exceptions import ChartException
7
+ from .render_technology import ChartRenderTechnology
6
8
  from .serie import ChartDataSerie
7
9
  from .serie_type import ChartDataSerieType
8
10
 
@@ -19,6 +21,8 @@ class ColumnChart:
19
21
  y_axis: list[ChartDataSerie],
20
22
  title: str = 'Chart',
21
23
  align: ChartAlignment = ChartAlignment.CENTER,
24
+ x_axis_config: AxisConfig = None,
25
+ y_axis_config: AxisConfig = None,
22
26
  ) -> None:
23
27
  """
24
28
  Constructor
@@ -30,6 +34,8 @@ class ColumnChart:
30
34
  Please read the documentation to more information.
31
35
  - title : Title of the chart
32
36
  - align : Alignment of the title
37
+ - x_axis_config : Configuration of the X Axis
38
+ - y_axis_config : Configuration of the Y Axis
33
39
  """
34
40
  for i, serie in enumerate(y_axis):
35
41
  if not isinstance(serie, ChartDataSerie):
@@ -48,7 +54,24 @@ class ColumnChart:
48
54
  raise ChartException('align must be an instance of ChartAlignment')
49
55
  self.align = align
50
56
 
51
- def render(self, use_new_definition: bool = False) -> dict | list[dict]:
57
+ if x_axis_config is None:
58
+ x_axis_config = AxisConfig()
59
+
60
+ if not isinstance(x_axis_config, AxisConfig):
61
+ raise ChartException('x_axis_config must be an instance of AxisConfig')
62
+ self.x_axis_config = x_axis_config
63
+
64
+ if y_axis_config is None:
65
+ y_axis_config = AxisConfig()
66
+
67
+ if not isinstance(y_axis_config, AxisConfig):
68
+ raise ChartException('y_axis_config must be an instance of AxisConfig')
69
+ self.y_axis_config = y_axis_config
70
+
71
+ def render(
72
+ self,
73
+ technology: ChartRenderTechnology = ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS,
74
+ ) -> dict:
52
75
  """
53
76
  Render chart to a graphic Library.
54
77
  We have two graphic libraries: GRAPHIC and APEXCHARTS.
@@ -56,17 +79,67 @@ class ColumnChart:
56
79
  GRAPHIC is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
57
80
  APEXCHARTS is a Javascript chart library. This is the default option.
58
81
  """
59
- if use_new_definition:
82
+ if technology == ChartRenderTechnology.GRAPHIC:
60
83
  return {
61
84
  'library': 'GRAPHIC',
62
85
  'chart': 'COLUMN',
63
86
  'configuration': self._render_graphic(),
64
87
  }
65
88
 
89
+ if technology == ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS:
90
+ return {
91
+ 'library': 'SYNCFUSION_FLUTTER_CHARTS',
92
+ 'chart': 'COLUMN',
93
+ 'configuration': self._render_syncfusion_flutter_charts(),
94
+ }
95
+
96
+ if technology == ChartRenderTechnology.APEX_CHARTS:
97
+ return {
98
+ 'library': 'APEXCHARTS',
99
+ 'chart': 'COLUMN',
100
+ 'configuration': self._render_apexcharts(),
101
+ }
102
+
103
+ return {
104
+ 'library': 'FLUTTER',
105
+ 'chart': 'TEXT',
106
+ 'configuration': [f'Unsupported {technology}'],
107
+ }
108
+
109
+ def _render_syncfusion_flutter_charts(self) -> dict:
110
+ """
111
+ Converts the configuration of the chart to Syncfusion Flutter Charts.
112
+ """
113
+ series = []
114
+
115
+ for serie in self.y_axis:
116
+ values = []
117
+ for i, value in enumerate(serie.data):
118
+ x_axis = self.x_axis.data[i]
119
+ values.append({'xAxis': x_axis, 'yAxis': value})
120
+
121
+ series.append({
122
+ 'label': serie.label,
123
+ 'color': serie.color,
124
+ 'values': values,
125
+ })
126
+
66
127
  return {
67
- 'library': 'APEXCHARTS',
68
- 'chart': 'COLUMN',
69
- 'configuration': self._render_apexcharts(),
128
+ 'series': series,
129
+ 'xAxis': {
130
+ 'label': self.x_axis_config.label,
131
+ 'measureUnit': self.x_axis_config.measure_unit,
132
+ 'dataType': self.x_axis_config.data_type.value,
133
+ 'minValue': self.x_axis_config.min_value,
134
+ 'maxValue': self.x_axis_config.max_value,
135
+ },
136
+ 'yAxis': {
137
+ 'label': self.y_axis_config.label,
138
+ 'measureUnit': self.y_axis_config.measure_unit,
139
+ 'dataType': self.y_axis_config.data_type.value,
140
+ 'minValue': self.y_axis_config.min_value,
141
+ 'maxValue': self.y_axis_config.max_value,
142
+ },
70
143
  }
71
144
 
72
145
  def _render_graphic(self) -> list[dict]:
@@ -0,0 +1,53 @@
1
+ """ Charts entities """
2
+ from .data_type import ChartDataType
3
+
4
+
5
+ class ChartConfiguration:
6
+ """
7
+ Chart configuration
8
+ """
9
+
10
+ def __init__(self, name: str, description: str) -> None:
11
+ """ Constructor """
12
+ self.name = name
13
+ self.description = description
14
+
15
+ @property
16
+ def _readable(self) -> str:
17
+ """ Readable """
18
+ return f'ChartConfiguration(name="{self.name}")'
19
+
20
+ def __str__(self) -> str:
21
+ """ Readable property """
22
+ return self._readable
23
+
24
+ def __repr__(self) -> str:
25
+ """ Readable property """
26
+ return self._readable
27
+
28
+
29
+ class AxisConfig:
30
+ """ Axis configuration """
31
+
32
+ def __init__(
33
+ self,
34
+ label: str = '',
35
+ measure_unit: str = '',
36
+ min_value: int | float = None,
37
+ max_value: int | float = None,
38
+ data_type: ChartDataType = ChartDataType.DATETIME,
39
+ ) -> None:
40
+ """
41
+ Constructor
42
+ ---
43
+ Arguments
44
+ - label : Label of the axis
45
+ - color : Color of the axis
46
+ - min_value : Minimum value of the axis
47
+ - max_value : Maximum value of the axis
48
+ """
49
+ self.label = label
50
+ self.measure_unit = measure_unit
51
+ self.min_value = min_value
52
+ self.max_value = max_value
53
+ self.data_type = data_type
@@ -6,14 +6,14 @@ class ChartDataType(Enum):
6
6
  """
7
7
  Chart Data Type
8
8
  """
9
- STRING = 'string'
10
- DATETIME = 'datetime'
11
- NUMBER = 'number'
9
+ STRING = 'STRING'
10
+ DATETIME = 'DATETIME'
11
+ NUMBER = 'NUMBER'
12
12
 
13
13
  @property
14
14
  def _readable(self) -> str:
15
15
  """ Readable """
16
- return f'BroadcastStatus.{self.value}'
16
+ return f'ChartDataType.{self.value}'
17
17
 
18
18
  def __str__(self) -> str:
19
19
  """ Readable property """
@@ -1,12 +1,15 @@
1
1
  """ Line chart """
2
+ import logging
2
3
 
3
4
  from .alignment import ChartAlignment
5
+ from .configuration import AxisConfig
4
6
  from .data_type import ChartDataType
5
7
  from .exceptions import ChartException
6
8
  from .render_technology import ChartRenderTechnology
7
9
  from .serie import ChartDataSerie
8
10
  from .serie_type import ChartDataSerieType
9
11
 
12
+ log = logging.getLogger(__name__)
10
13
 
11
14
  class LineChart:
12
15
  """
@@ -20,6 +23,8 @@ class LineChart:
20
23
  y_axis: list[ChartDataSerie],
21
24
  title: str = 'Chart',
22
25
  align: ChartAlignment = ChartAlignment.CENTER,
26
+ x_axis_config: AxisConfig = None,
27
+ y_axis_config: AxisConfig = None,
23
28
  ) -> None:
24
29
  """
25
30
  Constructor
@@ -31,6 +36,8 @@ class LineChart:
31
36
  Please read the documentation to more information.
32
37
  - title : Title of the chart
33
38
  - align : Alignment of the title
39
+ - x_axis_config : Configuration of the X Axis
40
+ - y_axis_config : Configuration of the Y Axis
34
41
  """
35
42
  for i, serie in enumerate(y_axis):
36
43
  if not isinstance(serie, ChartDataSerie):
@@ -49,6 +56,20 @@ class LineChart:
49
56
  raise ChartException('align must be an instance of ChartAlignment')
50
57
  self.align = align
51
58
 
59
+ if x_axis_config is None:
60
+ x_axis_config = AxisConfig()
61
+
62
+ if not isinstance(x_axis_config, AxisConfig):
63
+ raise ChartException('x_axis_config must be an instance of AxisConfig')
64
+ self.x_axis_config = x_axis_config
65
+
66
+ if y_axis_config is None:
67
+ y_axis_config = AxisConfig()
68
+
69
+ if not isinstance(y_axis_config, AxisConfig):
70
+ raise ChartException('y_axis_config must be an instance of AxisConfig')
71
+ self.y_axis_config = y_axis_config
72
+
52
73
  def render(self, technology: ChartRenderTechnology) -> dict | list[dict]:
53
74
  """
54
75
  Render chart to a graphic Library.
@@ -72,13 +93,20 @@ class LineChart:
72
93
  'configuration': self._render_syncfusion_flutter_charts(),
73
94
  }
74
95
 
96
+ if technology == ChartRenderTechnology.CANVASJS:
97
+ return {
98
+ 'library': 'CANVASJS',
99
+ 'chart': 'LINE',
100
+ 'configuration': self._render_canvasjs(),
101
+ }
102
+
75
103
  return {
76
- 'library': 'CANVASJS',
77
- 'chart': 'LINE',
78
- 'configuration': self._render_canvasjs(),
104
+ 'library': 'FLUTTER',
105
+ 'chart': 'TEXT',
106
+ 'configuration': [f'Unsupported {technology}'],
79
107
  }
80
108
 
81
- def _render_syncfusion_flutter_charts(self) -> list[dict]:
109
+ def _render_syncfusion_flutter_charts(self) -> dict:
82
110
  """
83
111
  Converts the configuration of the chart to a Flutter library syncfusion_flutter_charts.
84
112
  """
@@ -86,6 +114,7 @@ class LineChart:
86
114
 
87
115
  for serie in self.y_axis:
88
116
  if serie.serie_type not in [ChartDataSerieType.LINE, ChartDataSerieType.AREA]:
117
+ log.warning('Serie type not supported: %s', serie.serie_type)
89
118
  continue
90
119
 
91
120
  points = []
@@ -103,6 +132,7 @@ class LineChart:
103
132
  y_value = 0
104
133
 
105
134
  if not isinstance(y_value, (int, float)):
135
+ log.debug('Value isn\'t a number: %s', y_value)
106
136
  continue
107
137
 
108
138
  points.append({
@@ -117,7 +147,23 @@ class LineChart:
117
147
  'type': 'AREA' if serie.serie_type == ChartDataSerieType.AREA else 'LINE',
118
148
  })
119
149
 
120
- return series
150
+ return {
151
+ 'series': series,
152
+ 'xAxis': {
153
+ 'label': self.x_axis_config.label,
154
+ 'measureUnit': self.x_axis_config.measure_unit,
155
+ 'dataType': self.x_axis_config.data_type.value,
156
+ 'minValue': self.x_axis_config.min_value,
157
+ 'maxValue': self.x_axis_config.max_value,
158
+ },
159
+ 'yAxis': {
160
+ 'label': self.y_axis_config.label,
161
+ 'measureUnit': self.y_axis_config.measure_unit,
162
+ 'dataType': self.y_axis_config.data_type.value,
163
+ 'minValue': self.y_axis_config.min_value,
164
+ 'maxValue': self.y_axis_config.max_value,
165
+ },
166
+ }
121
167
 
122
168
  def _render_graphic(self) -> list[dict]:
123
169
  """
@@ -2,6 +2,7 @@
2
2
  from enum import Enum
3
3
 
4
4
  from .exceptions import ChartException
5
+ from .render_technology import ChartRenderTechnology
5
6
 
6
7
 
7
8
  class MapCenterType(Enum):
@@ -99,7 +100,7 @@ class MapChart:
99
100
  raise ChartException('center_latlng must be an instance of list or tuple')
100
101
  self.center_latlng = center_latlng
101
102
 
102
- def render(self, use_new_definition: bool = False) -> dict:
103
+ def render(self, technology: ChartRenderTechnology = ChartRenderTechnology.FLUTTER_MAP) -> dict:
103
104
  """
104
105
  Render chart to a graphic Library.
105
106
  We have two graphic libraries: FLUTTER_MAP and LEAFLET.
@@ -107,7 +108,7 @@ class MapChart:
107
108
  FLUTTER_MAP is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
108
109
  LEAFLET is a Javascript chart library. This is the default option.
109
110
  """
110
- if use_new_definition:
111
+ if technology == ChartRenderTechnology.FLUTTER_MAP:
111
112
  return {
112
113
  'library': 'FLUTTER_MAP',
113
114
  'chart': 'MAP',
@@ -115,9 +116,9 @@ class MapChart:
115
116
  }
116
117
 
117
118
  return {
118
- 'library': 'LEAFLET',
119
- 'chart': 'MAP',
120
- 'configuration': self._render_leaflet(),
119
+ 'library': 'FLUTTER',
120
+ 'chart': 'TEXT',
121
+ 'configuration': [f'Unsupported {technology}'],
121
122
  }
122
123
 
123
124
  def _render_flutter_map(self) -> dict:
@@ -1,4 +1,5 @@
1
1
  """ Number chart """
2
+ from .render_technology import ChartRenderTechnology
2
3
 
3
4
 
4
5
  class NumberChart:
@@ -20,14 +21,21 @@ class NumberChart:
20
21
  self.color = color
21
22
  self.label = label
22
23
 
23
- def render(self) -> dict:
24
+ def render(self, technology: ChartRenderTechnology = ChartRenderTechnology.FLUTTER) -> dict:
24
25
  """
25
26
  Render chart to a graphic Library.
26
27
  """
28
+ if technology == ChartRenderTechnology.FLUTTER:
29
+ return {
30
+ 'library': 'FLUTTER',
31
+ 'chart': 'NUMBER',
32
+ 'configuration': self._render_flutter(),
33
+ }
34
+
27
35
  return {
28
36
  'library': 'FLUTTER',
29
- 'chart': 'NUMBER',
30
- 'configuration': self._render_flutter(),
37
+ 'chart': 'TEXT',
38
+ 'configuration': [f'Unsupported {technology}'],
31
39
  }
32
40
 
33
41
  def _render_flutter(self) -> dict:
@@ -1,6 +1,7 @@
1
1
  """ Pie chart """
2
2
  from .alignment import ChartAlignment
3
3
  from .exceptions import ChartException
4
+ from .render_technology import ChartRenderTechnology
4
5
  from .serie import ChartDataSerie
5
6
 
6
7
 
@@ -37,7 +38,10 @@ class PieChart:
37
38
  raise ChartException('align must be an instance of ChartAlignment')
38
39
  self.align = align
39
40
 
40
- def render(self, use_new_definition: bool = False) -> dict | list[dict]:
41
+ def render(
42
+ self,
43
+ technology: ChartRenderTechnology = ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS,
44
+ ) -> dict | list[dict]:
41
45
  """
42
46
  Render chart to a graphic Library.
43
47
  We have two graphic libraries: GRAPHIC and CANVASJS.
@@ -45,18 +49,48 @@ class PieChart:
45
49
  GRAPHIC is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
46
50
  CANVASJS is a Javascript chart library. This is the default option.
47
51
  """
48
- if use_new_definition:
52
+ if technology == ChartRenderTechnology.GRAPHIC:
49
53
  return {
50
54
  'library': 'GRAPHIC',
51
55
  'chart': 'PIE',
52
56
  'configuration': self._render_graphic(),
53
57
  }
58
+
59
+ if technology == ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS:
60
+ return {
61
+ 'library': 'SYNCFUSION_FLUTTER_CHARTS',
62
+ 'chart': 'PIE',
63
+ 'configuration': self._render_syncfusion_flutter_charts(),
64
+ }
65
+
66
+ if technology == ChartRenderTechnology.APEX_CHARTS:
67
+ return {
68
+ 'library': 'APEXCHARTS',
69
+ 'chart': 'PIE',
70
+ 'configuration': self._render_apexcharts(),
71
+ }
72
+
54
73
  return {
55
- 'library': 'APEXCHARTS',
56
- 'chart': 'PIE',
57
- 'configuration': self._render_apexcharts(),
74
+ 'library': 'FLUTTER',
75
+ 'chart': 'TEXT',
76
+ 'configuration': [f'Unsupported {technology}'],
58
77
  }
59
78
 
79
+ def _render_syncfusion_flutter_charts(self) -> dict:
80
+ """
81
+ Converts the configuration of the chart to Syncfusion Flutter Charts.
82
+ """
83
+ series = []
84
+
85
+ for serie in self.series:
86
+ series.append({
87
+ 'label': serie.label,
88
+ 'color': serie.color,
89
+ 'value': serie.data[0],
90
+ })
91
+
92
+ return {'series': series}
93
+
60
94
  def _render_graphic(self) -> list[dict]:
61
95
  """
62
96
  Converts the configuration of the chart to a Flutter library Graphic.
@@ -1,6 +1,7 @@
1
1
  """ Radial Bar chart """
2
2
  from .alignment import ChartAlignment
3
3
  from .exceptions import ChartException
4
+ from .render_technology import ChartRenderTechnology
4
5
  from .serie import ChartDataSerie
5
6
 
6
7
 
@@ -37,7 +38,10 @@ class RadialBarChart:
37
38
  raise ChartException('align must be an instance of ChartAlignment')
38
39
  self.align = align
39
40
 
40
- def render(self, use_new_definition: bool = False) -> dict | list[dict]:
41
+ def render(
42
+ self,
43
+ technology: ChartRenderTechnology = ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS,
44
+ ) -> dict | list[dict]:
41
45
  """
42
46
  Render chart to a graphic Library.
43
47
  We have two graphic libraries: GRAPHIC and CANVASJS.
@@ -45,18 +49,48 @@ class RadialBarChart:
45
49
  GRAPHIC is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
46
50
  CANVASJS is a Javascript chart library. This is the default option.
47
51
  """
48
- if use_new_definition:
52
+ if technology == ChartRenderTechnology.GRAPHIC:
49
53
  return {
50
54
  'library': 'GRAPHIC',
51
55
  'chart': 'RADIALBAR',
52
56
  'configuration': self._render_graphic(),
53
57
  }
58
+
59
+ if technology == ChartRenderTechnology.APEX_CHARTS:
60
+ return {
61
+ 'library': 'APEXCHARTS',
62
+ 'chart': 'RADIALBAR',
63
+ 'configuration': self._render_apexcharts(),
64
+ }
65
+
66
+ if technology == ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS:
67
+ return {
68
+ 'library': 'SYNCFUSION_FLUTTER_CHARTS',
69
+ 'chart': 'RADIALBAR',
70
+ 'configuration': self._render_syncfusion_flutter_charts(),
71
+ }
72
+
54
73
  return {
55
- 'library': 'APEXCHARTS',
56
- 'chart': 'RADIALBAR',
57
- 'configuration': self._render_apexcharts(),
74
+ 'library': 'FLUTTER',
75
+ 'chart': 'TEXT',
76
+ 'configuration': [f'Unsupported {technology}'],
58
77
  }
59
78
 
79
+ def _render_syncfusion_flutter_charts(self) -> dict:
80
+ """
81
+ Converts the configuration of the chart to Syncfusion Flutter Charts.
82
+ """
83
+ series = []
84
+
85
+ for serie in self.series:
86
+ series.append({
87
+ 'label': serie.label,
88
+ 'color': serie.color,
89
+ 'value': serie.data[0],
90
+ })
91
+
92
+ return {'series': series}
93
+
60
94
  def _render_graphic(self) -> list[dict]:
61
95
  """
62
96
  Converts the configuration of the chart to a Flutter library Graphic.
@@ -9,6 +9,9 @@ class ChartRenderTechnology(Enum):
9
9
  CANVAS_JS = 'CANVAS_JS'
10
10
  GRAPHIC = 'GRAPHIC'
11
11
  SYNCFUSION_FLUTTER_CHARTS = 'SYNCFUSION_FLUTTER_CHARTS'
12
+ FLUTTER_MAP = 'FLUTTER_MAP'
13
+ APEX_CHARTS = 'APEX_CHARTS'
14
+ FLUTTER = 'FLUTTER'
12
15
 
13
16
  @property
14
17
  def _readable(self) -> str:
@@ -1,6 +1,8 @@
1
1
  """ Scatter chart """
2
2
  from .alignment import ChartAlignment
3
+ from .configuration import AxisConfig
3
4
  from .exceptions import ChartException
5
+ from .render_technology import ChartRenderTechnology
4
6
  from .serie_type import ChartDataSerieType
5
7
 
6
8
 
@@ -70,6 +72,8 @@ class ScatterChart:
70
72
  series: list[ScatterSerie],
71
73
  title: str = 'Chart',
72
74
  align: ChartAlignment = ChartAlignment.CENTER,
75
+ x_axis_config: AxisConfig = None,
76
+ y_axis_config: AxisConfig = None,
73
77
  ) -> None:
74
78
  """
75
79
  Constructor
@@ -93,7 +97,24 @@ class ScatterChart:
93
97
  raise ChartException('align must be an instance of ChartAlignment')
94
98
  self.align = align
95
99
 
96
- def render(self, use_new_definition: bool = False) -> dict | list[dict]:
100
+ if x_axis_config is None:
101
+ x_axis_config = AxisConfig(label='', measure_unit='')
102
+
103
+ if not isinstance(x_axis_config, AxisConfig):
104
+ raise ChartException('x_axis_config must be an instance of AxisConfig')
105
+ self.x_axis_config = x_axis_config
106
+
107
+ if y_axis_config is None:
108
+ y_axis_config = AxisConfig(label='', measure_unit='')
109
+
110
+ if not isinstance(y_axis_config, AxisConfig):
111
+ raise ChartException('y_axis_config must be an instance of AxisConfig')
112
+ self.y_axis_config = y_axis_config
113
+
114
+ def render(
115
+ self,
116
+ technology: ChartRenderTechnology = ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS,
117
+ ) -> dict:
97
118
  """
98
119
  Render chart to a graphic Library.
99
120
  We have two graphic libraries: GRAPHIC and APEXCHARTS.
@@ -101,17 +122,85 @@ class ScatterChart:
101
122
  GRAPHIC is a Flutter chart library. To return this option, use the parameter use_new_definition=True.
102
123
  APEXCHARTS is a Javascript chart library. This is the default option.
103
124
  """
104
- if use_new_definition:
125
+ if technology == ChartRenderTechnology.GRAPHIC:
105
126
  return {
106
127
  'library': 'GRAPHIC',
107
128
  'chart': 'SCATTER',
108
129
  'configuration': self._render_graphic(),
109
130
  }
110
131
 
132
+ if technology == ChartRenderTechnology.SYNCFUSION_FLUTTER_CHARTS:
133
+ return {
134
+ 'library': 'SYNCFUSION_FLUTTER_CHARTS',
135
+ 'chart': 'SCATTER',
136
+ 'configuration': self._render_syncfusion_flutter_charts(),
137
+ }
138
+
139
+ if technology == ChartRenderTechnology.APEX_CHARTS:
140
+ return {
141
+ 'library': 'APEXCHARTS',
142
+ 'chart': 'SCATTER',
143
+ 'configuration': self._render_apexcharts(),
144
+ }
145
+
111
146
  return {
112
- 'library': 'APEXCHARTS',
113
- 'chart': 'SCATTER',
114
- 'configuration': self._render_apexcharts(),
147
+ 'library': 'FLUTTER',
148
+ 'chart': 'TEXT',
149
+ 'configuration': [f'Unsupported {technology}'],
150
+ }
151
+
152
+ def _render_syncfusion_flutter_charts(self) -> dict:
153
+ """
154
+ Converts the configuration of the chart to Flutter library Graphic.
155
+ """
156
+ series = []
157
+ for serie in self.series:
158
+ data = []
159
+
160
+ type_serie = 'SCATTER'
161
+ if serie.serie_type == ChartDataSerieType.SCATTER:
162
+ type_serie = 'SCATTER'
163
+ elif serie.serie_type == ChartDataSerieType.LINE:
164
+ type_serie = 'LINE'
165
+ elif serie.serie_type == ChartDataSerieType.AREA:
166
+ type_serie = 'AREA'
167
+ else:
168
+ continue
169
+
170
+ for item in serie.data:
171
+ if not isinstance(item.x, (int, float)):
172
+ continue
173
+ if not isinstance(item.y, (int, float)):
174
+ continue
175
+
176
+ data.append({
177
+ 'xAxis': item.x,
178
+ 'yAxis': item.y,
179
+ })
180
+
181
+ series.append({
182
+ 'label': serie.label,
183
+ 'color': serie.color,
184
+ 'values': data,
185
+ 'type': type_serie,
186
+ })
187
+
188
+ return {
189
+ 'series': series,
190
+ 'xAxis': {
191
+ 'label': self.x_axis_config.label,
192
+ 'measureUnit': self.x_axis_config.measure_unit,
193
+ 'dataType': self.x_axis_config.data_type.value,
194
+ 'minValue': self.x_axis_config.min_value,
195
+ 'maxValue': self.x_axis_config.max_value,
196
+ },
197
+ 'yAxis': {
198
+ 'label': self.y_axis_config.label,
199
+ 'measureUnit': self.y_axis_config.measure_unit,
200
+ 'dataType': self.y_axis_config.data_type.value,
201
+ 'minValue': self.y_axis_config.min_value,
202
+ 'maxValue': self.y_axis_config.max_value,
203
+ },
115
204
  }
116
205
 
117
206
  def _render_graphic(self) -> list[dict]:
@@ -14,7 +14,7 @@ class ChartDataSerie:
14
14
  data: list[float | int | bool],
15
15
  color: str = '#000000',
16
16
  label: str = '',
17
- serie_type: ChartDataSerieType = ChartDataSerieType.NONE,
17
+ serie_type: ChartDataSerieType = ChartDataSerieType.LINE,
18
18
  data_type: ChartDataType = ChartDataType.NUMBER,
19
19
  dashed: bool = False,
20
20
  ):
@@ -1,4 +1,5 @@
1
1
  """ Number chart """
2
+ from .render_technology import ChartRenderTechnology
2
3
 
3
4
 
4
5
  class TableHeader:
@@ -43,14 +44,21 @@ class TableChart:
43
44
  self.columns = columns
44
45
  self.rows = rows
45
46
 
46
- def render(self) -> dict:
47
+ def render(self, technology: ChartRenderTechnology = ChartRenderTechnology.FLUTTER) -> dict:
47
48
  """
48
49
  Render chart to a graphic Library.
49
50
  """
51
+ if technology == ChartRenderTechnology.FLUTTER:
52
+ return {
53
+ 'library': 'FLUTTER',
54
+ 'chart': 'TABLE',
55
+ 'configuration': self._render_flutter(),
56
+ }
57
+
50
58
  return {
51
59
  'library': 'FLUTTER',
52
- 'chart': 'TABLE',
53
- 'configuration': self._render_flutter(),
60
+ 'chart': 'TEXT',
61
+ 'configuration': [f'Unsupported {technology}'],
54
62
  }
55
63
 
56
64
  def _render_flutter(self) -> dict:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 3.0.4
3
+ Version: 3.0.6
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -21,6 +21,7 @@ layrz_sdk/entities/cases/trigger.py
21
21
  layrz_sdk/entities/charts/__init__.py
22
22
  layrz_sdk/entities/charts/alignment.py
23
23
  layrz_sdk/entities/charts/bar.py
24
+ layrz_sdk/entities/charts/color.py
24
25
  layrz_sdk/entities/charts/column.py
25
26
  layrz_sdk/entities/charts/configuration.py
26
27
  layrz_sdk/entities/charts/data_type.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layrz-sdk"
3
- version = "3.0.4"
3
+ version = "3.0.6"
4
4
  description = "Layrz SDK for Python"
5
5
  authors = [
6
6
  {name = "Golden M, Inc.", email = "software@goldenm.com"}
@@ -1,25 +0,0 @@
1
- """ Charts entities """
2
-
3
-
4
- class ChartConfiguration:
5
- """
6
- Chart configuration
7
- """
8
-
9
- def __init__(self, name: str, description: str) -> None:
10
- """ Constructor """
11
- self.name = name
12
- self.description = description
13
-
14
- @property
15
- def _readable(self) -> str:
16
- """ Readable """
17
- return f'ChartConfiguration(name="{self.name}")'
18
-
19
- def __str__(self) -> str:
20
- """ Readable property """
21
- return self._readable
22
-
23
- def __repr__(self) -> str:
24
- """ Readable property """
25
- return self._readable
File without changes
File without changes
File without changes
File without changes