vcti-usd-schema-report 0.1.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 (36) hide show
  1. vcti_usd_schema_report-0.1.0/LICENSE +8 -0
  2. vcti_usd_schema_report-0.1.0/PKG-INFO +212 -0
  3. vcti_usd_schema_report-0.1.0/README.md +185 -0
  4. vcti_usd_schema_report-0.1.0/pyproject.toml +92 -0
  5. vcti_usd_schema_report-0.1.0/setup.cfg +4 -0
  6. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/__init__.py +110 -0
  7. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/builder.py +585 -0
  8. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/cli.py +49 -0
  9. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/declarations.py +186 -0
  10. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/fixtures.py +80 -0
  11. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/plugin/generatedSchema.usda +65 -0
  12. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/plugin/plugInfo.json +55 -0
  13. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/plugin/schema.usda +45 -0
  14. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/py.typed +0 -0
  15. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/registry.py +95 -0
  16. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/stages/nested_sections.usda +143 -0
  17. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/stages/results_deck.usda +71 -0
  18. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/stages/working_views.usda +36 -0
  19. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/validator.py +249 -0
  20. vcti_usd_schema_report-0.1.0/src/vcti/usd/schema/report/vocabulary.py +65 -0
  21. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/PKG-INFO +212 -0
  22. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/SOURCES.txt +34 -0
  23. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/dependency_links.txt +1 -0
  24. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/entry_points.txt +5 -0
  25. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/requires.txt +14 -0
  26. vcti_usd_schema_report-0.1.0/src/vcti_usd_schema_report.egg-info/top_level.txt +1 -0
  27. vcti_usd_schema_report-0.1.0/tests/test_builder.py +465 -0
  28. vcti_usd_schema_report-0.1.0/tests/test_cli.py +47 -0
  29. vcti_usd_schema_report-0.1.0/tests/test_declarations.py +117 -0
  30. vcti_usd_schema_report-0.1.0/tests/test_docs.py +158 -0
  31. vcti_usd_schema_report-0.1.0/tests/test_examples.py +268 -0
  32. vcti_usd_schema_report-0.1.0/tests/test_fixtures.py +98 -0
  33. vcti_usd_schema_report-0.1.0/tests/test_registry.py +143 -0
  34. vcti_usd_schema_report-0.1.0/tests/test_validator.py +374 -0
  35. vcti_usd_schema_report-0.1.0/tests/test_version.py +15 -0
  36. vcti_usd_schema_report-0.1.0/tests/test_vocabulary.py +44 -0
