示例#1
0
class ValueOverrideTest(unittest.TestCase):
    def setUp(self):
        self.obj = StickyConfig()

    def test_dict_override1(self):
        base = {"a": 1, "b": 2, "c": 3}
        override = {"a": 2, "b": 4}
        actual = self.obj.values_override(base, override)
        self.assertEqual(actual, {"a": 2, "b": 4, "c": 3})

    def test_dict_override2(self):
        base = {"a": [1, 2, 3, 4], "b": 5}
        override = {"a": [3, 4]}
        actual = self.obj.values_override(base, override)
        self.assertEqual(actual, {"a": [3, 4], "b": 5})

    def test_dict_list_override1(self):
        base = [{"a": 1, "b": 2}]

        override = [{"a": 2}, {"b": 2222, "c": 44444}]

        actual = self.obj.values_override(base, override)
        self.assertEqual(actual, [{"a": 2}, {"b": 2222, "c": 44444}])

    def test_dict_list_override2(self):
        base = [{"a": 2}, {"b": 2222, "c": 44444}]

        override = [{"a": 1, "b": 2}]

        actual = self.obj.values_override(base, override)
        self.assertEqual(actual, [{"a": 1, "b": 2}])
示例#2
0
class GetKeyFileTest(unittest.TestCase):
    def setUp(self):
        self.directory = tempfile.mkdtemp().replace("\\", "/")
        for f in ["ep01_s01_c01_anim", "ep01_s01_c01", "ep01_s01", "ep01"]:
            open("%s/%s.yml" % (self.directory, f), "w")

        self.obj = StickyConfig(self.directory)

    def test_get_get_key_file_collect(self):
        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {"<episode>": "ep01", "<scene>": "s01"}

        self.obj.set_field_value(fields)
        actual = self.obj.get_key_file(template)
        self.assertEqual(os.path.basename(actual), "ep01_s01.yml")

        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {"<episode>": "ep01", "<scene>": "s01", "<progress>": "anim"}
        self.obj.set_field_value(fields)
        actual = self.obj.get_key_file(template)
        self.assertEqual(os.path.basename(actual), "ep01_s01.yml")

        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {
            "<episode>": "ep01",
            "<scene>": "s01",
            "<cut>": "c01",
            "<progress>": "anim"
        }
        self.obj.set_field_value(fields)
        actual = self.obj.get_key_file(template)
        self.assertEqual(os.path.basename(actual), "ep01_s01_c01_anim.yml")

    def tearDown(self):
        shutil.rmtree(self.directory)
