PyLibMS 4.1.3__tar.gz → 4.1.5__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.
Files changed (84) hide show
  1. {pylibms-4.1.3 → pylibms-4.1.5}/PKG-INFO +6 -2
  2. {pylibms-4.1.3 → pylibms-4.1.5}/PyLibMS.egg-info/PKG-INFO +6 -2
  3. {pylibms-4.1.3 → pylibms-4.1.5}/README.md +1 -1
  4. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/field/lms_datatype.py +25 -0
  5. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/field/lms_field.py +2 -27
  6. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/definitions/node.py +33 -1
  7. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Tomodachi Life NA-EU.yaml +0 -1
  8. {pylibms-4.1.3 → pylibms-4.1.5}/pyproject.toml +8 -1
  9. {pylibms-4.1.3 → pylibms-4.1.5}/LICENSE +0 -0
  10. {pylibms-4.1.3 → pylibms-4.1.5}/MANIFEST.in +0 -0
  11. {pylibms-4.1.3 → pylibms-4.1.5}/PyLibMS.egg-info/SOURCES.txt +0 -0
  12. {pylibms-4.1.3 → pylibms-4.1.5}/PyLibMS.egg-info/dependency_links.txt +0 -0
  13. {pylibms-4.1.3 → pylibms-4.1.5}/PyLibMS.egg-info/requires.txt +0 -0
  14. {pylibms-4.1.3 → pylibms-4.1.5}/PyLibMS.egg-info/top_level.txt +0 -0
  15. {pylibms-4.1.3 → pylibms-4.1.5}/lms/__init__.py +0 -0
  16. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/__init__.py +0 -0
  17. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/field/__init__.py +0 -0
  18. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/field/io.py +0 -0
  19. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/lms_constants.py +0 -0
  20. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/lms_exceptions.py +0 -0
  21. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/lms_fileinfo.py +0 -0
  22. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/stream/fileinfo.py +0 -0
  23. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/stream/hashtable.py +0 -0
  24. {pylibms-4.1.3 → pylibms-4.1.5}/lms/common/stream/section.py +0 -0
  25. {pylibms-4.1.3 → pylibms-4.1.5}/lms/fileio/encoding.py +0 -0
  26. {pylibms-4.1.3 → pylibms-4.1.5}/lms/fileio/io.py +0 -0
  27. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/__init__.py +0 -0
  28. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/definitions/__init__.py +0 -0
  29. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/definitions/flowchart.py +0 -0
  30. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/definitions/lms_nodeexceptions.py +0 -0
  31. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/definitions/node_type.py +0 -0
  32. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/flw3.py +0 -0
  33. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/msbf.py +0 -0
  34. {pylibms-4.1.3 → pylibms-4.1.5}/lms/flowchart/msbfio.py +0 -0
  35. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/__init__.py +0 -0
  36. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/definitions/__init__.py +0 -0
  37. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/definitions/field/__init__.py +0 -0
  38. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/lms_messagetext.py +0 -0
  39. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/msbt.py +0 -0
  40. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/msbtentry.py +0 -0
  41. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/msbtio.py +0 -0
  42. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/section/__init__.py +0 -0
  43. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/section/atr1.py +0 -0
  44. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/section/nli1.py +0 -0
  45. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/section/tsy1.py +0 -0
  46. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/section/txt2.py +0 -0
  47. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/tag/__init__.py +0 -0
  48. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/tag/io/param_io.py +0 -0
  49. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/tag/io/tag_io.py +0 -0
  50. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/tag/lms_tag.py +0 -0
  51. {pylibms-4.1.3 → pylibms-4.1.5}/lms/message/tag/lms_tagexceptions.py +0 -0
  52. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/__init__.py +0 -0
  53. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/definitions/__init__.py +0 -0
  54. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/definitions/attribute.py +0 -0
  55. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/definitions/color.py +0 -0
  56. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/definitions/style.py +0 -0
  57. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/definitions/tag.py +0 -0
  58. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/msbp.py +0 -0
  59. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/msbpread.py +0 -0
  60. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/ali2.py +0 -0
  61. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/ati2.py +0 -0
  62. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/clr1.py +0 -0
  63. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/string.py +0 -0
  64. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/syl3.py +0 -0
  65. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/tag2.py +0 -0
  66. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/tgg2.py +0 -0
  67. {pylibms-4.1.3 → pylibms-4.1.5}/lms/project/section/tgp2.py +0 -0
  68. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/__init__.py +0 -0
  69. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/config.py +0 -0
  70. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/definitions/__init__.py +0 -0
  71. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/definitions/attribute.py +0 -0
  72. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/definitions/nodes.py +0 -0
  73. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/definitions/tags.py +0 -0
  74. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/definitions/value.py +0 -0
  75. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Badge Arcade.yaml +0 -0
  76. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Brain Age Concentration Training.yaml +0 -0
  77. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Kirby Planet Robobot.yaml +0 -0
  78. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Super Mario 3D Land.yaml +0 -0
  79. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml +0 -0
  80. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Super Mario Odyssey.yaml +0 -0
  81. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml +0 -0
  82. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml +0 -0
  83. {pylibms-4.1.3 → pylibms-4.1.5}/lms/titleconfig/presets/Tomodachi Life Living The Dream.yaml +0 -0
  84. {pylibms-4.1.3 → pylibms-4.1.5}/setup.cfg +0 -0
