def setup(): self._tempdir = tempfile.mkdtemp() api.register_root(self._tempdir) # Setup environment os.environ["AVALON_CONFIG"] = "polly" os.environ["AVALON_PROJECT"] = PROJECT_NAME os.environ["AVALON_ASSET"] = ASSET_NAME os.environ["AVALON_TASK"] = TASK_NAME os.environ["AVALON_ASSETPATH"] = ("{root}/{project}/{silo}/{asset}".format( root=api.registered_root(), project=PROJECT_NAME, asset=ASSET_NAME, silo="assets")) os.environ["AVALON_SILO"] = "assets" api.install(maya) io.activate_project(PROJECT_NAME) schema.validate(self._config) schema.validate(self._inventory) inventory.save(name=PROJECT_NAME, config=self._config, inventory=self._inventory)
def test_list_projects(): """Listing projects in database""" inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory) return_code = subprocess.call( [sys.executable, "-u", "-m", "avalon.inventory", "--ls"], cwd=tempfile.mkdtemp(dir=self._tempdir)) assert 0 == return_code
def test_save_project_data(): """The inventory can take (plain) project data as well""" inventory_ = copy.deepcopy(self._inventory) inventory_["key"] = "value" inventory_["key2"] = "value2" inventory.save(name=self._project["name"], config=self._config, inventory=inventory_) project = io.find_one({"type": "project", "name": PROJECT_NAME}) assert_equals(project["data"]["key"], "value") assert_equals(project["data"]["key2"], "value2")
def test_cli_load_by_name(): """Load project by name""" inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory) return_code = subprocess.call([ sys.executable, "-u", "-m", "avalon.inventory", "--load", self._project["name"] ], cwd=tempfile.mkdtemp(dir=self._tempdir)) assert 0 == return_code
def test_save_asset_data(): """The inventory can take asset data as well""" inventory_ = copy.deepcopy(self._inventory) asset = inventory_["assets"][0] asset.update({"key": "value"}) inventory.save(name=self._project["name"], config=self._config, inventory=inventory_) asset = io.find_one({"type": "asset", "name": asset["name"]}) print(asset) assert_equals(asset["data"]["key"], "value")
def test_load(): """Loading produces compatible results for saving""" inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory) _config, _inventory = inventory.load(PROJECT_NAME) schema.validate(_config) schema.validate(_inventory) inventory.save(name=self._project["name"], config=_config, inventory=_inventory) _config, _inventory = inventory.load(PROJECT_NAME) schema.validate(_config) schema.validate(_inventory)
def test_save_toml(): text = """\ schema = "avalon-core:config-1.0" [[apps]] name = "maya2016" label = "Autodesk Maya 2016" [[apps]] name = "nuke10" label = "The Foundry Nuke 10.0" [[tasks]] name = "model" [[tasks]] name = "render" [[tasks]] name = "animation" [[tasks]] name = "rig" [[tasks]] name = "lookdev" [[tasks]] name = "layout" [template] work = "{root}/{project}/f02_prod/{silo}" publish = "{root}/{project}/f02_prod/{silo}" [copy]""" config_ = toml.loads(text) schema.validate(config_) inventory.save(name=self._project["name"], config=config_, inventory=self._inventory)
def test_asset_name(): """Assets with spaces and other special characters are invalid""" invalid = {} inventory_ = copy.deepcopy(self._inventory) inventory_["assets"].append(invalid) for name in ("mixedCaseOk", "lowercaseok", "underscore_ok"): invalid["name"] = name inventory.save(name=self._project["name"], config=self._config, inventory=inventory_) for name in ("spaces not ok", "special~characters$not^ok", "dash-not-ok"): invalid["name"] = name assert_raises(schema.ValidationError, inventory.save, name=self._project["name"], config=self._config, inventory=inventory_)
def test_save_idempotent(): """Saving many times doesn't duplicate assets""" inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory) assert_equals( io.find({ "type": "asset" }).count(), len(self._inventory["assets"]) + len(self._inventory["film"])) inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory) assert_equals( io.find({ "type": "asset" }).count(), len(self._inventory["assets"]) + len(self._inventory["film"]))
def test_save_new_project(): # No project exists inventory.save(name=self._project["name"], config=self._config, inventory=self._inventory)
def test_save(): """Saving works well under normal circumstances""" config_ = { "schema": "avalon-core:config-1.0", "apps": [ { "name": "app1" }, { "name": "app2" }, ], "tasks": [ { "name": "task1" }, { "name": "task2" }, ], "template": { "work": "{root}/{project}/{silo}/{asset}/work/" "{task}/{user}/{app}", "publish": "{root}/{project}/{silo}/{asset}/publish/" "{subset}/v{version:0>3}/{subset}.{representation}" }, "copy": {} } inventory_ = { "schema": "avalon-core:inventory-1.0", "assets": [{ "name": "asset1" }, { "name": "asset2" }], "film": [ { "name": "shot1" }, { "name": "shot2" }, ] } schema.validate(config_) schema.validate(inventory_) _id = io.insert_one(self._project).inserted_id project = io.find_one({"_id": _id}) assert_equals(project["config"], self._project["config"]) inventory.save(name=self._project["name"], config=config_, inventory=inventory_) project = io.find_one({"_id": _id}) config_.pop("schema") assert_equals(project["config"], config_) for asset in inventory_["assets"]: assert io.find_one({ "type": "asset", "parent": project["_id"], "name": asset["name"] })
def test_save(): """Saving works well under normal circumstances""" config_ = { "schema": "avalon-core:config-1.0", "apps": [ { "name": "app1" }, { "name": "app2" }, ], "tasks": { { "Animation": { "short_name": "anim" } }, { "Modeling": { "short_name": "mdl" } }, }, "template": { "work": "{root}/{project}/{silo}/{asset}/work/" "{task}/{user}/{app}", "publish": "{root}/{project}/{silo}/{asset}/publish/" "{subset}/v{version:0>3}/{subset}.{representation}" }, "families": [{ "name": "avalon.model", "label": "Model", "icon": "cube" }], "groups": [ { "name": "charCaches", "icon": "diamond", "color": "#C4CEDC", "order": -99 }, ], "copy": {} } inventory_ = { "schema": "avalon-core:inventory-1.0", "assets": [{ "name": "asset1" }, { "name": "asset2" }], "film": [ { "name": "shot1" }, { "name": "shot2" }, ] } schema.validate(config_) schema.validate(inventory_) _id = io.insert_one(self._project).inserted_id project = io.find_one({"_id": _id}) assert_equals(project["config"], self._project["config"]) inventory.save(name=self._project["name"], config=config_, inventory=inventory_) project = io.find_one({"_id": _id}) config_.pop("schema") assert_equals(project["config"], config_) for asset in inventory_["assets"]: assert io.find_one({ "type": "asset", "parent": project["_id"], "name": asset["name"] })