Example #1
0
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)
Example #2
0
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
Example #3
0
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")
Example #4
0
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
Example #5
0
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")
Example #6
0
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)
Example #7
0
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)
Example #8
0
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_)
Example #9
0
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"]))
Example #10
0
def test_save_new_project():

    # No project exists
    inventory.save(name=self._project["name"],
                   config=self._config,
                   inventory=self._inventory)
Example #11
0
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"]
        })