@@ -1,12 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyLibMS
3
- Version: 4.1.3
3
+ Version: 4.1.5
4
4
  Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF.
5
5
  Author: AbdyyEee
6
6
  License-Expression: MIT
7
7
  Project-URL: Documentation, https://github.com/AbdyyEee/PylibMS/wiki
8
8
  Project-URL: Repository, https://github.com/AbdyyEee/PylibMS
9
9
  Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio,flw3
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
10
14
  Requires-Python: >=3.12
11
15
  Description-Content-Type: text/markdown
12
16
  License-File: LICENSE
@@ -14,7 +18,7 @@ Requires-Dist: PyYAML>=6.0.1
14
18
  Requires-Dist: requests>=2.34.0
15
19
  Dynamic: license-file
16
20
 
17
- # PylibMS
21
+ # PyLibMS
18
22
 
19
23
  PylibMS is a library built in Python 3.12+ for the libMessageStudio (LMS) proprietary file formats (`msbt`, `msbp`,
20
24
  `msbf`) from Nintendo. It supports the following:
@@ -1,12 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyLibMS
3
- Version: 4.1.3
3
+ Version: 4.1.5
4
4
  Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF.
5
5
  Author: AbdyyEee
6
6
  License-Expression: MIT
7
7
  Project-URL: Documentation, https://github.com/AbdyyEee/PylibMS/wiki
8
8
  Project-URL: Repository, https://github.com/AbdyyEee/PylibMS
9
9
  Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio,flw3
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
10
14
  Requires-Python: >=3.12
11
15
  Description-Content-Type: text/markdown
12
16
  License-File: LICENSE
@@ -14,7 +18,7 @@ Requires-Dist: PyYAML>=6.0.1
14
18
  Requires-Dist: requests>=2.34.0
15
19
  Dynamic: license-file
16
20
 
17
- # PylibMS
21
+ # PyLibMS
18
22
 
19
23
  PylibMS is a library built in Python 3.12+ for the libMessageStudio (LMS) proprietary file formats (`msbt`, `msbp`,
20
24
  `msbf`) from Nintendo. It supports the following:
@@ -1,4 +1,4 @@
1
- # PylibMS
1
+ # PyLibMS
2
2
 
3
3
  PylibMS is a library built in Python 3.12+ for the libMessageStudio (LMS) proprietary file formats (`msbt`, `msbp`,
4
4
  `msbf`) from Nintendo. It supports the following:
@@ -3,6 +3,9 @@ from __future__ import annotations
3
3
  from enum import Enum
4
4
  from typing import Type, TypeGuard
5
5
 
6
+ FLOAT32_MIN = -3.4028235e38
7
+ FLOAT32_MAX = 3.4028235e38
8
+
6
9
  ALIAS_MAP = {
7
10
  "u8": "UINT8",
8
11
  "u16": "UINT16",
@@ -132,3 +135,25 @@ class LMS_DataType(Enum):
132
135
  return cls[alias_member]
133
136
  else:
134
137
  raise ValueError(f"Unknown value of '{string}' was provided!")
138
+
139
+
140
+ def verify_number_from_datatype(
141
+ value: int | float,
142
+ datatype: LMS_DataType,
143
+ ):
144
+ if datatype is LMS_DataType.FLOAT32:
145
+ max_value = FLOAT32_MAX
146
+ min_value = FLOAT32_MIN
147
+ else:
148
+ bits = datatype.stream_size * 8
149
+ if datatype.signed:
150
+ max_value = 2 ** (bits - 1)
151
+ min_value = -max_value
152
+ else:
153
+ min_value, max_value = 0, (2 ** bits) - 1
154
+
155
+ if not min_value <= value <= max_value:
156
+ raise ValueError(
157
+ f"""The value '{value}' of type '{datatype.name}' provided
158
+ is out of range of ({min_value}, {max_value})"""
159
+ )
@@ -3,12 +3,9 @@ from __future__ import annotations
3
3
  from collections.abc import Iterator
4
4
  from dataclasses import dataclass
5
5
 
6
- from lms.common.field.lms_datatype import LMS_DataType
6
+ from lms.common.field.lms_datatype import LMS_DataType, verify_number_from_datatype
7
7
  from lms.titleconfig.definitions.value import ValueDefinition
8
8
 
9
- FLOAT32_MIN = -3.4028235e38
10
- FLOAT32_MAX = 3.4028235e38
11
-
12
9
  type FieldValue = int | str | float | bool | bytes
13
10
 
14
11
 
@@ -164,31 +161,9 @@ def _verify_value_from_definition(
164
161
  else:
165
162
  return
166
163
  case _ if isinstance(value, int):
167
- _verify_number_datatype(value, definition.datatype)
164
+ verify_number_from_datatype(value, definition.datatype)
168
165
  return
169
166
 
170
167
  raise TypeError(
171
168
  f"The value provided for '{definition.name}' type '{type(value)}' should be '{datatype.builtin_type}' (DATATYPE {definition.datatype})."
172
169
  )
173
-
174
-
175
- def _verify_number_datatype(
176
- value: int | float,
177
- datatype: LMS_DataType,
178
- ):
179
- if datatype is LMS_DataType.FLOAT32:
180
- max_value = FLOAT32_MAX
181
- min_value = FLOAT32_MIN
182
- else:
183
- bits = datatype.stream_size * 8
184
- if datatype.signed:
185
- max_value = 2 ** (bits - 1)
186
- min_value = -max_value
187
- else:
188
- min_value, max_value = 0, (2 ** bits) - 1
189
-
190
- if not min_value <= value <= max_value:
191
- raise ValueError(
192
- f"""The value '{value}' of type '{datatype.name}' provided for this field
193
- is out of range of ({min_value}, {max_value})"""
194
- )
@@ -5,7 +5,8 @@ from types import MappingProxyType
5
5
  from typing import Generator
6
6
 
7
7
  import lms.flowchart.definitions.lms_nodeexceptions as node_exceptions
8
- from lms.common.field.lms_field import LMS_FieldMap
8
+ from lms.common.field.lms_datatype import LMS_DataType
9
+ from lms.common.field.lms_field import LMS_FieldMap, verify_number_from_datatype
9
10
  from lms.common.lms_exceptions import LMS_Error
10
11
  from lms.flowchart.definitions.node_type import LMS_NodeType, LMS_NodeParameterType
11
12
  from lms.message.msbt import MSBT
@@ -64,6 +65,37 @@ class LMS_BaseNode:
64
65
  """The parameter value of the node."""
65
66
  return self._parameter_value
66
67
 
68
+ @parameter_value.setter
69
+ def parameter_value(self, value: LMS_NodeParameter):
70
+ if self._parameter_type == LMS_NodeParameterType.NONE:
71
+ raise TypeError("Unable to set parameter values when there is no parameter!")
72
+
73
+ if isinstance(self._parameter_value, LMS_FieldMap):
74
+ raise ValueError("Edit a parameter value through the value property of a field!")
75
+
76
+ if not isinstance(value, self._parameter_type.builtin_type):
77
+ raise TypeError(f"Wrong value provided! Expected {self._parameter_type.builtin_type} got {type(value)}")
78
+
79
+ sliced_datatype = {
80
+ LMS_NodeParameterType.PARAM_16_16: (LMS_DataType.UINT16, LMS_DataType.UINT16),
81
+ LMS_NodeParameterType.PARAM_16_8_8: (LMS_DataType.UINT16, LMS_DataType.UINT8, LMS_DataType.UINT8),
82
+ LMS_NodeParameterType.PARAM_8_8_16: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT16),
83
+ LMS_NodeParameterType.PARAM_8_8_8_8: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT8,
84
+ LMS_DataType.UINT8)
85
+ }
86
+
87
+ match self._parameter_type:
88
+ case LMS_NodeParameterType.STRING:
89
+ self._parameter_value = value
90
+ case LMS_NodeParameterType.PARAM_32_0 | LMS_NodeParameterType.PARAM_32_1:
91
+ verify_number_from_datatype(value, LMS_DataType.UINT32)
92
+ self._parameter_value = value
93
+ case _:
94
+ for i, parameter in enumerate(value):
95
+ verify_number_from_datatype(parameter, sliced_datatype[self._parameter_type][i])
96
+
97
+ self._parameter_value = value
98
+
67
99
  def set_next_node(self, node: LMS_BaseNode | None) -> LMS_BaseNode | None:
68
100
  """Set the next node for the instance.
69
101
 
@@ -33,7 +33,6 @@ node_definitions:
33
33
  parameter_type: string
34
34
  parameters:
35
35
  - name: group
36
- description: ''
37
36
  - id: 96
38
37
  name: PlaySE
39
38
  parameter_type: string
@@ -7,7 +7,7 @@ include = ["lms*"]
7
7
 
8
8
  [project]
9
9
  name = "PyLibMS"
10
- version = "4.1.3"
10
+ version = "4.1.5"
11
11
  requires-python = ">=3.12"
12
12
  description = "Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF."
13
13
  readme = "README.md"
@@ -15,6 +15,13 @@ authors = [{ name = "AbdyyEee" }]
15
15
  keywords = ["nintendo", "msbf", "msbt", "msbp", "modding", "lms", "libmessagestudio", "flw3"]
16
16
  license = "MIT"
17
17
  license-files = ["LICENSE*"]
18
+ classifiers = [
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13"
23
+
24
+ ]
18
25
  dependencies = [
19
26
  "PyYAML>=6.0.1",
20
27
  "requests>=2.34.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes