Support multiple regeneratable footage analyses
This commit is contained in:
parent
5bcf22e458
commit
15deaea19e
20 changed files with 333 additions and 168 deletions
|
|
@ -396,14 +396,25 @@ class DocumentTests(TestCase):
|
|||
],
|
||||
}
|
||||
|
||||
def save(self, leaves=None, blocks=None):
|
||||
def save(self, leaves=None, blocks=None, analyses=None):
|
||||
return self.put(f"/api/projects/{self.project.id}", {
|
||||
"name": "a project",
|
||||
"clips": [{"cid": "c1", "name": "take", "analysis": self.analysis,
|
||||
"clips": [{"cid": "c1", "name": "take",
|
||||
"analyses": [self.analysis] if analyses is None else analyses,
|
||||
"leaves": leaves if leaves is not None else self.leaves(),
|
||||
"blocks": blocks if blocks is not None else [self.block]}],
|
||||
})
|
||||
|
||||
def test_a_clip_declares_the_registered_analyses_its_blocks_name(self):
|
||||
undeclared = self.save(analyses=[])
|
||||
self.assertEqual(409, undeclared.status_code)
|
||||
self.assertIn("every block", undeclared.json()["error"])
|
||||
|
||||
unknown = "sha256:" + "f" * 64
|
||||
missing = self.save(analyses=[self.analysis, unknown])
|
||||
self.assertEqual(409, missing.status_code)
|
||||
self.assertEqual([unknown], missing.json()["missing"])
|
||||
|
||||
def test_every_saved_symbol_is_listed_across_projects(self):
|
||||
leaves = self.leaves()
|
||||
leaves["clip/c1/symbol/sym~face"] = ["^ ", "~:name", "face", "~:frames", 12]
|
||||
|
|
@ -435,12 +446,12 @@ class DocumentTests(TestCase):
|
|||
self.assertEqual(5, len(response.json()["written"]))
|
||||
|
||||
loaded = self.client.get(f"/api/projects/{self.project.id}").json()
|
||||
self.assertEqual(4, loaded["schema_version"])
|
||||
self.assertEqual(5, loaded["schema_version"])
|
||||
self.assertEqual(1, len(loaded["clips"]))
|
||||
clip = loaded["clips"][0]
|
||||
self.assertEqual("c1", clip["cid"])
|
||||
self.assertEqual([self.block], clip["blocks"])
|
||||
self.assertEqual(self.analysis, clip["analysis"])
|
||||
self.assertNotIn("analysis", clip)
|
||||
# The whole point: byte-identical values, including the integer frame keys
|
||||
# transit writes as "~i0". A JSON round trip that stringified them would
|
||||
# come back "0" and the part would hold its first pose forever.
|
||||
|
|
@ -542,7 +553,7 @@ class DocumentTests(TestCase):
|
|||
def patch(self, base, leaves, removed=()):
|
||||
return self.put(f"/api/projects/{self.project.id}", {
|
||||
"base": base,
|
||||
"clips": [{"cid": "c1", "analysis": self.analysis, "leaves": leaves,
|
||||
"clips": [{"cid": "c1", "analyses": [self.analysis], "leaves": leaves,
|
||||
"removed": list(removed), "blocks": [self.block]}],
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue