layrz-sdk 2.2.1__tar.gz → 2.2.3__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 (73) hide show
  1. {layrz-sdk-2.2.1/layrz_sdk.egg-info → layrz-sdk-2.2.3}/PKG-INFO +1 -1
  2. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/__init__.py +2 -1
  3. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/asset_operation_mode.py +1 -1
  4. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/__init__.py +1 -1
  5. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/col.py +9 -5
  6. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/header.py +19 -6
  7. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/page.py +22 -0
  8. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/report.py +35 -14
  9. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/row.py +6 -3
  10. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3/layrz_sdk.egg-info}/PKG-INFO +1 -1
  11. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/pyproject.toml +1 -1
  12. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/LICENSE +0 -0
  13. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/README.md +0 -0
  14. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/__init__.py +0 -0
  15. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/__init__.py +0 -0
  16. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/__init__.py +0 -0
  17. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/request.py +0 -0
  18. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/response.py +0 -0
  19. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/result.py +0 -0
  20. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/service.py +0 -0
  21. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/broadcasts/status.py +0 -0
  22. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/cases/__init__.py +0 -0
  23. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/cases/case.py +0 -0
  24. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/cases/comment.py +0 -0
  25. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/cases/trigger.py +0 -0
  26. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/__init__.py +0 -0
  27. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/alignment.py +0 -0
  28. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/bar.py +0 -0
  29. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/column.py +0 -0
  30. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/configuration.py +0 -0
  31. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/data_type.py +0 -0
  32. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/exceptions.py +0 -0
  33. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/html.py +0 -0
  34. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/line.py +0 -0
  35. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/map.py +0 -0
  36. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/number.py +0 -0
  37. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/pie.py +0 -0
  38. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/radar.py +0 -0
  39. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/radial_bar.py +0 -0
  40. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/scatter.py +0 -0
  41. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/serie.py +0 -0
  42. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/serie_type.py +0 -0
  43. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/table.py +0 -0
  44. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/charts/timeline.py +0 -0
  45. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/checkpoints/__init__.py +0 -0
  46. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/checkpoints/checkpoint.py +0 -0
  47. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/checkpoints/geofence.py +0 -0
  48. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/checkpoints/waypoint.py +0 -0
  49. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/events/__init__.py +0 -0
  50. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/events/event.py +0 -0
  51. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/formatting/__init__.py +0 -0
  52. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/formatting/text_align.py +0 -0
  53. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/__init__.py +0 -0
  54. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/asset.py +0 -0
  55. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/custom_field.py +0 -0
  56. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/device.py +0 -0
  57. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/sensor.py +0 -0
  58. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/general/user.py +0 -0
  59. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/repcom/__init__.py +0 -0
  60. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/repcom/transaction.py +0 -0
  61. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/reports/format.py +0 -0
  62. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/telemetry/__init__.py +0 -0
  63. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/telemetry/message.py +0 -0
  64. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/entities/telemetry/position.py +0 -0
  65. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/helpers/__init__.py +0 -0
  66. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/helpers/color.py +0 -0
  67. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/lcl/__init__.py +0 -0
  68. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz/sdk/lcl/core.py +0 -0
  69. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz_sdk.egg-info/SOURCES.txt +0 -0
  70. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz_sdk.egg-info/dependency_links.txt +0 -0
  71. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz_sdk.egg-info/requires.txt +0 -0
  72. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/layrz_sdk.egg-info/top_level.txt +0 -0
  73. {layrz-sdk-2.2.1 → layrz-sdk-2.2.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 2.2.1
3
+ Version: 2.2.3
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>
@@ -20,6 +20,7 @@ from .general import (Asset, AssetOperationMode, CustomField, Device, Sensor, Us
20
20
  # REPCOM entities
21
21
  from .repcom import Transaction
22
22
  # Reports entities
23
- from .reports import (Report, ReportCol, ReportDataType, ReportFormat, ReportHeader, ReportPage, ReportRow)
23
+ from .reports import (CustomReportPage, Report, ReportCol, ReportDataType, ReportFormat, ReportHeader, ReportPage,
24
+ ReportRow)
24
25
  # Telemetry entities
25
26
  from .telemetry import Message, Position
@@ -11,7 +11,7 @@ class AssetOperationMode(Enum):
11
11
  MULTIPLE = 'MULTIPLE'
12
12
  ASSETMULTIPLE = 'ASSETMULTIPLE'
13
13
  DISCONNECTED = 'DISCONNECTED'
14
- FAILOVER = 'FAILOVER'
14
+ STATIC = 'STATIC'
15
15
 
16
16
  @property
17
17
  def _readable(self) -> str:
@@ -2,6 +2,6 @@
2
2
  from .col import ReportCol, ReportDataType
3
3
  from .format import ReportFormat
4
4
  from .header import ReportHeader
5
- from .page import ReportPage
5
+ from .page import ReportPage, CustomReportPage
6
6
  from .report import Report
7
7
  from .row import ReportRow
@@ -1,4 +1,5 @@
1
1
  """ Report col """
2
+ import warnings
2
3
  from enum import Enum
3
4
  from typing import Any
4
5
 
@@ -38,6 +39,8 @@ class ReportCol:
38
39
  - content : Display content
39
40
  - color : Cell color
40
41
  - text_color : Text color
42
+ Deprecated, The text color now will use the luminance of the background color to determine the
43
+ text color
41
44
  - align : Text Alignment
42
45
  - data_type : Data type
43
46
  - datetime_format : Date time format
@@ -48,7 +51,7 @@ class ReportCol:
48
51
  self,
49
52
  content: Any,
50
53
  color: str = '#ffffff',
51
- text_color: str = '#000000',
54
+ text_color: str = None,
52
55
  align: TextAlignment = TextAlignment.LEFT,
53
56
  data_type: ReportDataType = ReportDataType.STR,
54
57
  datetime_format: str = '%Y-%m-%d %H:%M:%S',
@@ -57,7 +60,10 @@ class ReportCol:
57
60
  ) -> None:
58
61
  self.content = content
59
62
  self.color = color
60
- self.text_color = text_color
63
+
64
+ if text_color is not None:
65
+ warnings.warn('text_color is deprecated, use color instead', DeprecationWarning)
66
+
61
67
  self.align = align
62
68
  self.data_type = data_type
63
69
  self.datetime_format = datetime_format
@@ -67,9 +73,7 @@ class ReportCol:
67
73
  @property
68
74
  def _readable(self) -> str:
69
75
  """ Readable property """
70
- return f'ReportCol(content={self.content}, color={self.color}, text_color={self.text_color}, '+\
71
- f'align={self.align}, data_type={self.data_type}, datetime_format={self.datetime_format}, ' +\
72
- f'currency_symbol={self.currency_symbol}, bold={self.bold})'
76
+ return f'ReportCol(content={self.content})'
73
77
 
74
78
  def __repr__(self) -> str:
75
79
  """ Readable property """
@@ -1,4 +1,6 @@
1
1
  """ Report header """
2
+ import warnings
3
+
2
4
  from ..formatting.text_align import TextAlignment
3
5
 
4
6
 
@@ -9,30 +11,41 @@ class ReportHeader:
9
11
  Attributes
10
12
  - content : Display name
11
13
  - width : Column width in points (pt)
14
+ Deprecated, now uses the `autofit()` method of `xlsxwriter`
12
15
  - color : Cell color
13
16
  - text_color : Text color
17
+ Deprecated, The text color now will use the luminance of the background color to determine the
18
+ text color
14
19
  - align : Text Alignment
20
+ - bold : Should the text be bold
15
21
  """
16
22
 
17
23
  def __init__(
18
24
  self,
19
25
  content: str,
20
- width: int = 10,
26
+ width: int = None,
21
27
  color: str = '#ffffff',
22
- text_color: str = '#000000',
28
+ text_color: str = None,
23
29
  align: TextAlignment = TextAlignment.CENTER,
30
+ bold: bool = False,
24
31
  ) -> None:
25
32
  self.content = content
26
- self.width = width
33
+
34
+ if width is not None:
35
+ warnings.warn('width is deprecated, use width instead', DeprecationWarning)
36
+
27
37
  self.color = color
28
- self.text_color = text_color
38
+
39
+ if text_color is not None:
40
+ warnings.warn('text_color is deprecated, use color instead', DeprecationWarning)
41
+
29
42
  self.align = align
43
+ self.bold = bold
30
44
 
31
45
  @property
32
46
  def _readable(self) -> str:
33
47
  """ Readable property """
34
- return f'ReportHeader(content={self.content}, width={self.width}, color={self.color}, ' +\
35
- f'text_color={self.text_color}, align={self.align})'
48
+ return f'ReportHeader(content={self.content})'
36
49
 
37
50
  def __str__(self) -> str:
38
51
  """ Readable property """
@@ -37,3 +37,25 @@ class ReportPage:
37
37
  def __repr__(self) -> str:
38
38
  """ Readable property """
39
39
  return self._readable
40
+
41
+
42
+ class CustomReportPage:
43
+ """
44
+ Custom report page
45
+ Basically it's a wrapper of the `xlswriter` worksheet that uses a function to construct the page
46
+ ---
47
+ Attributes:
48
+ - name : Name of the page. Length should be less than 60 characters
49
+ Methods:
50
+ - builder(Worksheet) -> None : Function to build the page
51
+ The builder receives a `Worksheet` object as an argument and shouldn't
52
+ return anything.
53
+ """
54
+
55
+ def __init__(self, name: str, builder: callable) -> None:
56
+ """ Constructor """
57
+ self.name = name
58
+
59
+ if not callable(builder):
60
+ raise ValueError('builder should be a callable')
61
+ self.builder = builder
@@ -1,12 +1,15 @@
1
1
  """ Report class """
2
2
  import os
3
3
  import time
4
+ import warnings
4
5
 
5
6
  import xlsxwriter
6
7
 
8
+ from layrz.sdk.helpers.color import use_black
9
+
7
10
  from .col import ReportDataType
8
11
  from .format import ReportFormat
9
- from .page import ReportPage
12
+ from .page import CustomReportPage, ReportPage
10
13
 
11
14
 
12
15
  class Report:
@@ -22,11 +25,16 @@ class Report:
22
25
  def __init__(
23
26
  self,
24
27
  name: str,
25
- pages: list[ReportPage],
26
- export_format: ReportFormat,
28
+ pages: list[ReportPage | CustomReportPage],
29
+ export_format: ReportFormat = None,
27
30
  ) -> None:
28
31
  self.name = name
29
32
  self.pages = pages
33
+
34
+ if export_format is not None:
35
+ warnings.warn('export_format is deprecated, submit the export format in the `export()` method instead',
36
+ DeprecationWarning)
37
+
30
38
  self.export_format = export_format
31
39
 
32
40
  @property
@@ -37,7 +45,7 @@ class Report:
37
45
  @property
38
46
  def _readable(self) -> str:
39
47
  """ Readable property """
40
- return f'Report(name={self.name}, pages={self.pages}, export_format={self.export_format})'
48
+ return f'Report(name={self.name}, pages={len(self.pages)})'
41
49
 
42
50
  def __repr__(self) -> str:
43
51
  """ Readable property """
@@ -76,7 +84,7 @@ class Report:
76
84
  for header in page.headers:
77
85
  headers.append({
78
86
  'content': header.content,
79
- 'text_color': header.text_color,
87
+ 'text_color': '#000000' if use_black(header.color) else '#ffffff',
80
88
  'color': header.color,
81
89
  })
82
90
  rows = []
@@ -85,7 +93,7 @@ class Report:
85
93
  for cell in row.content:
86
94
  cells.append({
87
95
  'content': cell.content,
88
- 'text_color': cell.text_color,
96
+ 'text_color': '#000000' if use_black(cell.color) else '#ffffff',
89
97
  'color': cell.color,
90
98
  'data_type': cell.data_type.value,
91
99
  })
@@ -111,40 +119,51 @@ class Report:
111
119
  book = xlsxwriter.Workbook(full_path)
112
120
 
113
121
  for page in self.pages:
114
- sheet = book.add_worksheet(page.name[0:31].replace('[', '').replace(']', ''))
122
+ sheet_name = page.name[0:31]
123
+
124
+ # Allow only numbers, letters, spaces and _ or - characters
125
+ # Other characters will be removed
126
+ sheet_name = ''.join(e for e in sheet_name if e.isalnum() or e in [' ', '_', '-'])
127
+ sheet = book.add_worksheet(sheet_name)
128
+
129
+ if isinstance(page, CustomReportPage):
130
+ page.builder(sheet)
131
+ sheet.autofit()
132
+ continue
133
+
115
134
  if page.freeze_header:
116
135
  sheet.freeze_panes(1, 0)
117
136
 
118
137
  for i, header in enumerate(page.headers):
119
138
  style = book.add_format({
120
139
  'align': header.align.value,
121
- 'font_color': header.text_color,
140
+ 'font_color': '#000000' if use_black(header.color) else '#ffffff',
122
141
  'bg_color': header.color,
142
+ 'bold': header.bold,
123
143
  'valign': 'vcenter',
124
- 'font_size': 14,
144
+ 'font_size': 11,
125
145
  'top': 1,
126
146
  'left': 1,
127
147
  'right': 1,
128
148
  'bottom': 1,
129
- 'font_name': 'Microsoft YaHei Light'
149
+ 'font_name': 'Aptos Narrow',
130
150
  })
131
151
  sheet.write(0, i, header.content, style)
132
- sheet.set_column(i, i, header.width)
133
152
 
134
153
  for i, row in enumerate(page.rows):
135
154
  for j, cell in enumerate(row.content):
136
155
  style = {
137
156
  'align': cell.align.value,
138
- 'font_color': cell.text_color,
157
+ 'font_color': '#000000' if use_black(cell.color) else '#ffffff',
139
158
  'bg_color': cell.color,
140
159
  'bold': cell.bold,
141
160
  'valign': 'vcenter',
142
- 'font_size': 10,
161
+ 'font_size': 11,
143
162
  'top': 1,
144
163
  'left': 1,
145
164
  'right': 1,
146
165
  'bottom': 1,
147
- 'font_name': 'Microsoft YaHei Light'
166
+ 'font_name': 'Aptos Narrow',
148
167
  }
149
168
 
150
169
  if cell.data_type == ReportDataType.BOOL:
@@ -169,6 +188,8 @@ class Report:
169
188
  sheet.set_row(i + 1, None, None, {'level': 1, 'hidden': True})
170
189
  else:
171
190
  sheet.set_row(i + 1, None, None, {'collapsed': True})
191
+
192
+ sheet.autofit()
172
193
  book.close()
173
194
 
174
195
  return full_path
@@ -17,18 +17,21 @@ class ReportRow:
17
17
  def __init__(
18
18
  self,
19
19
  content: list[ReportCol],
20
- height: float = 14,
20
+ height: float = None,
21
21
  compact: bool = False,
22
22
  ) -> None:
23
23
  """ Constructor """
24
24
  self.content = content
25
- self.height = height
25
+
26
+ if height is not None:
27
+ raise DeprecationWarning('height is deprecated, use height instead')
28
+
26
29
  self.compact = compact
27
30
 
28
31
  @property
29
32
  def _readable(self) -> str:
30
33
  """ Readable property """
31
- return f'ReportRow(content={self.content}, height={self.height}, compact={self.compact})'
34
+ return f'ReportRow(content={self.content})'
32
35
 
33
36
  def __str__(self) -> str:
34
37
  """ Readable property """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: layrz-sdk
3
- Version: 2.2.1
3
+ Version: 2.2.3
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layrz-sdk"
3
- version = "2.2.1"
3
+ version = "2.2.3"
4
4
  description = "Layrz SDK for Python"
5
5
  authors = [
6
6
  {name = "Golden M, Inc.", email = "software@goldenm.com"}
File without changes
File without changes
File without changes
File without changes