Advance M8-M11 parity workflows
This commit is contained in:
65
tools/web/generate-grease-pencil-reorder-golden.py
Normal file
65
tools/web/generate-grease-pencil-reorder-golden.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
import bpy
|
||||
|
||||
|
||||
def layer_state(grease_pencil):
|
||||
return {
|
||||
"layerOrder": [layer.name for layer in grease_pencil.layers],
|
||||
"framesByLayer": {
|
||||
layer.name: sorted(frame.frame_number for frame in layer.frames)
|
||||
for layer in grease_pencil.layers
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
arguments = sys.argv[sys.argv.index("--") + 1 :] if "--" in sys.argv else []
|
||||
if len(arguments) != 2:
|
||||
raise SystemExit("usage: blender -b fixture.blend --python generate-grease-pencil-reorder-golden.py -- fixture.blend output.json")
|
||||
fixture = os.path.abspath(arguments[0])
|
||||
output = os.path.abspath(arguments[1])
|
||||
grease_pencil = bpy.data.grease_pencils.get("GreasePencilData")
|
||||
if grease_pencil is None or len(grease_pencil.layers) != 1:
|
||||
raise RuntimeError("GreasePencilData fixture must contain exactly one source layer")
|
||||
|
||||
source = layer_state(grease_pencil)
|
||||
layer = grease_pencil.layers.new("Web Drafts", set_active=True)
|
||||
layer.frames.new(1)
|
||||
before = layer_state(grease_pencil)
|
||||
grease_pencil.layers.move(layer, "DOWN")
|
||||
moved = layer.frames.move(1, 12)
|
||||
if moved is None:
|
||||
raise RuntimeError("Blender refused the Grease Pencil frame move")
|
||||
after = layer_state(grease_pencil)
|
||||
|
||||
with tempfile.TemporaryDirectory(prefix="m9-08-grease-pencil-reorder-") as temporary:
|
||||
saved = os.path.join(temporary, "grease-pencil-reorder.blend")
|
||||
bpy.ops.wm.save_as_mainfile(filepath=saved, check_existing=False)
|
||||
bpy.ops.wm.open_mainfile(filepath=saved)
|
||||
reopened = layer_state(bpy.data.grease_pencils["GreasePencilData"])
|
||||
|
||||
with open(fixture, "rb") as source_file:
|
||||
fixture_sha256 = hashlib.sha256(source_file.read()).hexdigest()
|
||||
payload = {
|
||||
"schemaVersion": 1,
|
||||
"fixture": "tests/files/web/modifier_grease_pencil_scene.blend",
|
||||
"fixtureSha256": fixture_sha256,
|
||||
"blenderVersion": ".".join(str(value) for value in bpy.app.version),
|
||||
"greasePencilName": "GreasePencilData",
|
||||
"source": source,
|
||||
"beforeReorder": before,
|
||||
"afterReorder": after,
|
||||
"reopened": reopened,
|
||||
}
|
||||
with open(output, "w", encoding="utf-8") as destination:
|
||||
json.dump(payload, destination, indent=2, sort_keys=True)
|
||||
destination.write("\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user