示例#3
0
    def setUp(self):
        self.directory = tempfile.mkdtemp().replace("\\", "/")
        self.obj = StickyConfig(self.directory)

        info = {"name": "base"}
        data = {"base": "", "xxx": "12345"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01", "parent": "../base.yml"}
        data = {"test3": "b", "yyy": 12345}
        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01_s01", "parent": "../ep01.yml"}
        data = {"test2": "b"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01_s01_c01", "parent": "../ep01_s01.yml"}

        data = {"test": "a", "base": "new", "test3": "-----------------"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        data = {}
        info = {"name": "ep01_s01_c01_anim", "parent": "../ep01_s01_c01.yml"}
        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)
示例#4
0
class GetProjectFileTest(unittest.TestCase):
    def setUp(self):
        self.directory = tempfile.mkdtemp().replace("\\", "/")
        self.obj = StickyConfig(self.directory)

        info = {"name": "base"}
        data = {"base": "", "xxx": "12345"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01", "parent": "../base.yml"}
        data = {"test3": "b", "yyy": 12345}
        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01_s01", "parent": "../ep01.yml"}
        data = {"test2": "b"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        info = {"name": "ep01_s01_c01", "parent": "../ep01_s01.yml"}

        data = {"test": "a", "base": "new", "test3": "-----------------"}

        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

        data = {}
        info = {"name": "ep01_s01_c01_anim", "parent": "../ep01_s01_c01.yml"}
        self.obj.save("%s/%s.yml" % (self.directory, info["name"]),
                      info=info,
                      data=data)

    def test_get_override_file_list(self):
        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {
            "<episode>": "ep01",
            "<scene>": "s01",
            "<cut>": "c01",
            "<progress>": "anim"
        }
        self.obj.set_field_value(fields)
        f = self.obj.get_key_file(template)

        actual = self.obj.get_override_file_list(f)
        actual = [os.path.basename(l) for l in actual]

        self.assertEqual(actual, [
            "base.yml", "ep01.yml", "ep01_s01.yml", "ep01_s01_c01.yml",
            "ep01_s01_c01_anim.yml"
        ])

    def test_merge_override_file_list(self):
        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {
            "<episode>": "ep01",
            "<scene>": "s01",
            "<cut>": "c01",
            "<progress>": "anim"
        }
        self.obj.set_field_value(fields)
        f = self.obj.get_key_file(template)

        override_list = self.obj.get_override_file_list(f)
        base = override_list.pop(0)
        base_info, base_data = self.obj.read(base)

        actual = base_data
        for each in override_list:
            override_info, override_data = self.obj.read(each)
            actual = self.obj.values_override(actual,
                                              override_data,
                                              use_field_value=False)

        result = {
            "base": "new",
            "yyy": 12345,
            "xxx": "12345",
            "test3": "-----------------",
            "test2": "b",
            "test": "a"
        }

        self.assertEqual(actual, result)

    def test_trace_files(self):
        template = "<episode>_<scene>_<cut>_<progress>"
        fields = {
            "<episode>": "ep01",
            "<scene>": "s01",
            "<cut>": "c01",
            "<progress>": "anim"
        }
        self.obj.set_field_value(fields)
        f = self.obj.get_key_file(template)

        override_list = self.obj.get_override_file_list(f)
        # base = override_list.pop(0)
        # base_info, base_data = self.obj.read(base)

        # actual = base_data
        actual = {}
        for each in override_list:
            override_info, override_data = self.obj.read(each)
            actual = self.obj.values_override(actual,
                                              override_data,
                                              use_field_value=False)

        temp_name = os.path.basename(os.path.dirname(f))
        result = {
            "base":
            "new{}{}/ep01_s01_c01.yml".format(self.obj.splitter, temp_name),
            "yyy":
            "12345{}{}/ep01.yml".format(self.obj.splitter, temp_name),
            "xxx":
            "12345{}{}/base.yml".format(self.obj.splitter, temp_name),
            "test3":
            "-----------------{}{}/ep01_s01_c01.yml".format(
                self.obj.splitter, temp_name),
            "test2":
            "b{}{}/ep01_s01.yml".format(self.obj.splitter, temp_name),
            "test":
            "a{}{}/ep01_s01_c01.yml".format(self.obj.splitter, temp_name)
        }

        self.obj.trace_files(actual, override_list)
        self.assertEqual(actual, result)
示例#5
0
 def setUp(self):
     self.obj = StickyConfig()
     self.maxDiff = None
示例#6
0
class ValueMappingTest(unittest.TestCase):
    def setUp(self):
        self.obj = StickyConfig()
        self.maxDiff = None

    def test_value_mapping1(self):
        base = {"a": {"b": [1, 2, 3]}, "c": [1, 2, 3]}
        override = {"c": [2, 3, "<project>"]}
        field_value = {"<project>": "PROJ1"}
        self.obj.set_field_value(field_value)

        actual = self.obj.values_override(base, override, use_field_value=True)

        self.assertEqual(actual, {"a": {"b": [1, 2, 3]}, "c": [2, 3, "PROJ1"]})

    def test_value_mapping2(self):
        base = {
            "a": {
                "b": {
                    "f": [{
                        "name": "a1",
                        "value": 1
                    }, {
                        "name": "b1",
                        "value": 2
                    }, {
                        "name": "c1",
                        "value": 3
                    }, {
                        "name": "d1",
                        "value": 6
                    }]
                }
            }
        }

        override = {
            "a": {
                "b": {
                    "f": [{
                        "name": "a1",
                        "value": "<project>_<scene>"
                    }, {
                        "name": "d1",
                        "value": 4
                    }, {
                        "name": "b1",
                        "value": 3
                    }]
                }
            }
        }

        field_value = {"<project>": "PROJ1", "<scene>": "s01c05"}
        self.obj.set_field_value(field_value)
        actual = self.obj.values_override(base, override, use_field_value=True)

        self.assertEqual(
            actual, {
                "a": {
                    "b": {
                        "f": [{
                            "name": "a1",
                            "value": "PROJ1_s01c05"
                        }, {
                            "name": "b1",
                            "value": 3
                        }, {
                            "name": "c1",
                            "value": 3
                        }, {
                            "name": "d1",
                            "value": 4
                        }]
                    }
                }
            })

    def test_value_mapping3(self):
        base_proj = {
            "general": {
                "app":
                "maya2018.exe",
                "batch":
                "maya2018.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/aaaa",
                    "mode": "set"
                }, {
                    "name": "TEMP",
                    "path": "C:/trush/xxxx",
                    "mode": "append"
                }, {
                    "name": "USERNAME",
                    "value": "test_user"
                }]
            },
            "shot": {
                "general": {
                    "fps": 24,
                    "width": 640,
                    "height": 360,
                },
            },
            "asset": {
                "path": "<workspace>/<asset_id>/<lod>/<asset_id>.ma",
                "light": "<workspace>/light/<project>_master_light.ma",
                "camera": "<workspace>/camera/<project>_master_camera.ma"
            }
        }

        proj2 = {
            "general": {
                "app": "maya2015.exe",
                "batch": "maya2015.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/bbbb",
                    "mode": "set"
                }]
            },
            "shot": {
                "general": {
                    "fps": 30
                },
            },
            "asset": {
                "toolA": "@../../toolA",
                "toolB": "@C:/test/toolB"
            }
        }
        field_value = {
            "<project>": "PROJ1",
            "<workspace>": "C:/proj1/data/maya/scenes"
        }
        directory = "C:/test/config/directory/env"
        self.obj.set(directory, field_value)
        actual = self.obj.values_override(base_proj,
                                          proj2,
                                          use_field_value=True)
        check = {
            "general": {
                "app":
                "maya2015.exe",
                "batch":
                "maya2015.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/bbbb",
                    "mode": "set"
                }, {
                    "name": "TEMP",
                    "path": "C:/trush/xxxx",
                    "mode": "append"
                }, {
                    "name": "USERNAME",
                    "value": "test_user"
                }]
            },
            "shot": {
                "general": {
                    "fps": 30,
                    "width": 640,
                    "height": 360,
                },
            },
            "asset": {
                "path":
                "C:/proj1/data/maya/scenes/<asset_id>/<lod>/<asset_id>.ma",
                "light":
                "C:/proj1/data/maya/scenes/light/PROJ1_master_light.ma",
                "camera":
                "C:/proj1/data/maya/scenes/camera/PROJ1_master_camera.ma",
                "toolA": "C:/test/config/directory/env/toolA",
                "toolB": "C:/test/toolB"
            }
        }
        self.assertEqual(actual, check)
示例#7
0
 def setUp(self):
     self.obj = StickyConfig()
示例#8
0
class ValueOverrideHiearachyTest(unittest.TestCase):
    def setUp(self):
        self.obj = StickyConfig()

    def test_hiearachy_override1(self):
        base = {"a": {"b": [1, 2, 3]}, "c": [1, 2, 3]}
        override = {"c": [2, 3, 4]}

        actual = self.obj.values_override(base, override)

        self.assertEqual(actual, {"a": {"b": [1, 2, 3]}, "c": [2, 3, 4]})

    def test_hiearachy_override2(self):
        base = {"a": {"b": {"d": 10}}, "c": [1, 2, 3]}
        override = {"a": {"b": {"d": 1, "e": 2}}}

        actual = self.obj.values_override(base, override)

        self.assertEqual(actual, {
            "a": {
                "b": {
                    "d": 1,
                    "e": 2
                }
            },
            "c": [1, 2, 3]
        })

    def test_hiearachy_override3(self):
        base = {"a": {"b": {"f": [1, 2, 3, 4, 5]}}, "c": [1, 2, 3]}
        override = {"a": {"b": {"f": [0]}}}

        actual = self.obj.values_override(base, override)

        self.assertEqual(actual, {"a": {"b": {"f": [0]}}, "c": [1, 2, 3]})

    def test_hiearachy_override4(self):
        base = {
            "a": {
                "b": {
                    "f": [{
                        "name": "a1",
                        "value": 1
                    }, {
                        "name": "b1",
                        "value": 2
                    }, {
                        "name": "c1",
                        "value": 3
                    }, {
                        "name": "d1",
                        "value": 6
                    }]
                }
            }
        }

        override = {
            "a": {
                "b": {
                    "f": [{
                        "name": "a1",
                        "value": 5
                    }, {
                        "name": "d1",
                        "value": 4
                    }, {
                        "name": "b1",
                        "value": 3
                    }]
                }
            }
        }

        actual = self.obj.values_override(base, override)

        self.assertEqual(
            actual, {
                "a": {
                    "b": {
                        "f": [{
                            "name": "a1",
                            "value": 5
                        }, {
                            "name": "b1",
                            "value": 3
                        }, {
                            "name": "c1",
                            "value": 3
                        }, {
                            "name": "d1",
                            "value": 4
                        }]
                    }
                }
            })

    def test_hiearachy_override5(self):
        base_proj = {
            "general": {
                "app":
                "maya2018.exe",
                "batch":
                "maya2018.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/aaaa",
                    "mode": "set"
                }, {
                    "name": "TEMP",
                    "path": "C:/trush/xxxx",
                    "mode": "append"
                }, {
                    "name": "USERNAME",
                    "value": "test_user"
                }]
            },
            "shot": {
                "general": {
                    "fps": 24,
                    "width": 640,
                    "height": 360,
                },
            },
            "asset": {
                "path": "/<asset_id>/<lod>/<asset_id>.ma",
                "light": "/light/<project>_master_light.ma",
                "camera": "/camera/<project>_master_camera.ma"
            }
        }

        proj2 = {
            "general": {
                "app": "maya2015.exe",
                "batch": "maya2015.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/bbbb",
                    "mode": "set"
                }]
            },
            "shot": {
                "general": {
                    "fps": 30
                },
            },
        }

        actual = self.obj.values_override(base_proj, proj2)
        check = {
            "general": {
                "app":
                "maya2015.exe",
                "batch":
                "maya2015.mayapy",
                "env": [{
                    "name": "MODULE1",
                    "path": "C:/bbbb",
                    "mode": "set"
                }, {
                    "name": "TEMP",
                    "path": "C:/trush/xxxx",
                    "mode": "append"
                }, {
                    "name": "USERNAME",
                    "value": "test_user"
                }]
            },
            "shot": {
                "general": {
                    "fps": 30,
                    "width": 640,
                    "height": 360,
                },
            },
            "asset": {
                "path": "/<asset_id>/<lod>/<asset_id>.ma",
                "light": "/light/<project>_master_light.ma",
                "camera": "/camera/<project>_master_camera.ma"
            }
        }
        self.assertEqual(actual, check)
示例#9
0
class ValueOverrideKeywordDictTest(unittest.TestCase):
    def setUp(self):
        self.obj = StickyConfig()

    def test_keyword_dict_list_override1(self):
        base = [{"name": "a", "value": 1}, {"name": "b", "value": 2}]

        override = [{"name": "a", "value": 10}]

        actual = self.obj.values_override(base, override)

        self.assertEqual(actual, [{
            "name": "a",
            "value": 10
        }, {
            "name": "b",
            "value": 2
        }])

    def test_keyword_dict_list_override2(self):
        base = [{"name": "a", "value": 1}, {"name": "b", "value": 2}]

        override = [{"name": "a", "value": 10}, {"name": "c", "value": 5}]

        actual = self.obj.values_override(base, override)

        self.assertEqual(actual, [{
            "name": "a",
            "value": 10
        }, {
            "name": "b",
            "value": 2
        }, {
            "name": "c",
            "value": 5
        }])

    def test_keyword_dict_list_override3(self):
        base = [{"name": "b", "value": 2}, {"name": "a", "value": 1}]

        override = [{"name": "a", "value": 10}, {"name": "c", "value": 5}]

        actual = self.obj.values_override(base, override)

        self.assertNotEqual(actual, [{
            "name": "a",
            "value": 10
        }, {
            "name": "b",
            "value": 2
        }, {
            "name": "c",
            "value": 5
        }])

        self.assertNotEqual(actual, [{
            "name": "c",
            "value": 5
        }, {
            "name": "a",
            "value": 10
        }, {
            "name": "b",
            "value": 2
        }])

        self.assertEqual(actual, [{
            "name": "b",
            "value": 2
        }, {
            "name": "a",
            "value": 10
        }, {
            "name": "c",
            "value": 5
        }])
示例#10
0
    def setUp(self):
        self.directory = tempfile.mkdtemp().replace("\\", "/")
        for f in ["ep01_s01_c01_anim", "ep01_s01_c01", "ep01_s01", "ep01"]:
            open("%s/%s.yml" % (self.directory, f), "w")

        self.obj = StickyConfig(self.directory)