@@ -0,0 +1,8 @@
1
+ Copyright (c) 2018-2026 Visual Collaboration Technologies Inc.
2
+ All Rights Reserved.
3
+
4
+ This software is proprietary and confidential. Unauthorized copying,
5
+ distribution, or use of this software, via any medium, is strictly
6
+ prohibited. Access is granted only to authorized VCollab developers
7
+ and individuals explicitly authorized by Visual Collaboration
8
+ Technologies Inc.
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.4
2
+ Name: vcti-usd-schema-report
3
+ Version: 0.1.0
4
+ Summary: Codeless OpenUSD schema for the VCollab report model, the slides of a report and the deck that arranges them: schema source, generated plugin, synthetic fixtures and a validator
5
+ Author: Visual Collaboration Technologies Inc.
6
+ License-Expression: LicenseRef-Proprietary
7
+ Project-URL: Repository, https://github.com/vcollab/vcti-python-usd-schema-report
8
+ Project-URL: Changelog, https://github.com/vcollab/vcti-python-usd-schema-report/blob/main/CHANGELOG.md
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Requires-Python: <3.15,>=3.12
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: usd-core<27,>=26.11
17
+ Provides-Extra: test
18
+ Requires-Dist: pytest; extra == "test"
19
+ Requires-Dist: pytest-cov; extra == "test"
20
+ Provides-Extra: lint
21
+ Requires-Dist: ruff; extra == "lint"
22
+ Provides-Extra: typecheck
23
+ Requires-Dist: mypy; extra == "typecheck"
24
+ Provides-Extra: schema
25
+ Requires-Dist: jinja2; extra == "schema"
26
+ Dynamic: license-file
27
+
28
+ # VCollab USD Report Schema
29
+
30
+ Codeless OpenUSD schema for the VCollab report model, the slides of a report and the deck that arranges them: schema source, generated plugin, synthetic fixtures and a validator
31
+
32
+ ## Overview
33
+
34
+ A VCollab report is a set of slides made from one or more models. It is
35
+ defined by its variables and its workflow, which are stored as JSON;
36
+ everything else is produced by running the workflow, and the server holds
37
+ that as a USD stage. This package defines the part of that stage that holds
38
+ the slides and the deck.
39
+
40
+ The stage keeps two things apart. The **list** holds every slide and
41
+ section, flat, each named by a prim path that never changes. The **deck**
42
+ is a tree of nodes under `/Report/deck` that arranges some of them: each
43
+ node places one item, nesting is the hierarchy, and the order of a node's
44
+ children is the order of the deck. Renaming, reordering or moving an item
45
+ touches its name or the nodes, never its path. A slide the deck does not
46
+ reach is a view kept while working.
47
+
48
+ This package ships that schema as a codeless USD plugin, the declarations
49
+ it is generated from, three fixture reports that each exercise one group of
50
+ contracts, authoring helpers that make the changes the viewer protocol's
51
+ deck actions call for, and the validator a server-built stage must pass
52
+ unchanged. It is a sibling of `vcti-usd-schema-delivery`, which describes a
53
+ model. The schema is a candidate, and a slide's content, the capture of the
54
+ screen, is not designed yet: a slide today is a name and the user's
55
+ attributes.
56
+
57
+ ## Installation
58
+
59
+ ```bash
60
+ pip install vcti-usd-schema-report
61
+ ```
62
+
63
+ ### In `requirements.txt`
64
+
65
+ ```
66
+ vcti-usd-schema-report>=0.1.0
67
+ ```
68
+
69
+ ### In `pyproject.toml` dependencies
70
+
71
+ ```toml
72
+ dependencies = [
73
+ "vcti-usd-schema-report>=0.1.0",
74
+ ]
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Quick Start
80
+
81
+ ### Validate a stage
82
+
83
+ ```python
84
+ from vcti.usd.schema.report import open_fixture, validate
85
+
86
+ stage = open_fixture("results_deck")
87
+ errors = validate(stage)
88
+ print(errors) # [] for a conforming stage
89
+ ```
90
+
91
+ `open_fixture` and `open_stage` register the plugin first. Any failure is
92
+ one string: the path of the prim it concerns, then a short stable phrase.
93
+
94
+ ### Open your own stage with the plugin registered
95
+
96
+ ```python
97
+ from pxr import Usd
98
+
99
+ from vcti.usd.schema.report import fixture_path, register_plugin
100
+
101
+ register_plugin()
102
+ stage = Usd.Stage.Open(str(fixture_path("nested_sections")))
103
+ report = stage.GetPrimAtPath("/Report")
104
+ print(report.GetTypeName(), report.GetAttribute("vct:schemaVersion").Get())
105
+ ```
106
+
107
+ Registration is explicit and idempotent, and it also registers every
108
+ installed sibling schema, such as the delivery schema's. USD only knows the
109
+ plugins registered before it first looks up a typed prim, so a process that
110
+ opens stages itself calls `register_plugin()` before the first one.
111
+
112
+ ### Build and edit a report
113
+
114
+ The helpers take the prim name of anything they create, because allocating
115
+ it is the server's rule, and return the item's path, its identity from then
116
+ on.
117
+
118
+ ```python
119
+ from vcti.usd.schema.report import (
120
+ DECK_PATH,
121
+ Position,
122
+ add_section,
123
+ add_slide,
124
+ logical_path,
125
+ move_item,
126
+ new_report_stage,
127
+ rename_item,
128
+ validate,
129
+ )
130
+
131
+ stage = new_report_stage()
132
+ deck = Position(parent=DECK_PATH)
133
+ overview = add_slide(stage, "s1", "Overview", position=deck)
134
+ results = add_section(stage, "k1", "Results", position=deck)
135
+ stress = add_slide(stage, "s2", "Stress", {"load_case": "LC1"}, Position(parent=results))
136
+ kept = add_slide(stage, "s3", "Before the change") # in the list, not in the deck
137
+
138
+ rename_item(stage, results, "Findings")
139
+ move_item(stage, overview, Position(after=stress))
140
+
141
+ print(stress, logical_path(stage, stress)) # /Report/slides/s2 /Findings/Stress
142
+ print(validate(stage)) # []
143
+ ```
144
+
145
+ ### From the command line
146
+
147
+ ```bash
148
+ vcti-usd-report-validate report.usda other.usda
149
+ ```
150
+
151
+ One line per stage, `PASS` or `FAIL`, each failure indented beneath it, and
152
+ a non-zero exit status when any stage fails or cannot be opened.
153
+
154
+ ---
155
+
156
+ ## Key API
157
+
158
+ | Name | What it does |
159
+ |---|---|
160
+ | `register_plugin()` | Register the shipped codeless plugin, and every installed sibling schema's, with this process, once |
161
+ | `open_stage(path)`, `open_fixture(name)` | Open with the plugin registered |
162
+ | `validate(stage)`, `validate_file(path)` | Every contract the schema states, as a list of messages |
163
+ | `new_report_stage(path)` | A stage holding an empty report |
164
+ | `add_slide`, `add_section`, `duplicate_slide`, `duplicate_section` | New items, optionally placed in the deck |
165
+ | `rename_item`, `move_item`, `remove_item`, `set_attributes` | Changes to an item or to where it is |
166
+ | `Position(parent=…)`, `Position(after=…)`, `Position(before=…)` | Where an item goes in the deck |
167
+ | `node_of(stage, item)`, `logical_path(stage, item)` | An item's node, and the path rules look it up by |
168
+ | `fixture_path(name)`, `fixture_paths()`, `FIXTURE_NAMES`, `build_fixtures(dir)` | The three shipped reports, and writing them again |
169
+ | `render_schema()`, `write_schema(path)` | The `schema.usda` text, from the declarations |
170
+ | `SCHEMA_VERSION`, `REPORT_PATH`, `DECK_PATH`, `ITEM_TYPES`, … | The fixed names |
171
+
172
+ The types:
173
+
174
+ | Type | Properties | Purpose |
175
+ |---|---|---|
176
+ | `VctReport` | `uniform string vct:schemaVersion` | Anchor for one report, at `/Report` |
177
+ | `VctSlide` | `string vct:name`; `attr:*` | One slide, under `/Report/slides` |
178
+ | `VctSection` | `string vct:name`; `attr:*` | One section, under `/Report/sections` |
179
+ | `VctDeck` | none | The hierarchy's fixed root, `/Report/deck` |
180
+ | `VctDeckNode` | `rel vct:item` | Places one slide or section in the deck |
181
+
182
+ The fixtures, in reading order:
183
+
184
+ | Fixture | Scenario | Contracts it exercises |
185
+ |---|---|---|
186
+ | `results_deck` | Three slides, one section | The list beside the hierarchy, a slide outside the deck, a user attribute |
187
+ | `nested_sections` | Sections inside sections | Depth and order, an empty section, a section outside the deck, repeated names, scalar attribute types |
188
+ | `working_views` | Two slides, nothing arranged | An empty deck; the scopes and the deck are always present |
189
+
190
+ ---
191
+
192
+ ## Dependencies
193
+
194
+ - `usd-core` 26.11 or later within the 26 series, the OpenUSD Python
195
+ distribution. The shipped plugin was generated by that version's
196
+ `usdGenSchema`, so a new major is admitted only after regeneration.
197
+ - `jinja2`, in the `schema` extra, only to regenerate the plugin.
198
+
199
+ It does not depend on `vcti-usd-schema-delivery`.
200
+
201
+ ---
202
+
203
+ ## Documentation
204
+
205
+ | If you want to… | Read |
206
+ |---|---|
207
+ | Get started using the package | Quick Start above |
208
+ | Build, edit and read a report, fixture by fixture | [docs/patterns.md](docs/patterns.md) |
209
+ | Understand the list, the deck and the decisions behind them | [docs/design.md](docs/design.md) |
210
+ | Navigate and understand the source | [docs/source-guide.md](docs/source-guide.md) |
211
+ | Add a type, a property, a check, an action or a fixture | [docs/extending.md](docs/extending.md) |
212
+ | See what changed | [CHANGELOG.md](CHANGELOG.md) |
@@ -0,0 +1,185 @@
1
+ # VCollab USD Report Schema
2
+
3
+ Codeless OpenUSD schema for the VCollab report model, the slides of a report and the deck that arranges them: schema source, generated plugin, synthetic fixtures and a validator
4
+
5
+ ## Overview
6
+
7
+ A VCollab report is a set of slides made from one or more models. It is
8
+ defined by its variables and its workflow, which are stored as JSON;
9
+ everything else is produced by running the workflow, and the server holds
10
+ that as a USD stage. This package defines the part of that stage that holds
11
+ the slides and the deck.
12
+
13
+ The stage keeps two things apart. The **list** holds every slide and
14
+ section, flat, each named by a prim path that never changes. The **deck**
15
+ is a tree of nodes under `/Report/deck` that arranges some of them: each
16
+ node places one item, nesting is the hierarchy, and the order of a node's
17
+ children is the order of the deck. Renaming, reordering or moving an item
18
+ touches its name or the nodes, never its path. A slide the deck does not
19
+ reach is a view kept while working.
20
+
21
+ This package ships that schema as a codeless USD plugin, the declarations
22
+ it is generated from, three fixture reports that each exercise one group of
23
+ contracts, authoring helpers that make the changes the viewer protocol's
24
+ deck actions call for, and the validator a server-built stage must pass
25
+ unchanged. It is a sibling of `vcti-usd-schema-delivery`, which describes a
26
+ model. The schema is a candidate, and a slide's content, the capture of the
27
+ screen, is not designed yet: a slide today is a name and the user's
28
+ attributes.
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ pip install vcti-usd-schema-report
34
+ ```
35
+
36
+ ### In `requirements.txt`
37
+
38
+ ```
39
+ vcti-usd-schema-report>=0.1.0
40
+ ```
41
+
42
+ ### In `pyproject.toml` dependencies
43
+
44
+ ```toml
45
+ dependencies = [
46
+ "vcti-usd-schema-report>=0.1.0",
47
+ ]
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Quick Start
53
+
54
+ ### Validate a stage
55
+
56
+ ```python
57
+ from vcti.usd.schema.report import open_fixture, validate
58
+
59
+ stage = open_fixture("results_deck")
60
+ errors = validate(stage)
61
+ print(errors) # [] for a conforming stage
62
+ ```
63
+
64
+ `open_fixture` and `open_stage` register the plugin first. Any failure is
65
+ one string: the path of the prim it concerns, then a short stable phrase.
66
+
67
+ ### Open your own stage with the plugin registered
68
+
69
+ ```python
70
+ from pxr import Usd
71
+
72
+ from vcti.usd.schema.report import fixture_path, register_plugin
73
+
74
+ register_plugin()
75
+ stage = Usd.Stage.Open(str(fixture_path("nested_sections")))
76
+ report = stage.GetPrimAtPath("/Report")
77
+ print(report.GetTypeName(), report.GetAttribute("vct:schemaVersion").Get())
78
+ ```
79
+
80
+ Registration is explicit and idempotent, and it also registers every
81
+ installed sibling schema, such as the delivery schema's. USD only knows the
82
+ plugins registered before it first looks up a typed prim, so a process that
83
+ opens stages itself calls `register_plugin()` before the first one.
84
+
85
+ ### Build and edit a report
86
+
87
+ The helpers take the prim name of anything they create, because allocating
88
+ it is the server's rule, and return the item's path, its identity from then
89
+ on.
90
+
91
+ ```python
92
+ from vcti.usd.schema.report import (
93
+ DECK_PATH,
94
+ Position,
95
+ add_section,
96
+ add_slide,
97
+ logical_path,
98
+ move_item,
99
+ new_report_stage,
100
+ rename_item,
101
+ validate,
102
+ )
103
+
104
+ stage = new_report_stage()
105
+ deck = Position(parent=DECK_PATH)
106
+ overview = add_slide(stage, "s1", "Overview", position=deck)
107
+ results = add_section(stage, "k1", "Results", position=deck)
108
+ stress = add_slide(stage, "s2", "Stress", {"load_case": "LC1"}, Position(parent=results))
109
+ kept = add_slide(stage, "s3", "Before the change") # in the list, not in the deck
110
+
111
+ rename_item(stage, results, "Findings")
112
+ move_item(stage, overview, Position(after=stress))
113
+
114
+ print(stress, logical_path(stage, stress)) # /Report/slides/s2 /Findings/Stress
115
+ print(validate(stage)) # []
116
+ ```
117
+
118
+ ### From the command line
119
+
120
+ ```bash
121
+ vcti-usd-report-validate report.usda other.usda
122
+ ```
123
+
124
+ One line per stage, `PASS` or `FAIL`, each failure indented beneath it, and
125
+ a non-zero exit status when any stage fails or cannot be opened.
126
+
127
+ ---
128
+
129
+ ## Key API
130
+
131
+ | Name | What it does |
132
+ |---|---|
133
+ | `register_plugin()` | Register the shipped codeless plugin, and every installed sibling schema's, with this process, once |
134
+ | `open_stage(path)`, `open_fixture(name)` | Open with the plugin registered |
135
+ | `validate(stage)`, `validate_file(path)` | Every contract the schema states, as a list of messages |
136
+ | `new_report_stage(path)` | A stage holding an empty report |
137
+ | `add_slide`, `add_section`, `duplicate_slide`, `duplicate_section` | New items, optionally placed in the deck |
138
+ | `rename_item`, `move_item`, `remove_item`, `set_attributes` | Changes to an item or to where it is |
139
+ | `Position(parent=…)`, `Position(after=…)`, `Position(before=…)` | Where an item goes in the deck |
140
+ | `node_of(stage, item)`, `logical_path(stage, item)` | An item's node, and the path rules look it up by |
141
+ | `fixture_path(name)`, `fixture_paths()`, `FIXTURE_NAMES`, `build_fixtures(dir)` | The three shipped reports, and writing them again |
142
+ | `render_schema()`, `write_schema(path)` | The `schema.usda` text, from the declarations |
143
+ | `SCHEMA_VERSION`, `REPORT_PATH`, `DECK_PATH`, `ITEM_TYPES`, … | The fixed names |
144
+
145
+ The types:
146
+
147
+ | Type | Properties | Purpose |
148
+ |---|---|---|
149
+ | `VctReport` | `uniform string vct:schemaVersion` | Anchor for one report, at `/Report` |
150
+ | `VctSlide` | `string vct:name`; `attr:*` | One slide, under `/Report/slides` |
151
+ | `VctSection` | `string vct:name`; `attr:*` | One section, under `/Report/sections` |
152
+ | `VctDeck` | none | The hierarchy's fixed root, `/Report/deck` |
153
+ | `VctDeckNode` | `rel vct:item` | Places one slide or section in the deck |
154
+
155
+ The fixtures, in reading order:
156
+
157
+ | Fixture | Scenario | Contracts it exercises |
158
+ |---|---|---|
159
+ | `results_deck` | Three slides, one section | The list beside the hierarchy, a slide outside the deck, a user attribute |
160
+ | `nested_sections` | Sections inside sections | Depth and order, an empty section, a section outside the deck, repeated names, scalar attribute types |
161
+ | `working_views` | Two slides, nothing arranged | An empty deck; the scopes and the deck are always present |
162
+
163
+ ---
164
+
165
+ ## Dependencies
166
+
167
+ - `usd-core` 26.11 or later within the 26 series, the OpenUSD Python
168
+ distribution. The shipped plugin was generated by that version's
169
+ `usdGenSchema`, so a new major is admitted only after regeneration.
170
+ - `jinja2`, in the `schema` extra, only to regenerate the plugin.
171
+
172
+ It does not depend on `vcti-usd-schema-delivery`.
173
+
174
+ ---
175
+
176
+ ## Documentation
177
+
178
+ | If you want to… | Read |
179
+ |---|---|
180
+ | Get started using the package | Quick Start above |
181
+ | Build, edit and read a report, fixture by fixture | [docs/patterns.md](docs/patterns.md) |
182
+ | Understand the list, the deck and the decisions behind them | [docs/design.md](docs/design.md) |
183
+ | Navigate and understand the source | [docs/source-guide.md](docs/source-guide.md) |
184
+ | Add a type, a property, a check, an action or a fixture | [docs/extending.md](docs/extending.md) |
185
+ | See what changed | [CHANGELOG.md](CHANGELOG.md) |
@@ -0,0 +1,92 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "vcti-usd-schema-report"
7
+ version = "0.1.0"
8
+ description = "Codeless OpenUSD schema for the VCollab report model, the slides of a report and the deck that arranges them: schema source, generated plugin, synthetic fixtures and a validator"
9
+ readme = "README.md"
10
+ authors = [
11
+ {name = "Visual Collaboration Technologies Inc."}
12
+ ]
13
+ license = "LicenseRef-Proprietary"
14
+ license-files = ["LICENSE"]
15
+ classifiers = [
16
+ "Operating System :: OS Independent",
17
+ "Programming Language :: Python :: 3.12",
18
+ "Programming Language :: Python :: 3.13",
19
+ "Programming Language :: Python :: 3.14",
20
+ ]
21
+ requires-python = ">=3.12,<3.15"
22
+ dependencies = [
23
+ # The shipped plugin was generated by usdGenSchema 26.11; a new major is
24
+ # admitted only after the plugin is regenerated and checked against it.
25
+ "usd-core>=26.11,<27",
26
+ ]
27
+
28
+ [project.urls]
29
+ Repository = "https://github.com/vcollab/vcti-python-usd-schema-report"
30
+ Changelog = "https://github.com/vcollab/vcti-python-usd-schema-report/blob/main/CHANGELOG.md"
31
+
32
+ [project.scripts]
33
+ vcti-usd-report-validate = "vcti.usd.schema.report.cli:main"
34
+
35
+ # Every schema package of the family names its plugin directory here, and
36
+ # each one's register_plugin() registers them all; see registry.py.
37
+ [project.entry-points."vcti.usd.schema"]
38
+ report = "vcti.usd.schema.report.registry:PLUGIN_DIR"
39
+
40
+ [tool.setuptools.packages.find]
41
+ where = ["src"]
42
+ include = ["vcti.usd.schema.report", "vcti.usd.schema.report.*"]
43
+
44
+ [tool.setuptools.package-data]
45
+ "vcti.usd.schema.report" = [
46
+ "py.typed",
47
+ "plugin/*.json",
48
+ "plugin/*.usda",
49
+ "stages/*.usda",
50
+ ]
51
+
52
+ [project.optional-dependencies]
53
+ test = ["pytest", "pytest-cov"]
54
+ lint = ["ruff"]
55
+ typecheck = ["mypy"]
56
+ # usdGenSchema, which regenerates the plugin, renders its output with jinja2.
57
+ schema = ["jinja2"]
58
+
59
+ [tool.pytest.ini_options]
60
+ addopts = "--cov=vcti.usd.schema.report --cov-report=term-missing --cov-fail-under=95"
61
+
62
+ [tool.mypy]
63
+ python_version = "3.12"
64
+ strict = true
65
+ files = ["src"]
66
+ namespace_packages = true
67
+ explicit_package_bases = true
68
+ mypy_path = ["src"]
69
+
70
+ [tool.coverage.run]
71
+ branch = true
72
+
73
+ [tool.coverage.report]
74
+ exclude_also = [
75
+ "raise NotImplementedError",
76
+ "if TYPE_CHECKING:",
77
+ "if __name__ == .__main__.:",
78
+ "@(abc\\.)?abstractmethod",
79
+ "^\\s*\\.\\.\\.\\s*$",
80
+ ]
81
+
82
+ [tool.ruff]
83
+ target-version = "py312"
84
+ line-length = 99
85
+
86
+ [tool.ruff.lint]
87
+ select = ["E", "F", "W", "I", "UP"]
88
+
89
+ # usd-core ships no type information, so its modules are untyped here.
90
+ [[tool.mypy.overrides]]
91
+ module = ["pxr.*"]
92
+ ignore_missing_imports = true
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,110 @@
1
+ # Copyright Visual Collaboration Technologies Inc. All Rights Reserved.
2
+ # See LICENSE for details.
3
+ """vcti.usd.schema.report: the OpenUSD schema for the VCollab report model.
4
+
5
+ A report's slides and its deck, as the stage the VCollab server holds once it
6
+ has run the report's workflow. The stage keeps two things apart: the list,
7
+ every slide and section, flat and named by prim path; and the deck, a tree of
8
+ nodes that arranges some of them in order. This package ships that schema as
9
+ a codeless USD plugin, the declarations it is generated from, three fixture
10
+ reports that exercise its contracts, the authoring helpers that make the
11
+ changes the protocol's deck actions call for, and the validator a
12
+ server-built stage must pass.
13
+
14
+ Typical use::
15
+
16
+ from vcti.usd.schema.report import open_fixture, validate
17
+
18
+ stage = open_fixture("results_deck")
19
+ assert validate(stage) == []
20
+ """
21
+
22
+ from importlib.metadata import version
23
+
24
+ from .builder import (
25
+ Position,
26
+ add_section,
27
+ add_slide,
28
+ build_fixtures,
29
+ duplicate_section,
30
+ duplicate_slide,
31
+ finish,
32
+ item_path,
33
+ logical_path,
34
+ move_item,
35
+ new_report_stage,
36
+ node_of,
37
+ remove_item,
38
+ rename_item,
39
+ set_attributes,
40
+ )
41
+ from .declarations import normalize_plugin_info, render_schema, write_schema
42
+ from .fixtures import (
43
+ FIXTURE_NAMES,
44
+ STAGES_DIR,
45
+ fixture_path,
46
+ fixture_paths,
47
+ open_fixture,
48
+ open_stage,
49
+ )
50
+ from .registry import ENTRY_POINT_GROUP, PLUGIN_DIR, is_registered, plugin_dirs, register_plugin
51
+ from .validator import validate, validate_file
52
+ from .vocabulary import (
53
+ ATTRIBUTE_NAMESPACE,
54
+ DECK_NAME,
55
+ DECK_PATH,
56
+ ITEM_SCOPES,
57
+ ITEM_TYPES,
58
+ LIBRARY_NAME,
59
+ REPORT_PATH,
60
+ SCHEMA_VERSION,
61
+ SECTIONS_SCOPE,
62
+ SLIDES_SCOPE,
63
+ )
64
+
65
+ __version__ = version("vcti-usd-schema-report")
66
+
67
+ __all__ = [
68
+ "ATTRIBUTE_NAMESPACE",
69
+ "DECK_NAME",
70
+ "DECK_PATH",
71
+ "ENTRY_POINT_GROUP",
72
+ "FIXTURE_NAMES",
73
+ "ITEM_SCOPES",
74
+ "ITEM_TYPES",
75
+ "LIBRARY_NAME",
76
+ "PLUGIN_DIR",
77
+ "REPORT_PATH",
78
+ "SCHEMA_VERSION",
79
+ "SECTIONS_SCOPE",
80
+ "SLIDES_SCOPE",
81
+ "STAGES_DIR",
82
+ "Position",
83
+ "__version__",
84
+ "add_section",
85
+ "add_slide",
86
+ "build_fixtures",
87
+ "duplicate_section",
88
+ "duplicate_slide",
89
+ "finish",
90
+ "fixture_path",
91
+ "fixture_paths",
92
+ "is_registered",
93
+ "item_path",
94
+ "logical_path",
95
+ "move_item",
96
+ "new_report_stage",
97
+ "node_of",
98
+ "normalize_plugin_info",
99
+ "open_fixture",
100
+ "open_stage",
101
+ "plugin_dirs",
102
+ "register_plugin",
103
+ "remove_item",
104
+ "rename_item",
105
+ "render_schema",
106
+ "set_attributes",
107
+ "validate",
108
+ "validate_file",
109
+ "write_schema",
110
+ ]