unitytk 0.5.0__tar.gz → 0.6.0__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 (214) hide show
  1. {unitytk-0.5.0/unitytk.egg-info → unitytk-0.6.0}/PKG-INFO +3 -3
  2. {unitytk-0.5.0 → unitytk-0.6.0}/docs/README.md +1 -1
  3. {unitytk-0.5.0 → unitytk-0.6.0}/pyproject.toml +16 -1
  4. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_base_test.py +20 -4
  5. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_deploy_templates.py +101 -48
  6. unitytk-0.6.0/test/test_editor_catalog.py +86 -0
  7. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_keyed_visibility.py +1 -0
  8. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_render_effects_e2e.py +2 -2
  9. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_render_opacity_e2e.py +1 -0
  10. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_shared_material_standalone.py +5 -1
  11. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_standalone_enduser.py +1 -0
  12. unitytk-0.6.0/test/test_unity_compile.py +170 -0
  13. unitytk-0.6.0/test/test_unity_host.py +217 -0
  14. unitytk-0.6.0/test/test_unity_kernel_live.py +76 -0
  15. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/__init__.py +5 -1
  16. unitytk-0.6.0/unitytk/editor_operations.json +103 -0
  17. unitytk-0.6.0/unitytk/operations.json +86 -0
  18. unitytk-0.6.0/unitytk/operations.py +30 -0
  19. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/template_deployer.py +38 -47
  20. unitytk-0.6.0/unitytk/templates/Kernel/Core/Change.g.cs +54 -0
  21. unitytk-0.6.0/unitytk/templates/Kernel/Core/Change.g.cs.meta +11 -0
  22. unitytk-0.6.0/unitytk/templates/Kernel/Core/CompileErrorException.cs +17 -0
  23. unitytk-0.6.0/unitytk/templates/Kernel/Core/CompileErrorException.cs.meta +11 -0
  24. unitytk-0.6.0/unitytk/templates/Kernel/Core/IOperationTarget.cs +24 -0
  25. unitytk-0.6.0/unitytk/templates/Kernel/Core/IOperationTarget.cs.meta +11 -0
  26. unitytk-0.6.0/unitytk/templates/Kernel/Core/ISceneFiles.cs +34 -0
  27. unitytk-0.6.0/unitytk/templates/Kernel/Core/ISceneFiles.cs.meta +11 -0
  28. unitytk-0.6.0/unitytk/templates/Kernel/Core/Invocation.cs +21 -0
  29. unitytk-0.6.0/unitytk/templates/Kernel/Core/Invocation.cs.meta +11 -0
  30. unitytk-0.6.0/unitytk/templates/Kernel/Core/Issue.g.cs +62 -0
  31. unitytk-0.6.0/unitytk/templates/Kernel/Core/Issue.g.cs.meta +11 -0
  32. unitytk-0.6.0/unitytk/templates/Kernel/Core/Json.cs +343 -0
  33. unitytk-0.6.0/unitytk/templates/Kernel/Core/Json.cs.meta +11 -0
  34. unitytk-0.6.0/unitytk/templates/Kernel/Core/M3trik.Unitytk.Core.asmdef +14 -0
  35. unitytk-0.6.0/unitytk/templates/Kernel/Core/M3trik.Unitytk.Core.asmdef.meta +7 -0
  36. unitytk-0.6.0/unitytk/templates/Kernel/Core/OpCall.g.cs +46 -0
  37. unitytk-0.6.0/unitytk/templates/Kernel/Core/OpCall.g.cs.meta +11 -0
  38. unitytk-0.6.0/unitytk/templates/Kernel/Core/OpRequest.g.cs +61 -0
  39. unitytk-0.6.0/unitytk/templates/Kernel/Core/OpRequest.g.cs.meta +11 -0
  40. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationCancelledException.cs +15 -0
  41. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationCancelledException.cs.meta +11 -0
  42. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationCatalogDocument.g.cs +50 -0
  43. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationCatalogDocument.g.cs.meta +11 -0
  44. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationEntry.g.cs +82 -0
  45. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationEntry.g.cs.meta +11 -0
  46. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationInterruptedException.cs +16 -0
  47. unitytk-0.6.0/unitytk/templates/Kernel/Core/OperationInterruptedException.cs.meta +11 -0
  48. unitytk-0.6.0/unitytk/templates/Kernel/Core/Outcome.g.cs +67 -0
  49. unitytk-0.6.0/unitytk/templates/Kernel/Core/Outcome.g.cs.meta +11 -0
  50. unitytk-0.6.0/unitytk/templates/Kernel/Core/PureSceneFiles.cs +34 -0
  51. unitytk-0.6.0/unitytk/templates/Kernel/Core/PureSceneFiles.cs.meta +11 -0
  52. unitytk-0.6.0/unitytk/templates/Kernel/Core/RunRules.cs +315 -0
  53. unitytk-0.6.0/unitytk/templates/Kernel/Core/RunRules.cs.meta +11 -0
  54. unitytk-0.6.0/unitytk/templates/Kernel/Core/Wire.g.cs +187 -0
  55. unitytk-0.6.0/unitytk/templates/Kernel/Core/Wire.g.cs.meta +11 -0
  56. unitytk-0.6.0/unitytk/templates/Kernel/Core.meta +8 -0
  57. unitytk-0.6.0/unitytk/templates/Kernel/Editor/BatchServer.cs +50 -0
  58. unitytk-0.6.0/unitytk/templates/Kernel/Editor/BatchServer.cs.meta +11 -0
  59. unitytk-0.6.0/unitytk/templates/Kernel/Editor/CSharpConsole.cs +355 -0
  60. unitytk-0.6.0/unitytk/templates/Kernel/Editor/CSharpConsole.cs.meta +11 -0
  61. unitytk-0.6.0/unitytk/templates/Kernel/Editor/Catalog.cs +74 -0
  62. unitytk-0.6.0/unitytk/templates/Kernel/Editor/Catalog.cs.meta +11 -0
  63. unitytk-0.6.0/unitytk/templates/Kernel/Editor/CommandLine.cs +18 -0
  64. unitytk-0.6.0/unitytk/templates/Kernel/Editor/CommandLine.cs.meta +11 -0
  65. unitytk-0.6.0/unitytk/templates/Kernel/Editor/Effect.cs +21 -0
  66. unitytk-0.6.0/unitytk/templates/Kernel/Editor/Effect.cs.meta +11 -0
  67. unitytk-0.6.0/unitytk/templates/Kernel/Editor/InstanceLock.cs +113 -0
  68. unitytk-0.6.0/unitytk/templates/Kernel/Editor/InstanceLock.cs.meta +11 -0
  69. unitytk-0.6.0/unitytk/templates/Kernel/Editor/JsonValue.cs +53 -0
  70. unitytk-0.6.0/unitytk/templates/Kernel/Editor/JsonValue.cs.meta +11 -0
  71. unitytk-0.6.0/unitytk/templates/Kernel/Editor/M3trik.Unitytk.Kernel.asmdef +18 -0
  72. unitytk-0.6.0/unitytk/templates/Kernel/Editor/M3trik.Unitytk.Kernel.asmdef.meta +7 -0
  73. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OpContext.cs +95 -0
  74. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OpContext.cs.meta +11 -0
  75. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OperationAttribute.cs +42 -0
  76. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OperationAttribute.cs.meta +11 -0
  77. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OperationRegistry.cs +295 -0
  78. unitytk-0.6.0/unitytk/templates/Kernel/Editor/OperationRegistry.cs.meta +11 -0
  79. unitytk-0.6.0/unitytk/templates/Kernel/Editor/ProjectDoctor.cs +80 -0
  80. unitytk-0.6.0/unitytk/templates/Kernel/Editor/ProjectDoctor.cs.meta +11 -0
  81. unitytk-0.6.0/unitytk/templates/Kernel/Editor/RunFolder.cs +108 -0
  82. unitytk-0.6.0/unitytk/templates/Kernel/Editor/RunFolder.cs.meta +11 -0
  83. unitytk-0.6.0/unitytk/templates/Kernel/Editor/SceneCapture.cs +192 -0
  84. unitytk-0.6.0/unitytk/templates/Kernel/Editor/SceneCapture.cs.meta +11 -0
  85. unitytk-0.6.0/unitytk/templates/Kernel/Editor/SessionServer.cs +328 -0
  86. unitytk-0.6.0/unitytk/templates/Kernel/Editor/SessionServer.cs.meta +11 -0
  87. unitytk-0.6.0/unitytk/templates/Kernel/Editor/UnitySceneFiles.cs +89 -0
  88. unitytk-0.6.0/unitytk/templates/Kernel/Editor/UnitySceneFiles.cs.meta +11 -0
  89. unitytk-0.6.0/unitytk/templates/Kernel/Editor.meta +8 -0
  90. unitytk-0.6.0/unitytk/templates/Kernel.meta +8 -0
  91. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/M3trik.Unitytk.asmdef +1 -0
  92. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/README.md +9 -6
  93. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/UnitytkSettings.cs +12 -154
  94. unitytk-0.6.0/unitytk/unity_compile.py +400 -0
  95. unitytk-0.6.0/unitytk/unity_host.py +375 -0
  96. {unitytk-0.5.0 → unitytk-0.6.0/unitytk.egg-info}/PKG-INFO +3 -3
  97. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk.egg-info/SOURCES.txt +81 -0
  98. unitytk-0.6.0/unitytk.egg-info/entry_points.txt +6 -0
  99. unitytk-0.6.0/unitytk.egg-info/requires.txt +1 -0
  100. unitytk-0.5.0/unitytk.egg-info/requires.txt +0 -1
  101. {unitytk-0.5.0 → unitytk-0.6.0}/COPYING +0 -0
  102. {unitytk-0.5.0 → unitytk-0.6.0}/COPYING.LESSER +0 -0
  103. {unitytk-0.5.0 → unitytk-0.6.0}/MANIFEST.in +0 -0
  104. {unitytk-0.5.0 → unitytk-0.6.0}/setup.cfg +0 -0
  105. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_articulated_rig_runtime.py +0 -0
  106. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_asset_delivery.py +0 -0
  107. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_audio_events_integration.py +0 -0
  108. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_blender_render_effects_e2e.py +0 -0
  109. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_blender_shadow_plane_integration.py +0 -0
  110. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_blender_shot_metadata_integration.py +0 -0
  111. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_bool_to_fade_curve.py +0 -0
  112. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_clip_name_contract_integration.py +0 -0
  113. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_controller_runtime_integration.py +0 -0
  114. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_embedded_dependencies_integration.py +0 -0
  115. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_emissive_groups_integration.py +0 -0
  116. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_fade_window_preservation.py +0 -0
  117. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_launcher.py +0 -0
  118. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_lightmap_metadata_integration.py +0 -0
  119. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_maya_surface_materials_integration.py +0 -0
  120. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_multi_section_audio_integration.py +0 -0
  121. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_package.py +0 -0
  122. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_render_opacity_controller.py +0 -0
  123. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_render_opacity_integration.py +0 -0
  124. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_run_tests.py +0 -0
  125. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_scene_builder.py +0 -0
  126. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_shadow_plane_integration.py +0 -0
  127. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_shadow_plane_runtime_integration.py +0 -0
  128. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_shot_metadata_integration.py +0 -0
  129. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_shots_audio_sidebyside_integration.py +0 -0
  130. {unitytk-0.5.0 → unitytk-0.6.0}/test/test_temp_projects.py +0 -0
  131. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/asset_delivery.py +0 -0
  132. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/launcher.py +0 -0
  133. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/scene_builder.py +0 -0
  134. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulatedRigController.cs +0 -0
  135. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulatedRigController.cs.meta +0 -0
  136. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulatedRigPointerGrab.cs +0 -0
  137. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulatedRigPointerGrab.cs.meta +0 -0
  138. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulationRecord.g.cs +0 -0
  139. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/ArticulationRecord.g.cs.meta +0 -0
  140. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/ArticulatedRigXRGrab.cs +0 -0
  141. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/ArticulatedRigXRGrab.cs.meta +0 -0
  142. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/ArticulatedRigXRSetup.cs +0 -0
  143. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/ArticulatedRigXRSetup.cs.meta +0 -0
  144. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/M3trik.Unitytk.XR.asmdef +0 -0
  145. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR/M3trik.Unitytk.XR.asmdef.meta +0 -0
  146. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig/XR.meta +0 -0
  147. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ArticulatedRig.meta +0 -0
  148. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/AudioEvent/AudioEventController.cs +0 -0
  149. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/AudioEvent/AudioEventController.cs.meta +0 -0
  150. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/AudioEvent/AudioRecord.g.cs +0 -0
  151. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/AudioEvent/AudioRecord.g.cs.meta +0 -0
  152. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/AudioEvent.meta +0 -0
  153. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupController.cs +0 -0
  154. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupController.cs.meta +0 -0
  155. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroups.hlsl +0 -0
  156. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroups.hlsl.meta +0 -0
  157. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupsLit.shader +0 -0
  158. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupsLit.shader.meta +0 -0
  159. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupsRecord.g.cs +0 -0
  160. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup/EmissiveGroupsRecord.g.cs.meta +0 -0
  161. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/EmissiveGroup.meta +0 -0
  162. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableCubeUV.hlsl +0 -0
  163. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableCubeUV.hlsl.meta +0 -0
  164. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableLit.shader +0 -0
  165. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableLit.shader.meta +0 -0
  166. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverablePmrem.cs +0 -0
  167. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverablePmrem.cs.meta +0 -0
  168. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableShading.cs +0 -0
  169. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableShading.cs.meta +0 -0
  170. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableToneMap.shader +0 -0
  171. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableToneMap.shader.meta +0 -0
  172. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableToneMapFeature.cs +0 -0
  173. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/DeliverableToneMapFeature.cs.meta +0 -0
  174. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/HandoffBlock.g.cs +0 -0
  175. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/HandoffBlock.g.cs.meta +0 -0
  176. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/LightmapMetadataController.cs +0 -0
  177. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/LightmapMetadataController.cs.meta +0 -0
  178. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/LightmapRecord.g.cs +0 -0
  179. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/LightmapRecord.g.cs.meta +0 -0
  180. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/RenderingPolicy.g.cs +0 -0
  181. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata/RenderingPolicy.g.cs.meta +0 -0
  182. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/LightmapMetadata.meta +0 -0
  183. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/M3trik.Unitytk.asmdef.meta +0 -0
  184. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MapAbsence.g.cs +0 -0
  185. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MapAbsence.g.cs.meta +0 -0
  186. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MaterialRecord.cs +0 -0
  187. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MaterialRecord.cs.meta +0 -0
  188. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MaterialRecord.g.cs +0 -0
  189. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MaterialRecord.g.cs.meta +0 -0
  190. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MayaSurface/MayaSurfaceMaterialImporter.cs +0 -0
  191. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MayaSurface/MayaSurfaceMaterialImporter.cs.meta +0 -0
  192. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/MayaSurface.meta +0 -0
  193. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/README.md.meta +0 -0
  194. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/RenderEffects/RenderEffectsController.cs +0 -0
  195. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/RenderEffects/RenderEffectsController.cs.meta +0 -0
  196. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/RenderEffects.meta +0 -0
  197. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlane.shader +0 -0
  198. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlane.shader.meta +0 -0
  199. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlaneController.cs +0 -0
  200. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlaneController.cs.meta +0 -0
  201. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlaneHorizon.hlsl +0 -0
  202. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowPlaneHorizon.hlsl.meta +0 -0
  203. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowRecord.g.cs +0 -0
  204. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane/ShadowRecord.g.cs.meta +0 -0
  205. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShadowPlane.meta +0 -0
  206. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShotMetadata/AnimationRecord.g.cs +0 -0
  207. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShotMetadata/AnimationRecord.g.cs.meta +0 -0
  208. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShotMetadata/ShotMetadataController.cs +0 -0
  209. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShotMetadata/ShotMetadataController.cs.meta +0 -0
  210. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/ShotMetadata.meta +0 -0
  211. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/UnitytkSettings.cs.meta +0 -0
  212. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk/templates/__init__.py +0 -0
  213. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk.egg-info/dependency_links.txt +0 -0
  214. {unitytk-0.5.0 → unitytk-0.6.0}/unitytk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unitytk
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: A modular Python toolkit for Unity interaction.
5
5
  Author-email: Ryan Simpson <m3trik@outlook.com>
