layrz-sdk 3.0.6__py3-none-any.whl → 3.0.8__py3-none-any.whl

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 (58) hide show
  1. layrz_sdk/entities/__init__.py +55 -9
  2. layrz_sdk/entities/broadcasts/request.py +5 -4
  3. layrz_sdk/entities/broadcasts/response.py +5 -4
  4. layrz_sdk/entities/broadcasts/result.py +6 -5
  5. layrz_sdk/entities/broadcasts/service.py +5 -4
  6. layrz_sdk/entities/broadcasts/status.py +4 -3
  7. layrz_sdk/entities/cases/case.py +13 -12
  8. layrz_sdk/entities/cases/comment.py +5 -4
  9. layrz_sdk/entities/cases/trigger.py +5 -4
  10. layrz_sdk/entities/charts/__init__.py +1 -1
  11. layrz_sdk/entities/charts/alignment.py +4 -3
  12. layrz_sdk/entities/charts/bar.py +9 -7
  13. layrz_sdk/entities/charts/color.py +5 -4
  14. layrz_sdk/entities/charts/column.py +9 -7
  15. layrz_sdk/entities/charts/configuration.py +9 -7
  16. layrz_sdk/entities/charts/data_type.py +4 -3
  17. layrz_sdk/entities/charts/exceptions.py +6 -5
  18. layrz_sdk/entities/charts/html.py +5 -3
  19. layrz_sdk/entities/charts/line.py +9 -8
  20. layrz_sdk/entities/charts/map.py +13 -13
  21. layrz_sdk/entities/charts/number.py +5 -3
  22. layrz_sdk/entities/charts/pie.py +9 -7
  23. layrz_sdk/entities/charts/radar.py +6 -4
  24. layrz_sdk/entities/charts/radial_bar.py +9 -7
  25. layrz_sdk/entities/charts/render_technology.py +4 -3
  26. layrz_sdk/entities/charts/scatter.py +12 -10
  27. layrz_sdk/entities/charts/serie.py +5 -3
  28. layrz_sdk/entities/charts/serie_type.py +4 -3
  29. layrz_sdk/entities/charts/table.py +15 -17
  30. layrz_sdk/entities/charts/timeline.py +7 -6
  31. layrz_sdk/entities/checkpoints/checkpoint.py +6 -5
  32. layrz_sdk/entities/checkpoints/geofence.py +5 -4
  33. layrz_sdk/entities/checkpoints/waypoint.py +5 -4
  34. layrz_sdk/entities/events/event.py +5 -4
  35. layrz_sdk/entities/formatting/text_align.py +4 -3
  36. layrz_sdk/entities/general/asset.py +16 -10
  37. layrz_sdk/entities/general/asset_operation_mode.py +5 -3
  38. layrz_sdk/entities/general/custom_field.py +5 -4
  39. layrz_sdk/entities/general/device.py +5 -4
  40. layrz_sdk/entities/general/sensor.py +5 -4
  41. layrz_sdk/entities/general/user.py +5 -4
  42. layrz_sdk/entities/repcom/transaction.py +3 -2
  43. layrz_sdk/entities/reports/col.py +9 -9
  44. layrz_sdk/entities/reports/format.py +11 -7
  45. layrz_sdk/entities/reports/header.py +12 -10
  46. layrz_sdk/entities/reports/page.py +10 -8
  47. layrz_sdk/entities/reports/report.py +126 -66
  48. layrz_sdk/entities/reports/row.py +9 -8
  49. layrz_sdk/entities/telemetry/message.py +6 -5
  50. layrz_sdk/entities/telemetry/position.py +5 -4
  51. layrz_sdk/helpers/color.py +6 -5
  52. layrz_sdk/lcl/core.py +131 -120
  53. {layrz_sdk-3.0.6.dist-info → layrz_sdk-3.0.8.dist-info}/METADATA +6 -1
  54. layrz_sdk-3.0.8.dist-info/RECORD +69 -0
  55. {layrz_sdk-3.0.6.dist-info → layrz_sdk-3.0.8.dist-info}/WHEEL +1 -1
  56. layrz_sdk-3.0.6.dist-info/RECORD +0 -69
  57. {layrz_sdk-3.0.6.dist-info → layrz_sdk-3.0.8.dist-info}/LICENSE +0 -0
  58. {layrz_sdk-3.0.6.dist-info → layrz_sdk-3.0.8.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,6 @@
1
1
  """ Checkpoints entitites """
2
2
  from datetime import datetime
3
+ from typing import List, Self
3
4
 
4
5
  from .waypoint import Waypoint
5
6
 
@@ -17,10 +18,10 @@ class Checkpoint:
17
18
  """
18
19
 
19
20
  def __init__(
20
- self,
21
+ self: Self,
21
22
  pk: int,
22
23
  asset_id: int,
23
- waypoints: list[Waypoint],
24
+ waypoints: List[Waypoint],
24
25
  start_at: datetime,
25
26
  end_at: datetime,
26
27
  ) -> None:
@@ -32,15 +33,15 @@ class Checkpoint:
32
33
  self.end_at = end_at
33
34
 
34
35
  @property
35
- def _readable(self) -> str:
36
+ def _readable(self: Self) -> str | None | bool:
36
37
  """ Readable """
37
38
  return f'Checkpoint(pk={self.pk}, asset_id={self.asset_id}, waypoints={self.waypoints}, ' +\
38
39
  f'start_at={self.start_at}, end_at={self.end_at})'
39
40
 
40
- def __str__(self) -> str:
41
+ def __str__(self: Self) -> str | None | bool:
41
42
  """ Readable property """
42
43
  return self._readable
43
44
 
44
- def __repr__(self) -> str:
45
+ def __repr__(self: Self) -> str | None | bool:
45
46
  """ Readable property """
46
47
  return self._readable
@@ -1,4 +1,5 @@
1
1
  """ Geofence entity """
2
+ from typing import Self
2
3
 
3
4
 
4
5
  class Geofence:
@@ -11,21 +12,21 @@ class Geofence:
11
12
  - color : Geofence color in Hex format
12
13
  """
13
14
 
14
- def __init__(self, pk: int, name: str, color: str) -> None:
15
+ def __init__(self: Self, pk: int, name: str, color: str) -> None:
15
16
  """ Constructor """
16
17
  self.pk = pk
17
18
  self.name = name
18
19
  self.color = color
19
20
 
20
21
  @property
21
- def _readable(self) -> str:
22
+ def _readable(self: Self) -> str | None | bool:
22
23
  """ Readable """
23
24
  return f'Geofence(pk={self.pk}, name={self.name}, color={self.color})'
24
25
 
25
- def __str__(self) -> str:
26
+ def __str__(self: Self) -> str | None | bool:
26
27
  """ Readable property """
27
28
  return self._readable
28
29
 
29
- def __repr__(self) -> str:
30
+ def __repr__(self: Self) -> str | None | bool:
30
31
  """ Readable property """
31
32
  return self._readable
@@ -1,5 +1,6 @@
1
1
  """ Waypoint entity """
2
2
  from datetime import datetime
3
+ from typing import Self
3
4
 
4
5
  from .geofence import Geofence
5
6
 
@@ -18,7 +19,7 @@ class Waypoint:
18
19
  """
19
20
 
20
21
  def __init__(
21
- self,
22
+ self: Self,
22
23
  pk: int,
23
24
  geofence: Geofence,
24
25
  start_at: datetime,
@@ -35,15 +36,15 @@ class Waypoint:
35
36
  self.sequence_ideal = sequence_ideal
36
37
 
37
38
  @property
38
- def _readable(self) -> str:
39
+ def _readable(self: Self) -> str | None | bool:
39
40
  """ Readable """
40
41
  return f'Waypoint(pk={self.pk}, geofence={self.geofence}, start_at={self.start_at}, ' +\
41
42
  f'end_at={self.end_at}, sequence_real={self.sequence_real}, sequence_ideal={self.sequence_ideal})'
42
43
 
43
- def __str__(self) -> str:
44
+ def __str__(self: Self) -> str | None | bool:
44
45
  """ Readable property """
45
46
  return self._readable
46
47
 
47
- def __repr__(self) -> str:
48
+ def __repr__(self: Self) -> str | None | bool:
48
49
  """ Readable property """
49
50
  return self._readable
@@ -1,5 +1,6 @@
1
1
  """ Event entity """
2
2
  from datetime import datetime
3
+ from typing import Self
3
4
 
4
5
  from layrz_sdk.entities.cases.trigger import Trigger
5
6
  from layrz_sdk.entities.telemetry.message import Message
@@ -19,7 +20,7 @@ class Event:
19
20
  """
20
21
 
21
22
  def __init__(
22
- self,
23
+ self: Self,
23
24
  pk: int,
24
25
  trigger: Trigger,
25
26
  asset_id: int,
@@ -34,15 +35,15 @@ class Event:
34
35
  self.activated_at = activated_at
35
36
 
36
37
  @property
37
- def _readable(self) -> str:
38
+ def _readable(self: Self) -> str | None | bool:
38
39
  """ Readable """
39
40
  return f'Event(pk={self.pk}, trigger={self.trigger}, asset_id={self.asset_id}, ' +\
40
41
  f'message={self.message}, activated_at={self.activated_at})'
41
42
 
42
- def __str__(self) -> str:
43
+ def __str__(self: Self) -> str | None | bool:
43
44
  """ Readable property """
44
45
  return self._readable
45
46
 
46
- def __repr__(self) -> str:
47
+ def __repr__(self: Self) -> str | None | bool:
47
48
  """ Readable property """
48
49
  return self._readable
@@ -1,5 +1,6 @@
1
1
  """ Text alignment """
2
2
  from enum import Enum
3
+ from typing import Self
3
4
 
4
5
 
5
6
  class TextAlignment(Enum):
@@ -10,14 +11,14 @@ class TextAlignment(Enum):
10
11
  JUSTIFY = 'justify'
11
12
 
12
13
  @property
13
- def _readable(self) -> str:
14
+ def _readable(self: Self) -> str | None | bool:
14
15
  """ Readable """
15
16
  return f'TextAlignment.{self.value}'
16
17
 
17
- def __str__(self) -> str:
18
+ def __str__(self: Self) -> str | None | bool:
18
19
  """ Readable property """
19
20
  return self._readable
20
21
 
21
- def __repr__(self) -> str:
22
+ def __repr__(self: Self) -> str | None | bool:
22
23
  """ Readable property """
23
24
  return self._readable
@@ -1,4 +1,6 @@
1
1
  """ Asset Entity """
2
+ from typing import List, Self
3
+
2
4
  from .asset_operation_mode import AssetOperationMode
3
5
  from .custom_field import CustomField
4
6
  from .device import Device
@@ -23,18 +25,18 @@ class Asset:
23
25
  """
24
26
 
25
27
  def __init__(
26
- self,
28
+ self: Self,
27
29
  pk: int,
28
30
  name: str,
29
31
  vin: str,
30
32
  plate: str,
31
33
  asset_type: int,
32
34
  operation_mode: AssetOperationMode,
33
- sensors: list[Sensor] = None,
34
- custom_fields: list[CustomField] = None,
35
- devices: list[Device] = None,
36
- children: list = None,
37
- ):
35
+ sensors: List[Sensor] = None,
36
+ custom_fields: List[CustomField] = None,
37
+ devices: List[Device] = None,
38
+ children: List = None,
39
+ ) -> None:
38
40
  """ Constructor """
39
41
  self.pk = pk
40
42
  self.name = name
@@ -45,19 +47,23 @@ class Asset:
45
47
  self.sensors = sensors if sensors else []
46
48
  self.custom_fields = custom_fields if custom_fields else []
47
49
  self.devices = devices if devices else []
48
- self.children = children if children else []
50
+
51
+ if children and self.operation_mode == AssetOperationMode.ASSETMULTIPLE:
52
+ self.children = children
53
+ else:
54
+ self.children = []
49
55
 
50
56
  @property
51
- def _readable(self) -> str:
57
+ def _readable(self: Self) -> str | None | bool:
52
58
  """ Readable """
53
59
  return f'Asset(pk={self.pk}, name={self.name}, vin={self.vin}, plate={self.plate}, ' +\
54
60
  f'asset_type={self.asset_type}, operation_mode={self.operation_mode}, ' +\
55
61
  f'custom_fields={self.custom_fields}, children={self.children}, sensors={self.sensors})'
56
62
 
57
- def __str__(self) -> str:
63
+ def __str__(self: Self) -> str | None | bool:
58
64
  """ Readable property """
59
65
  return self._readable
60
66
 
61
- def __repr__(self) -> str:
67
+ def __repr__(self: Self) -> str | None | bool:
62
68
  """ Readable property """
63
69
  return self._readable
@@ -1,5 +1,6 @@
1
1
  """ Asset Operation Mode """
2
2
  from enum import Enum
3
+ from typing import Self
3
4
 
4
5
 
5
6
  class AssetOperationMode(Enum):
@@ -12,16 +13,17 @@ class AssetOperationMode(Enum):
12
13
  ASSETMULTIPLE = 'ASSETMULTIPLE'
13
14
  DISCONNECTED = 'DISCONNECTED'
14
15
  STATIC = 'STATIC'
16
+ ZONE = 'ZONE'
15
17
 
16
18
  @property
17
- def _readable(self) -> str:
19
+ def _readable(self: Self) -> str | None | bool:
18
20
  """ Readable """
19
21
  return self.value
20
22
 
21
- def __str__(self) -> str:
23
+ def __str__(self: Self) -> str | None | bool:
22
24
  """ Readable property """
23
25
  return self._readable
24
26
 
25
- def __repr__(self) -> str:
27
+ def __repr__(self: Self) -> str | None | bool:
26
28
  """ Readable property """
27
29
  return self._readable
@@ -1,4 +1,5 @@
1
1
  """ Custom Field entitiy """
2
+ from typing import Self
2
3
 
3
4
 
4
5
  class CustomField:
@@ -10,20 +11,20 @@ class CustomField:
10
11
  - value : Value of the custom field
11
12
  """
12
13
 
13
- def __init__(self, name: str, value: str) -> None:
14
+ def __init__(self: Self, name: str, value: str) -> None:
14
15
  """ Constructor """
15
16
  self.name = name
16
17
  self.value = value
17
18
 
18
19
  @property
19
- def _readable(self) -> str:
20
+ def _readable(self: Self) -> str | None | bool:
20
21
  """ Readable """
21
22
  return f'CustomField(name={self.name}, value={self.value})'
22
23
 
23
- def __str__(self) -> str:
24
+ def __str__(self: Self) -> str | None | bool:
24
25
  """ Readable property """
25
26
  return self._readable
26
27
 
27
- def __repr__(self) -> str:
28
+ def __repr__(self: Self) -> str | None | bool:
28
29
  """ Readable property """
29
30
  return self._readable
@@ -1,4 +1,5 @@
1
1
  """ Device entitiy """
2
+ from typing import Self
2
3
 
3
4
 
4
5
  class Device:
@@ -14,7 +15,7 @@ class Device:
14
15
  """
15
16
 
16
17
  def __init__(
17
- self,
18
+ self: Self,
18
19
  pk: int,
19
20
  name: str,
20
21
  ident: str,
@@ -29,15 +30,15 @@ class Device:
29
30
  self.is_primary = is_primary
30
31
 
31
32
  @property
32
- def _readable(self) -> str:
33
+ def _readable(self: Self) -> str | None | bool:
33
34
  """ Readable """
34
35
  return f'Device(pk={self.pk}, ident={self.ident}, name={self.name}, protocol={self.protocol}, ' +\
35
36
  f'is_primary={self.is_primary})'
36
37
 
37
- def __str__(self) -> str:
38
+ def __str__(self: Self) -> str | None | bool:
38
39
  """ Readable property """
39
40
  return self._readable
40
41
 
41
- def __repr__(self) -> str:
42
+ def __repr__(self: Self) -> str | None | bool:
42
43
  """ Readable property """
43
44
  return self._readable
@@ -1,4 +1,5 @@
1
1
  """ Sensor entity """
2
+ from typing import Self
2
3
 
3
4
 
4
5
  class Sensor:
@@ -11,21 +12,21 @@ class Sensor:
11
12
  slug : Slug of the sensor
12
13
  """
13
14
 
14
- def __init__(self, pk: int, name: str, slug: str) -> None:
15
+ def __init__(self: Self, pk: int, name: str, slug: str) -> None:
15
16
  """ Constructor """
16
17
  self.pk = pk
17
18
  self.name = name
18
19
  self.slug = slug
19
20
 
20
21
  @property
21
- def _readable(self) -> str:
22
+ def _readable(self: Self) -> str | None | bool:
22
23
  """ Readable """
23
24
  return f'Sensor(pk={self.pk}, name={self.name}, slug={self.slug})'
24
25
 
25
- def __str__(self) -> str:
26
+ def __str__(self: Self) -> str | None | bool:
26
27
  """ Readable property """
27
28
  return self._readable
28
29
 
29
- def __repr__(self) -> str:
30
+ def __repr__(self: Self) -> str | None | bool:
30
31
  """ Readable property """
31
32
  return self._readable
@@ -1,4 +1,5 @@
1
1
  """ User entity """
2
+ from typing import Self
2
3
 
3
4
 
4
5
  class User:
@@ -10,20 +11,20 @@ class User:
10
11
  name : User name
11
12
  """
12
13
 
13
- def __init__(self, pk: int, name: str) -> None:
14
+ def __init__(self: Self, pk: int, name: str) -> None:
14
15
  """ Constructor """
15
16
  self.pk = pk
16
17
  self.name = name
17
18
 
18
19
  @property
19
- def _readable(self) -> str:
20
+ def _readable(self: Self) -> str | None | bool:
20
21
  """ Readable """
21
22
  return f'User(pk={self.pk}, name={self.name})'
22
23
 
23
- def __str__(self) -> str:
24
+ def __str__(self: Self) -> str | None | bool:
24
25
  """ Readable property """
25
26
  return self._readable
26
27
 
27
- def __repr__(self) -> str:
28
+ def __repr__(self: Self) -> str | None | bool:
28
29
  """ Readable property """
29
30
  return self._readable
@@ -1,5 +1,6 @@
1
1
  """ Transaction entity """
2
2
  from datetime import datetime, timedelta
3
+ from typing import Self
3
4
 
4
5
  from layrz_sdk.entities.general.asset import Asset
5
6
 
@@ -24,7 +25,7 @@ class Transaction:
24
25
  """
25
26
 
26
27
  def __init__(
27
- self,
28
+ self: Self,
28
29
  pk: int,
29
30
  asset: Asset,
30
31
  amount: float,
@@ -37,7 +38,7 @@ class Transaction:
37
38
  geofence_name: str,
38
39
  received_at: datetime,
39
40
  is_wildcard: bool,
40
- ):
41
+ ) -> None:
41
42
  """ Constructor """
42
43
  self.pk = pk
43
44
  self.asset = asset
@@ -1,7 +1,7 @@
1
1
  """ Report col """
2
2
  import warnings
3
3
  from enum import Enum
4
- from typing import Any
4
+ from typing import Any, Self
5
5
 
6
6
  from ..formatting.text_align import TextAlignment
7
7
 
@@ -18,15 +18,15 @@ class ReportDataType(Enum):
18
18
  CURRENCY = 'currency'
19
19
 
20
20
  @property
21
- def _readable(self) -> str:
21
+ def _readable(self: Self) -> str | None | bool:
22
22
  """ Readable """
23
23
  return f'ReportDataType.{self.value}'
24
24
 
25
- def __str__(self) -> str:
25
+ def __str__(self: Self) -> str | None | bool:
26
26
  """ Readable property """
27
27
  return self._readable
28
28
 
29
- def __repr__(self) -> str:
29
+ def __repr__(self: Self) -> str | None | bool:
30
30
  """ Readable property """
31
31
  return self._readable
32
32
 
@@ -48,7 +48,7 @@ class ReportCol:
48
48
  """
49
49
 
50
50
  def __init__(
51
- self,
51
+ self: Self,
52
52
  content: Any,
53
53
  color: str = '#ffffff',
54
54
  text_color: str = None,
@@ -62,7 +62,7 @@ class ReportCol:
62
62
  self.color = color
63
63
 
64
64
  if text_color is not None:
65
- warnings.warn('text_color is deprecated, use color instead', DeprecationWarning)
65
+ warnings.warn('text_color is deprecated, use color instead', DeprecationWarning, stacklevel=2)
66
66
 
67
67
  self.align = align
68
68
  self.data_type = data_type
@@ -71,14 +71,14 @@ class ReportCol:
71
71
  self.bold = bold
72
72
 
73
73
  @property
74
- def _readable(self) -> str:
74
+ def _readable(self: Self) -> str | None | bool:
75
75
  """ Readable property """
76
76
  return f'ReportCol(content={self.content})'
77
77
 
78
- def __repr__(self) -> str:
78
+ def __repr__(self: Self) -> str | None | bool:
79
79
  """ Readable property """
80
80
  return self._readable
81
81
 
82
- def __str__(self) -> str:
82
+ def __str__(self: Self) -> str | None | bool:
83
83
  """ Readable property """
84
84
  return self._readable
@@ -1,23 +1,27 @@
1
- """ Report formats """
1
+ """Report formats"""
2
+
2
3
  from enum import Enum
4
+ from typing import Self
3
5
 
4
6
 
5
7
  class ReportFormat(Enum):
6
8
  """
7
9
  Report format definition.
8
10
  """
11
+
9
12
  MICROSOFT_EXCEL = 'MICROSOFT_EXCEL'
10
13
  JSON = 'JSON'
14
+ PDF = 'PDF'
11
15
 
12
16
  @property
13
- def _readable(self) -> str:
14
- """ Readable """
17
+ def _readable(self: Self) -> str:
18
+ """Readable"""
15
19
  return f'ReportFormat.{self.value}'
16
20
 
17
- def __str__(self) -> str:
18
- """ Readable property """
21
+ def __str__(self: Self) -> str:
22
+ """Readable property"""
19
23
  return self._readable
20
24
 
21
- def __repr__(self) -> str:
22
- """ Readable property """
25
+ def __repr__(self: Self) -> str:
26
+ """Readable property"""
23
27
  return self._readable
@@ -1,5 +1,7 @@
1
- """ Report header """
1
+ """Report header"""
2
+
2
3
  import warnings
4
+ from typing import Self
3
5
 
4
6
  from ..formatting.text_align import TextAlignment
5
7
 
@@ -21,7 +23,7 @@ class ReportHeader:
21
23
  """
22
24
 
23
25
  def __init__(
24
- self,
26
+ self: Self,
25
27
  content: str,
26
28
  width: int = None,
27
29
  color: str = '#ffffff',
@@ -32,25 +34,25 @@ class ReportHeader:
32
34
  self.content = content
33
35
 
34
36
  if width is not None:
35
- warnings.warn('width is deprecated, use width instead', DeprecationWarning)
37
+ warnings.warn('width is deprecated, use width instead', DeprecationWarning, stacklevel=2)
36
38
 
37
39
  self.color = color
38
40
 
39
41
  if text_color is not None:
40
- warnings.warn('text_color is deprecated, use color instead', DeprecationWarning)
42
+ warnings.warn('text_color is deprecated, use color instead', DeprecationWarning, stacklevel=2)
41
43
 
42
44
  self.align = align
43
45
  self.bold = bold
44
46
 
45
47
  @property
46
- def _readable(self) -> str:
47
- """ Readable property """
48
+ def _readable(self: Self) -> str | None | bool:
49
+ """Readable property"""
48
50
  return f'ReportHeader(content={self.content})'
49
51
 
50
- def __str__(self) -> str:
51
- """ Readable property """
52
+ def __str__(self: Self) -> str | None | bool:
53
+ """Readable property"""
52
54
  return self._readable
53
55
 
54
- def __repr__(self) -> str:
55
- """ Readable property """
56
+ def __repr__(self: Self) -> str | None | bool:
57
+ """Readable property"""
56
58
  return self._readable
@@ -1,4 +1,6 @@
1
1
  """ Report page """
2
+ from typing import List, Self
3
+
2
4
  from .header import ReportHeader
3
5
  from .row import ReportRow
4
6
 
@@ -14,10 +16,10 @@ class ReportPage:
14
16
  """
15
17
 
16
18
  def __init__(
17
- self,
19
+ self: Self,
18
20
  name: str,
19
- headers: list[ReportHeader],
20
- rows: list[ReportRow],
21
+ headers: List[ReportHeader],
22
+ rows: List[ReportRow],
21
23
  freeze_header: bool = False,
22
24
  ) -> None:
23
25
  self.name = name
@@ -26,15 +28,15 @@ class ReportPage:
26
28
  self.freeze_header = freeze_header
27
29
 
28
30
  @property
29
- def _readable(self) -> str:
31
+ def _readable(self: Self) -> str | None | bool:
30
32
  """ Readable property """
31
33
  return f'ReportPage(name={self.name}, headers={self.headers}, rows={self.rows})'
32
34
 
33
- def __str__(self) -> str:
35
+ def __str__(self: Self) -> str | None | bool:
34
36
  """ Readable property """
35
37
  return self._readable
36
38
 
37
- def __repr__(self) -> str:
39
+ def __repr__(self: Self) -> str | None | bool:
38
40
  """ Readable property """
39
41
  return self._readable
40
42
 
@@ -48,11 +50,11 @@ class CustomReportPage:
48
50
  - name : Name of the page. Length should be less than 60 characters
49
51
  Methods:
50
52
  - builder(Worksheet) -> None : Function to build the page
51
- The builder receives a `Worksheet` object as an argument and shouldn't
53
+ The builder receives a `Worksheet` object as an argument and shouldn't
52
54
  return anything.
53
55
  """
54
56
 
55
- def __init__(self, name: str, builder: callable) -> None:
57
+ def __init__(self: Self, name: str, builder: callable) -> None:
56
58
  """ Constructor """
57
59
  self.name = name
58
60