sonolus.py 0.7.0__py3-none-any.whl → 0.7.1__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 sonolus.py might be problematic. Click here for more details.

@@ -129,7 +129,7 @@ class Collection:
129
129
  resource_data = resource_path.read_bytes()
130
130
 
131
131
  if resource_path.suffix.lower() in {".json", ".bin"}:
132
- resource_data = gzip.compress(resource_data)
132
+ resource_data = gzip.compress(resource_data, mtime=0)
133
133
 
134
134
  srl = self.add_asset(resource_data)
135
135
  item_data[resource_path.stem] = srl
sonolus/build/engine.py CHANGED
@@ -407,12 +407,12 @@ def package_rom(rom: ReadOnlyMemory) -> bytes:
407
407
  for value in values:
408
408
  output.extend(struct.pack("<f", value))
409
409
 
410
- return gzip.compress(bytes(output))
410
+ return gzip.compress(bytes(output), mtime=0)
411
411
 
412
412
 
413
413
  def package_data(value: JsonValue) -> bytes:
414
414
  json_data = json.dumps(value, separators=(",", ":")).encode("utf-8")
415
- return gzip.compress(json_data)
415
+ return gzip.compress(json_data, mtime=0)
416
416
 
417
417
 
418
418
  def unpackage_data(data: bytes) -> JsonValue:
sonolus/build/project.py CHANGED
@@ -39,7 +39,7 @@ def build_project_to_collection(project: Project, config: BuildConfig | None):
39
39
 
40
40
 
41
41
  def apply_converter_to_collection(
42
- self, src_engine: str | None, converter: Callable[[ExternalLevelData], LevelData]
42
+ self, src_engine: str | None, converter: Callable[[ExternalLevelData], LevelData | None]
43
43
  ) -> None:
44
44
  for level_details in self.categories.get("levels", {}).values():
45
45
  level = level_details["item"]
@@ -56,6 +56,8 @@ def apply_converter_to_collection(
56
56
  raise ValueError(f"Level data for level '{level['name']}' is not valid")
57
57
  parsed_data = parse_external_level_data(cast(ExternalLevelDataDict, data))
58
58
  new_data = converter(parsed_data)
59
+ if new_data is None:
60
+ continue
59
61
  packaged_new_data = package_level_data(new_data)
60
62
  new_data_srl = self.add_asset(packaged_new_data)
61
63
  level["data"] = new_data_srl
@@ -1233,6 +1233,11 @@ class EntityRef[A: _BaseArchetype](Record):
1233
1233
  return self._ref_ is other._ref_
1234
1234
  return super().__eq__(other)
1235
1235
 
1236
+ def __hash__(self) -> int:
1237
+ if not ctx() and hasattr(self, "_ref_"):
1238
+ return hash(id(self._ref_))
1239
+ return super().__hash__()
1240
+
1236
1241
  @meta_fn
1237
1242
  def get(self) -> A:
1238
1243
  """Get the entity."""
sonolus/script/level.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import gzip
3
4
  import json
4
5
  from collections.abc import Iterator
5
6
  from os import PathLike
@@ -229,7 +230,21 @@ class ExternalEntityData(NamedTuple):
229
230
  data: dict[str, Any]
230
231
 
231
232
 
232
- def parse_external_level_data(raw_data: ExternalLevelDataDict) -> ExternalLevelData:
233
+ def parse_external_level_data(raw_data: ExternalLevelDataDict | str | bytes, /) -> ExternalLevelData:
234
+ """Parse level data from an external source.
235
+
236
+ If given a string, it is parsed as JSON. If given bytes, it is un-gzipped and then parsed as JSON.
237
+
238
+ Args:
239
+ raw_data: The raw level data to parse.
240
+
241
+ Returns:
242
+ The parsed level data.
243
+ """
244
+ if isinstance(raw_data, bytes):
245
+ raw_data = gzip.decompress(raw_data).decode("utf-8")
246
+ if isinstance(raw_data, str):
247
+ raw_data = json.loads(raw_data)
233
248
  bgm_offset = raw_data["bgmOffset"]
234
249
  raw_entities = raw_data["entities"]
235
250
  entity_name_to_index = {e["name"]: i for i, e in enumerate(raw_entities) if "name" in e}
sonolus/script/project.py CHANGED
@@ -28,7 +28,7 @@ class Project:
28
28
  engine: Engine,
29
29
  levels: Iterable[Level] | Callable[[], Iterable[Level]] | None = None,
30
30
  resources: PathLike | None = None,
31
- converters: dict[str | None, Callable[[ExternalLevelData], LevelData]] | None = None,
31
+ converters: dict[str | None, Callable[[ExternalLevelData], LevelData | None]] | None = None,
32
32
  ):