6
6
  License: LGPL-3.0-or-later AND MIT
@@ -15,7 +15,7 @@ Requires-Python: >=3.9
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: COPYING
17
17
  License-File: COPYING.LESSER
18
- Requires-Dist: pythontk>=0.17.0
18
+ Requires-Dist: pythontk>=0.20.0
19
19
  Dynamic: license-file
20
20
 
21
21
  [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0.en.html)
@@ -33,7 +33,7 @@ The Python side: `UnityFinder` / `UnityLauncher` (find installed Editors, launch
33
33
  - [`templates/README.md`](../unitytk/templates/README.md) — the C# template catalog (opacity, audio events, shot metadata, lightmaps), the FBX user-property import contract, and deployment (`TemplateDeployer.deploy_package` — embedded UPM package)
34
34
  - [pythontk's `DELIVERABLE_FORMAT.md`](https://github.com/m3trik/pythontk/blob/main/pythontk/core_utils/engines/scene_export/DELIVERABLE_FORMAT.md) — the data a deliverable carries, which these templates consume (the `data_export` carrier and every scene record's block)
35
35
  - [`CHANGELOG.md`](../CHANGELOG.md) — notable changes
36
- - [`CLAUDE.md`](../CLAUDE.md) — contributor / agent conventions
36
+ - [`AGENTS.md`](../AGENTS.md) — contributor / agent conventions
37
37
 
38
38
  ## License
39
39
 
@@ -13,7 +13,7 @@ The Python side: `UnityFinder` / `UnityLauncher` (find installed Editors, launch
13
13
  - [`templates/README.md`](../unitytk/templates/README.md) — the C# template catalog (opacity, audio events, shot metadata, lightmaps), the FBX user-property import contract, and deployment (`TemplateDeployer.deploy_package` — embedded UPM package)
14
14
  - [pythontk's `DELIVERABLE_FORMAT.md`](https://github.com/m3trik/pythontk/blob/main/pythontk/core_utils/engines/scene_export/DELIVERABLE_FORMAT.md) — the data a deliverable carries, which these templates consume (the `data_export` carrier and every scene record's block)
15
15
  - [`CHANGELOG.md`](../CHANGELOG.md) — notable changes
16
- - [`CLAUDE.md`](../CLAUDE.md) — contributor / agent conventions
16
+ - [`AGENTS.md`](../AGENTS.md) — contributor / agent conventions
17
17
 
18
18
  ## License
19
19
 
@@ -36,7 +36,22 @@ classifiers = [
36
36
  # any release -- the dependency pass's `materials` row and the readers'
37
37
  # carrier rule, both after 0.18.2 at this writing -- so a green run speaks for
38
38
  # that checkout, not for the floor.
39
- dependencies = ["pythontk>=0.17.0"]
39
+ # The floor is 0.20.0 since unitytk 0.6.0: the `unity` operation host is a
40
+ # `ptk.BatchOperationHost` kept per project by `ptk.SessionOperationHost`, and
41
+ # its catalogs are `ptk.OperationCatalog` / `OperationProvider` entry points --
42
+ # pythontk's operations engine, which first ships in 0.20.0 (an older pythontk
43
+ # raises AttributeError on the first `python -m pythontk ops` call).
44
+ dependencies = ["pythontk>=0.20.0"]
45
+
46
+ # Operations (``python -m pythontk ops``): unitytk's declarations, and the
47
+ # editor's C# operations as the kernel's catalog run wrote them.
48
+ [project.entry-points."pythontk.operations"]
49
+ unitytk = "unitytk.operations"
50
+ unitytk_editor = "unitytk.editor_operations"
51
+
52
+ # The ``unity`` host: calls in a Unity editor this tooling starts (C# kernel).
53
+ [project.entry-points."pythontk.operation_hosts"]
54
+ unity = "unitytk:UnityHost.operation_host"
40
55
 
41
56
  [project.urls]
42
57
  Homepage = "https://github.com/m3trik/unitytk"
@@ -643,12 +643,18 @@ class TemplateSourcesTest(unittest.TestCase):
643
643
  self.addCleanup(store.cleanup)
644
644
  dest = os.path.join(store.dir_path(), "Scripts")
645
645
  copied = TemplateSources.copy_flat(
646
- ["UnitytkSettings.cs", "RenderEffects/RenderEffectsController.cs"], dest
646
+ [
647
+ "UnitytkSettings.cs",
648
+ "Kernel/Core/Json.cs",
649
+ "RenderEffects/RenderEffectsController.cs",
650
+ ],
651
+ dest,
647
652
  )
648
653
  self.assertEqual(
649
654
  copied,
650
655
  [
651
656
  os.path.join(dest, "UnitytkSettings.cs"),
657
+ os.path.join(dest, "Json.cs"),
652
658
  os.path.join(dest, "RenderEffectsController.cs"),
653
659
  ],
654
660
  )
@@ -663,8 +669,18 @@ class TemplateSourcesTest(unittest.TestCase):
663
669
  record = "AudioEvent/AudioRecord.g.cs"
664
670
  self.assertEqual(TemplateSources.missing_records([controller]), [record])
665
671
  self.assertEqual(TemplateSources.missing_records([controller, record]), [])
666
- # A record named only in a comment is no dependency.
667
- self.assertEqual(TemplateSources.missing_records(["UnitytkSettings.cs"]), [])
672
+ # A record named only in a comment is no dependency; the core type a
673
+ # file names in full (UnitytkJson forwards to M3trik.Unitytk.Core.Json) is.
674
+ self.assertEqual(
675
+ TemplateSources.missing_records(["UnitytkSettings.cs"]), ["Kernel/Core/Json.cs"]
676
+ )
677
+ self.assertEqual(
678
+ TemplateSources.missing_records(["UnitytkSettings.cs", "Kernel/Core/Json.cs"]), []
679
+ )
680
+ # Inside the core's namespace a bare name is a dependency too.
681
+ self.assertIn(
682
+ "Kernel/Core/Change.g.cs", TemplateSources.missing_records(["Kernel/Core/Outcome.g.cs"])
683
+ )
668
684
 
669
685
  import pythontk as ptk
670
686
 
@@ -672,7 +688,7 @@ class TemplateSourcesTest(unittest.TestCase):
672
688
  self.addCleanup(store.cleanup)
673
689
  dest = os.path.join(store.dir_path(), "Scripts")
674
690
  with self.assertRaises(ValueError) as ctx:
675
- TemplateSources.copy_flat(["UnitytkSettings.cs", controller], dest)
691
+ TemplateSources.copy_flat(["UnitytkSettings.cs", "Kernel/Core/Json.cs", controller], dest)
676
692
  self.assertIn(record, str(ctx.exception))
677
693
  self.assertFalse(os.path.exists(dest), "a refused set copies nothing")
678
694
 
@@ -80,6 +80,46 @@ def folders_of(names):
80
80
  return sorted(folders)
81
81
 
82
82
 
83
+ #: The core's Kernel/ folder: the contract types and the editor kernel,
84
+ #: deployed with every selection (spelled out, so a file added or lost shows).
85
+ KERNEL = (
86
+ "Kernel/Core/Change.g.cs",
87
+ "Kernel/Core/CompileErrorException.cs",
88
+ "Kernel/Core/IOperationTarget.cs",
89
+ "Kernel/Core/ISceneFiles.cs",
90
+ "Kernel/Core/Invocation.cs",
91
+ "Kernel/Core/Issue.g.cs",
92
+ "Kernel/Core/Json.cs",
93
+ "Kernel/Core/M3trik.Unitytk.Core.asmdef",
94
+ "Kernel/Core/OpCall.g.cs",
95
+ "Kernel/Core/OpRequest.g.cs",
96
+ "Kernel/Core/OperationCancelledException.cs",
97
+ "Kernel/Core/OperationCatalogDocument.g.cs",
98
+ "Kernel/Core/OperationEntry.g.cs",
99
+ "Kernel/Core/OperationInterruptedException.cs",
100
+ "Kernel/Core/Outcome.g.cs",
101
+ "Kernel/Core/PureSceneFiles.cs",
102
+ "Kernel/Core/RunRules.cs",
103
+ "Kernel/Core/Wire.g.cs",
104
+ "Kernel/Editor/BatchServer.cs",
105
+ "Kernel/Editor/CSharpConsole.cs",
106
+ "Kernel/Editor/Catalog.cs",
107
+ "Kernel/Editor/CommandLine.cs",
108
+ "Kernel/Editor/Effect.cs",
109
+ "Kernel/Editor/InstanceLock.cs",
110
+ "Kernel/Editor/JsonValue.cs",
111
+ "Kernel/Editor/M3trik.Unitytk.Kernel.asmdef",
112
+ "Kernel/Editor/OpContext.cs",
113
+ "Kernel/Editor/OperationAttribute.cs",
114
+ "Kernel/Editor/OperationRegistry.cs",
115
+ "Kernel/Editor/ProjectDoctor.cs",
116
+ "Kernel/Editor/RunFolder.cs",
117
+ "Kernel/Editor/SceneCapture.cs",
118
+ "Kernel/Editor/SessionServer.cs",
119
+ "Kernel/Editor/UnitySceneFiles.cs",
120
+ )
121
+
122
+
83
123
  def expected_meta(name, guid, is_folder=False):
84
124
  """The .meta Unity writes for bundle *name* carrying *guid*."""
85
125
  suffix = "" if is_folder else os.path.splitext(name)[1]
@@ -116,6 +156,7 @@ class DeployTemplateTest(unittest.TestCase):
116
156
  )
117
157
  self.assertEqual(
118
158
  names,
159
+ sorted(
119
160
  [
120
161
  "ArticulatedRig/ArticulatedRigController.cs",
121
162
  "ArticulatedRig/ArticulatedRigPointerGrab.cs",
@@ -154,7 +195,8 @@ class DeployTemplateTest(unittest.TestCase):
154
195
  "ShotMetadata/ShotMetadataController.cs",
155
196
  "UnitytkSettings.cs",
156
197
  "package.json",
157
- ],
198
+ ]
199
+ + list(KERNEL)),
158
200
  )
159
201
  for p in written:
160
202
  self.assertTrue(os.path.isfile(p))
@@ -419,6 +461,7 @@ class DeployTemplateTest(unittest.TestCase):
419
461
  )
420
462
  self.assertEqual(
421
463
  rel,
464
+ sorted(
422
465
  [
423
466
  "ArticulatedRig/ArticulatedRigController.cs",
424
467
  "ArticulatedRig/ArticulatedRigPointerGrab.cs",
@@ -433,7 +476,8 @@ class DeployTemplateTest(unittest.TestCase):
433
476
  "README.md",
434
477
  "UnitytkSettings.cs",
435
478
  "package.json",
436
- ],
479
+ ]
480
+ + list(KERNEL)),
437
481
  )
438
482
  asmdef = os.path.join(
439
483
  self.package, "ArticulatedRig", "XR", "M3trik.Unitytk.XR.asmdef"
@@ -601,17 +645,20 @@ class DeployTemplateTest(unittest.TestCase):
601
645
  names = sorted(os.path.basename(p) for p in written)
602
646
  self.assertEqual(
603
647
  names,
604
- [
605
- "AudioEventController.cs",
606
- "AudioRecord.g.cs",
607
- "M3trik.Unitytk.asmdef",
608
- "MapAbsence.g.cs",
609
- "MaterialRecord.cs",
610
- "MaterialRecord.g.cs",
611
- "README.md",
612
- "UnitytkSettings.cs",
613
- "package.json",
614
- ],
648
+ sorted(
649
+ [
650
+ "AudioEventController.cs",
651
+ "AudioRecord.g.cs",
652
+ "M3trik.Unitytk.asmdef",
653
+ "MapAbsence.g.cs",
654
+ "MaterialRecord.cs",
655
+ "MaterialRecord.g.cs",
656
+ "README.md",
657
+ "UnitytkSettings.cs",
658
+ "package.json",
659
+ ]
660
+ + [n.rsplit("/", 1)[-1] for n in KERNEL]
661
+ ),
615
662
  )
616
663
 
617
664
  def test_selected_deploy_is_additive(self):
@@ -655,13 +702,29 @@ class DeployTemplateTest(unittest.TestCase):
655
702
  )
656
703
  self.assertTrue(os.path.isfile(self._deployed("UnitytkSettings.cs")))
657
704
 
658
- def test_removing_the_last_component_takes_the_package(self):
659
- """Core alone gates nothing — the folder goes with the last controller
660
- rather than leaving a settings page for no channels."""
705
+ def test_removing_the_last_component_keeps_the_core(self):
706
+ """The core's editor kernel serves operations with no channel deployed,
707
+ so removing the last controller leaves it; components=None removes all."""
661
708
  TemplateDeployer.deploy_package(self.project, ["audio_event"])
662
709
  TemplateDeployer.uninstall_package(self.project, ["audio_event"])
710
+ self.assertTrue(
711
+ os.path.isfile(self._deployed("Kernel/Editor/SessionServer.cs"))
712
+ )
713
+ self.assertFalse(os.path.exists(self._deployed("AudioEvent")))
714
+ TemplateDeployer.uninstall_package(self.project)
663
715
  self.assertFalse(os.path.isdir(self.package))
664
716
 
717
+ def test_kernel_folder_is_core(self):
718
+ """``Kernel/`` joins the required core (never a component of its own),
719
+ so every deploy carries the contract types and the editor kernel."""
720
+ core = next(c for c in TemplateDeployer.components() if c.key == "core")
721
+ self.assertIn("Kernel/Core/M3trik.Unitytk.Core.asmdef", core.files)
722
+ self.assertIn("Kernel/Editor/M3trik.Unitytk.Kernel.asmdef", core.files)
723
+ self.assertNotIn("kernel", {c.key for c in TemplateDeployer.components()})
724
+ TemplateDeployer.deploy_package(self.project, ["audio_event"])
725
+ for folder in ("Kernel", "Kernel/Core", "Kernel/Editor"):
726
+ self.assertTrue(os.path.isfile(self._deployed(folder) + ".meta"), folder)
727
+
665
728
  def test_core_cannot_be_uninstalled_on_its_own(self):
666
729
  TemplateDeployer.deploy_package(self.project)
667
730
  with self.assertRaises(ValueError):
@@ -743,7 +806,8 @@ class DeployTemplateTest(unittest.TestCase):
743
806
  self.project, "uninstall", ["audio_event"]
744
807
  )
745
808
  self.assertEqual([lvl for lvl, _ in uninstall], ["info"])
746
- self.assertFalse(os.path.isdir(self.package))
809
+ self.assertFalse(os.path.exists(self._deployed("AudioEvent")))
810
+ self.assertTrue(os.path.isfile(self._deployed("UnitytkSettings.cs")), "core stays")
747
811
 
748
812
  def test_run_action_rejects_an_empty_selection(self):
749
813
  """Nothing checked is a mistake to report, not a silent no-op (while
@@ -1029,34 +1093,15 @@ class DeployTemplateTest(unittest.TestCase):
1029
1093
  self.assertNotIn(old, bundle, f"{old} is a live bundle path")
1030
1094
  self.assertEqual(old.rsplit("/", 1)[-1], new.rsplit("/", 1)[-1], old)
1031
1095
 
1032
- def test_deploy_still_takes_a_pre_move_name_with_a_deprecation(self):
1033
- """``deploy`` took the flat names of 0.0.15 and earlier
1034
- (``"RenderEffectsController.cs"``). Each still deploys its template --
1035
- from its folder now, with its GUID -- warning with the name to use and
1036
- the release it stops working in. The notices are registered from
1037
- import, so ``Deprecation.expired`` sees one nobody has tripped."""
1038
- legacy = TemplateDeployer._LEGACY_LAYOUT
1039
- for old, new in legacy.items():
1040
- dest = os.path.join(self.tmp, "Flat", *old.split("/"))
1096
+ def test_deploy_no_longer_takes_a_pre_move_name(self):
1097
+ """``deploy`` took the flat names of 0.0.15 and earlier for one window
1098
+ (due 0.2.0): a flat name now names no bundled template."""
1099
+ for old in TemplateDeployer._LEGACY_LAYOUT:
1041
1100
  with self.subTest(old=old):
1042
- with self.assertWarns(DeprecationWarning) as caught:
1043
- TemplateDeployer.deploy(old, dest)
1044
- self.assertIn(repr(new), str(caught.warning))
1045
- self.assertIn("unitytk 0.2.0", str(caught.warning))
1046
- with open(dest, encoding="utf-8") as fh:
1047
- want = bundle_ref(new).read_text(encoding="utf-8")
1048
- self.assertEqual(fh.read(), want)
1049
- with open(dest + ".meta", "rb") as fh:
1050
- self.assertEqual(fh.read(), bundle_meta(new))
1051
- records = {
1052
- r.what: r.remove_in
1053
- for r in ptk.Deprecation.registered(module="unitytk", kind="value")
1054
- }
1055
- for old in legacy:
1056
- what = f"TemplateDeployer.deploy flat-layout name {old!r}"
1057
- self.assertEqual(records.get(what), "0.2.0", old)
1058
- with self.assertRaises(FileNotFoundError): # only the table's names
1059
- TemplateDeployer.deploy("NoSuchTemplate.cs", os.path.join(self.tmp, "x"))
1101
+ with self.assertRaises(FileNotFoundError):
1102
+ TemplateDeployer.deploy(old, os.path.join(self.tmp, "Flat", *old.split("/")))
1103
+ records = {r.what for r in ptk.Deprecation.registered(module="unitytk", kind="value")}
1104
+ self.assertFalse([w for w in records if "flat-layout name" in w])
1060
1105
 
1061
1106
  def test_a_flat_deployment_moves_into_feature_folders_keeping_its_guids(self):
1062
1107
  metas = self._legacy_deploy()
@@ -1185,10 +1230,14 @@ class DeployTemplateTest(unittest.TestCase):
1185
1230
  surface importer compiles against too. A deploy over a 0.4.0 package
1186
1231
  moves each old copy with its .meta -- the GUIDs the project knows --
1187
1232
  rather than writing a second copy that would compile twice; before the
1188
- move, status counts the old copy under its name today."""
1233
+ move, status counts the old copy under its name today. 0.6.0's kernel
1234
+ exceptions (``Kernel/Editor/`` to ``Kernel/Core/``) move the same way:
1235
+ a copy left behind defines a second type the rules never match."""
1189
1236
  relocated = TemplateDeployer._RELOCATED
1190
- self.assertEqual(
1191
- sorted(relocated.values()), ["MapAbsence.g.cs", "MaterialRecord.cs", "MaterialRecord.g.cs"]
1237
+ self.assertLessEqual(
1238
+ {"MapAbsence.g.cs", "MaterialRecord.cs", "MaterialRecord.g.cs",
1239
+ "Kernel/Core/CompileErrorException.cs", "Kernel/Core/OperationCancelledException.cs"},
1240
+ set(relocated.values()),
1192
1241
  )
1193
1242
  bundle = set(TemplateDeployer._bundle_names())
1194
1243
  for old, new in relocated.items():
@@ -1242,7 +1291,11 @@ class DeployTemplateTest(unittest.TestCase):
1242
1291
 
1243
1292
  optional = [c.key for c in TemplateDeployer.components() if not c.required]
1244
1293
  TemplateDeployer.uninstall_package(self.project, optional)
1245
- self.assertFalse(os.path.isdir(self.package), "nothing left to gate")
1294
+ self.assertTrue(os.path.isfile(self._deployed("UnitytkSettings.cs")), "core stays")
1295
+ self.assertFalse(
1296
+ [n for n in TemplateDeployer._present(self.package) if "/" in n and not n.startswith("Kernel/")],
1297
+ "every component folder went",
1298
+ )
1246
1299
 
1247
1300
  def test_meta_files_ship_in_the_wheel_and_the_sdist(self):
1248
1301
  """package-data builds the wheel and MANIFEST.in the sdist; a .meta
@@ -0,0 +1,86 @@
1
+ # !/usr/bin/python
2
+ # coding=utf-8
3
+ """The Unity editor kernel's operation catalog (``editor_operations.json``).
4
+
5
+ The kernel (``templates/Kernel/``, C#) declares its operations with
6
+ ``[Operation]`` and an editor writes their catalog
7
+ (``M3trik.Unitytk.Kernel.Catalog.WriteFromCommandLine``). These tests hold
8
+ what needs no editor: the committed file is written exactly as Python writes
9
+ JSON, every declared id is in it, it keeps pythontk's catalog rules with its
10
+ twins in mayatk and blendertk, and the kernel's engine-free half passes its
11
+ own .NET tests where the SDK is installed.
12
+ """
13
+ import json
14
+ import os
15
+ import re
16
+ import shutil
17
+ import subprocess
18
+ import unittest
19
+
20
+ import pythontk as ptk
21
+
22
+ PACKAGE = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "unitytk")
23
+ CATALOG = os.path.join(PACKAGE, "editor_operations.json")
24
+ KERNEL = os.path.join(PACKAGE, "templates", "Kernel")
25
+ CORE_TESTS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "core_dotnet")
26
+
27
+
28
+ def declared_ids():
29
+ """Every ``[Operation("unity.…")]`` id in the kernel's C#."""
30
+ ids = set()
31
+ for root, _dirs, files in os.walk(KERNEL):
32
+ for name in files:
33
+ if name.endswith(".cs"):
34
+ with open(os.path.join(root, name), encoding="utf-8") as fh:
35
+ ids.update(re.findall(r'\[Operation\(\s*"(unity\.[a-z0-9_.]+)"', fh.read()))
36
+ return ids
37
+
38
+
39
+ class EditorCatalogTest(unittest.TestCase):
40
+ def setUp(self):
41
+ with open(CATALOG, encoding="utf-8", newline="") as fh:
42
+ self.text = fh.read()
43
+ self.document = json.loads(self.text)
44
+
45
+ def test_written_as_python_writes_json(self):
46
+ """The C# writer's indent and escapes are Python's, so the file diffs like any catalog."""
47
+ self.assertEqual(self.text, json.dumps(self.document, indent=2) + "\n")
48
+
49
+ def test_every_declared_operation_is_listed(self):
50
+ """A declaration added or renamed without writing the catalog shows here."""
51
+ listed = {entry["id"] for entry in self.document["operations"]}
52
+ self.assertEqual(listed, declared_ids())
53
+ self.assertEqual(self.document["provider"], "com.m3trik.unitytk")
54
+
55
+ def test_the_slice_zero_effects(self):
56
+ by_id = {entry["id"]: entry for entry in self.document["operations"]}
57
+ self.assertEqual(by_id["unity.csharp.exec"]["effect"], "code")
58
+ self.assertFalse(by_id["unity.csharp.exec"]["dry_run"], "code has no plan")
59
+ self.assertEqual(by_id["unity.scene.view"]["effect"], "read")
60
+ self.assertEqual(by_id["unity.project.doctor"]["effect"], "read")
61
+
62
+ def test_keeps_the_catalog_rules_and_agrees_with_its_twins(self):
63
+ """``unity.scene.view`` takes the arguments ``maya.scene.view`` and
64
+ ``blender.scene.view`` take: twins across hosts never differ."""
65
+ modules = [CATALOG.replace(os.sep, "/")]
66
+ for twin in ("mayatk.operations", "blendertk.operations"):
67
+ try:
68
+ __import__(twin)
69
+ except ImportError:
70
+ continue
71
+ modules.append(twin)
72
+ self.assertEqual(ptk.OperationProvider.check(modules=modules), [])
73
+
74
+ @unittest.skipUnless(shutil.which("dotnet"), "the .NET SDK is not installed")
75
+ def test_the_engine_free_core_passes_its_dotnet_tests(self):
76
+ done = subprocess.run(
77
+ ["dotnet", "test", CORE_TESTS, "--nologo"],
78
+ capture_output=True,
79
+ text=True,
80
+ timeout=600,
81
+ )
82
+ self.assertEqual(done.returncode, 0, done.stdout[-4000:] + done.stderr[-2000:])
83
+
84
+
85
+ if __name__ == "__main__":
86
+ unittest.main()
@@ -53,6 +53,7 @@ FBX_ASSET_NAME = "fixture_keyed_visibility.fbx"
53
53
  # UnitytkSettings.cs is the compile-coupled home of ImportGate/CarrierImport.
54
54
  CS_FILES = [
55
55
  "UnitytkSettings.cs",
56
+ "Kernel/Core/Json.cs",
56
57
  "RenderEffects/RenderEffectsController.cs",
57
58
  "AudioEvent/AudioEventController.cs",
58
59
  "AudioEvent/AudioRecord.g.cs",
@@ -379,7 +379,7 @@ class TestRenderEffectsE2E(unittest.TestCase):
379
379
  os.makedirs(assets_path, exist_ok=True)
380
380
  shutil.copy2(fbx_path, os.path.join(assets_path, "effects_test.fbx"))
381
381
  TemplateSources.copy_flat(
382
- ("UnitytkSettings.cs", "RenderEffects/RenderEffectsController.cs"),
382
+ ("UnitytkSettings.cs", "Kernel/Core/Json.cs", "RenderEffects/RenderEffectsController.cs"),
383
383
  os.path.join(assets_path, "Scripts"),
384
384
  )
385
385
  editor_path = os.path.join(assets_path, "Editor")
@@ -854,7 +854,7 @@ class TestRenderEffectsGlbParity(unittest.TestCase):
854
854
  os.path.join(self.temp_dir, name), os.path.join(assets_path, name)
855
855
  )
856
856
  TemplateSources.copy_flat(
857
- ("UnitytkSettings.cs", "RenderEffects/RenderEffectsController.cs"),
857
+ ("UnitytkSettings.cs", "Kernel/Core/Json.cs", "RenderEffects/RenderEffectsController.cs"),
858
858
  os.path.join(assets_path, "Scripts"),
859
859
  )