33
33
  self.engine = engine
34
34
  match levels:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sonolus.py
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Sonolus engine development in Python
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -27,14 +27,14 @@ sonolus/backend/optimize/simplify.py,sha256=RDNVTKfC7ByRyxY5z30_ShimOAKth_pKlVFV
27
27
  sonolus/backend/optimize/ssa.py,sha256=raQO0furQQRPYb8iIBKfNrJlj-_5wqtI4EWNfLZ8QFo,10834
28
28
  sonolus/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  sonolus/build/cli.py,sha256=-_lTN8zT7nQB2lySM8itAEPVutcEQI-TJ13BcPIfGb4,10113
30
- sonolus/build/collection.py,sha256=sMYLfEIVn6UydLy7iEnNwrpIXDs7bGG32uQQgHXyhSI,12289
30
+ sonolus/build/collection.py,sha256=5TvltBugFmIrvZC5HSP3LRZe6sjO9g6q-DHjBrovHsg,12298
31
31
  sonolus/build/compile.py,sha256=Yex-ZbSZmv9ujyAOVaMcfq-0NnZzFIqtmNYYaplF4Uc,6761
32
- sonolus/build/engine.py,sha256=xPhNnaFkfAuflp7CYb2NrXTgh9xCNN2h_hT_uWAYl1g,13445
32
+ sonolus/build/engine.py,sha256=YQ2Sc2zC56N2Y5S5zE3QCoUzwKcVHSPl14iQE0tkm6Q,13463
33
33
  sonolus/build/level.py,sha256=KLqUAtxIuIqrzeFURJA97rdqjA5pcvYSmwNZQhElaMQ,702
34
34
  sonolus/build/node.py,sha256=gnX71RYDUOK_gYMpinQi-bLWO4csqcfiG5gFmhxzSec,1330
35
- sonolus/build/project.py,sha256=h-9tcC60KqrpUOxGHFCK9trGVhGPUkciXiibasBEzu4,8097
35
+ sonolus/build/project.py,sha256=__sOJas3RTwn4aizq16rYCvZgG8aX-JbQaxmfVhRnc4,8154
36
36
  sonolus/script/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- sonolus/script/archetype.py,sha256=xoBVt4sQcC0e1ikyaM4NfcDZrMrJ0lHHUrxznl6dsU4,49492
37
+ sonolus/script/archetype.py,sha256=xhdm1jO_p32V1NtGjgV0SGPm7X9GnJ6Z7hXi2zT69Ww,49647
38
38
  sonolus/script/array.py,sha256=9uOUHZIDMyMT9q3APcXJWXWt97yG-AZoRlxwrvSY6SU,12367
39
39
  sonolus/script/array_like.py,sha256=hUDdDaP306kflVv9YomdHIMXogrVjxsBXCrLvB9QpuE,9681
40
40
  sonolus/script/bucket.py,sha256=SNqnfLGpnO_u-3LFFazdgzNk332OdDUIlmZHsuoVZuE,7674
@@ -47,7 +47,7 @@ sonolus/script/globals.py,sha256=nlXSNS4NRXsgQU2AJImVIs752h1WqsMnShSKgU011c4,102
47
47
  sonolus/script/instruction.py,sha256=Dd-14D5Amo8nhPBr6DNyg2lpYw_rqZkT8Kix3HkfE7k,6793
48
48
  sonolus/script/interval.py,sha256=dj6F2wn5uP6I6_mcZn-wIREgRUQbsLzhvhzB0oEyAdU,11290
49
49
  sonolus/script/iterator.py,sha256=_ICY_yX7FG0Zbgs3NhVnaIBdVDpAeXjxJ_CQtq30l7Y,3774
50
- sonolus/script/level.py,sha256=5M_XTzvXpFZTY-ODlS6M3GOiCIYN3F8rFuUgOiGxVBI,7824
50
+ sonolus/script/level.py,sha256=X3-V99ihruYYCcPdch66dHi_ydCWXXn7epviLLjxW8w,8288
51
51
  sonolus/script/maybe.py,sha256=VYvTWgEfPzoXqI3i3zXhc4dz0pWBVoHmW8FtWH0GQvM,8194
52
52
  sonolus/script/metadata.py,sha256=ttRK27eojHf3So50KQJ-8yj3udZoN1bli5iD-knaeLw,753
53
53
  sonolus/script/num.py,sha256=924kWWZusW7oaWuvtQzdAMzkb4ZItWSJwNj3W9XrqZU,16041
@@ -55,7 +55,7 @@ sonolus/script/options.py,sha256=XVN-mL7Rwhd2Tu9YysYq9YDGpH_LazdmhqzSYE6nR3Q,945
55
55
  sonolus/script/particle.py,sha256=RTfamg_ZTq7-qJ6j9paduNVUHCkw3hzkBK1QUbwwN7I,8403
56
56
  sonolus/script/pointer.py,sha256=FoOfyD93r0G5d_2BaKfeOT9SqkOP3hq6sqtOs_Rb0c8,1511
57
57
  sonolus/script/printing.py,sha256=mNYu9QWiacBBGZrnePZQMVwbbguoelUps9GiOK_aVRU,2096
58
- sonolus/script/project.py,sha256=a9bRY5T8deRMR35iC-6cuqn4HiKwZHvVy9K-np-rAfI,4432
58
+ sonolus/script/project.py,sha256=gG6mYsGlIqznY_RODyFMiXVBh0tVbXLAWZ5LHCiBIuU,4439
59
59
  sonolus/script/quad.py,sha256=XoAjaUqR60zIrC_CwheZs7HwS-DRS58yUmlj9GIjX7k,11179
60
60
  sonolus/script/record.py,sha256=igmawc0hqb98YVcZnPTThHvnIP88Qelhoge4cNJx45Q,12770
61
61
  sonolus/script/runtime.py,sha256=rJZM_KbKmnwpjhDEpR0DrM6EMSEu46apIErWA_pfLJA,33321
@@ -86,8 +86,8 @@ sonolus/script/internal/simulation_context.py,sha256=LGxLTvxbqBIhoe1R-SfwGajNIDw
86
86
  sonolus/script/internal/transient.py,sha256=y2AWABqF1aoaP6H4_2u4MMpNioC4OsZQCtPyNI0txqo,1634
87
87
  sonolus/script/internal/tuple_impl.py,sha256=DPNdmmRmupU8Ah4_XKq6-PdT336l4nt15_uCJKQGkkk,3587
88
88
  sonolus/script/internal/value.py,sha256=OngrCdmY_h6mV2Zgwqhuo4eYFad0kTk6263UAxctZcY,6963
89
- sonolus_py-0.7.0.dist-info/METADATA,sha256=aTrZv-zipIgHI36FFgSO_bmIjPOAixQa4-CdHcq7Cvc,302
90
- sonolus_py-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
91
- sonolus_py-0.7.0.dist-info/entry_points.txt,sha256=oTYspY_b7SA8TptEMTDxh4-Aj-ZVPnYC9f1lqH6s9G4,54
92
- sonolus_py-0.7.0.dist-info/licenses/LICENSE,sha256=JEKpqVhQYfEc7zg3Mj462sKbKYmO1K7WmvX1qvg9IJk,1067
93
- sonolus_py-0.7.0.dist-info/RECORD,,
89
+ sonolus_py-0.7.1.dist-info/METADATA,sha256=p9fNorfrM-GbAWcBdMkyFjWt5mTc3xVnEXrZLql5AqQ,302
90
+ sonolus_py-0.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
91
+ sonolus_py-0.7.1.dist-info/entry_points.txt,sha256=oTYspY_b7SA8TptEMTDxh4-Aj-ZVPnYC9f1lqH6s9G4,54
92
+ sonolus_py-0.7.1.dist-info/licenses/LICENSE,sha256=JEKpqVhQYfEc7zg3Mj462sKbKYmO1K7WmvX1qvg9IJk,1067
93
+ sonolus_py-0.7.1.dist-info/RECORD,,