860
860
  editor_path = os.path.join(assets_path, "Editor")
@@ -487,6 +487,7 @@ class TestRenderOpacityE2E(unittest.TestCase):
487
487
  TemplateSources.copy_flat(
488
488
  (
489
489
  "UnitytkSettings.cs",
490
+ "Kernel/Core/Json.cs",
490
491
  "RenderEffects/RenderEffectsController.cs",
491
492
  "AudioEvent/AudioEventController.cs",
492
493
  "AudioEvent/AudioRecord.g.cs",
@@ -42,7 +42,11 @@ SCRIPTS_DIR = os.path.dirname(
42
42
 
43
43
  # Bundle paths. UnitytkSettings.cs is the compile-coupled home of
44
44
  # ImportGate/CarrierImport.
45
- CS_FILES = ["UnitytkSettings.cs", "RenderEffects/RenderEffectsController.cs"]
45
+ CS_FILES = [
46
+ "UnitytkSettings.cs",
47
+ "Kernel/Core/Json.cs",
48
+ "RenderEffects/RenderEffectsController.cs",
49
+ ]
46
50
 
47
51
  # Object names used in the Maya scene
48
52
  OBJECT_NAMES = ["piece_A", "piece_B", "piece_C"]
@@ -58,6 +58,7 @@ PACKAGE_SUBFOLDER = "MyModel_Package"
58
58
  # test simulates an end user WITHOUT Python unitytk, copying the files flat).
59
59
  CS_FILES = [
60
60
  "UnitytkSettings.cs",
61
+ "Kernel/Core/Json.cs",
61
62
  "RenderEffects/RenderEffectsController.cs",
62
63
  "AudioEvent/AudioEventController.cs",
63
64
  "AudioEvent/AudioRecord.g.cs",