Exemplo n.º 1
0
 def test_ComputeAllDependenciesInvalidClipTemplate(self):
     """Test that an invalid clip template asset path does not
     cause an exception in UsdUtils.ComputeAllDependencies."""
     stage = Usd.Stage.CreateNew('testInvalidClipTemplate.usda')
     prim = stage.DefinePrim('/clip')
     Usd.ClipsAPI(prim).SetClipTemplateAssetPath('bogus')
     stage.Save()
     UsdUtils.ComputeAllDependencies(stage.GetRootLayer().identifier)
Exemplo n.º 2
0
    def CheckCompliance(self, inputFile):
        from pxr import Sdf, Usd, UsdUtils
        if not Usd.Stage.IsSupportedFile(inputFile):
            _AddError("Cannot open file '%s' on a USD stage." % args.inputFile)
            return

        # Collect all warnings using a diagnostic delegate.
        delegate = UsdUtils.CoalescingDiagnosticDelegate()
        usdStage = Usd.Stage.Open(inputFile)
        stageOpenDiagnostics = delegate.TakeUncoalescedDiagnostics()

        for rule in self._rules:
            rule.CheckStage(usdStage)
            rule.CheckDiagnostics(stageOpenDiagnostics)

        with Ar.ResolverContextBinder(usdStage.GetPathResolverContext()):
            # This recursively computes all of inputFiles's external
            # dependencies.
            (allLayers, allAssets, unresolvedPaths) = \
                    UsdUtils.ComputeAllDependencies(Sdf.AssetPath(inputFile))
            for rule in self._rules:
                rule.CheckUnresolvedPaths(unresolvedPaths)
                rule.CheckDependencies(usdStage, allLayers, allAssets)

            if self._rootPackageOnly:
                rootLayer = usdStage.GetRootLayer()
                if rootLayer.GetFileFormat().IsPackage():
                    packagePath = Ar.SplitPackageRelativePathInner(
                        rootLayer.identifier)[0]
                    self._CheckPackage(packagePath)
                else:
                    self._AddError(
                        "Root layer of the USD stage (%s) doesn't belong to "
                        "a package, but 'rootPackageOnly' is True!" %
                        Usd.Describe(usdStage))
            else:
                # Process every package just once by storing them all in a set.
                packages = set()
                for layer in allLayers:
                    if _IsPackageOrPackagedLayer(layer):
                        packagePath = Ar.SplitPackageRelativePathInner(
                            layer.identifier)[0]
                        packages.add(packagePath)
                    self._CheckLayer(layer)
                for package in packages:
                    self._CheckPackage(package)

                # Traverse the entire stage and check every prim.
                from pxr import Usd
                # Author all variant switches in the session layer.
                usdStage.SetEditTarget(usdStage.GetSessionLayer())
                allPrimsIt = iter(
                    Usd.PrimRange.Stage(usdStage,
                                        Usd.TraverseInstanceProxies()))
                self._TraverseRange(allPrimsIt, isStageRoot=True)
Exemplo n.º 3
0
        def _testLayer(rootLayer):
            layers, assets, unresolved = \
                UsdUtils.ComputeAllDependencies(rootLayer)

            self.assertEqual(
               set(layers),
               set([Sdf.Layer.Find(rootLayer)] + 
                   [Sdf.Layer.Find("computeAllDependencies/" + l)
                    for l in ["base_a.usd",
                              "sub_a.usd",
                              "meta_a.usd",
                              "meta_b.usd",
                              "payload_a.usd",
                              "attr_b.usd",
                              "ref_a.usd",
                              "v_meta_a.usd",
                              "v_meta_b.usd",
                              "v_ref_a.usd",
                              "v_attr_b.usd",
                              "clip.1.usd",
                              "clip.010.usd"]]))

            # Canonicalize all paths being compared with os.path.normcase
            # to avoid issues on Windows.
            
            self.assertEqual(
                set([os.path.normcase(f) for f in assets]),
                set([os.path.normcase(
                        os.path.abspath("computeAllDependencies/" + f))
                     for f in ["attr_a.txt", "v_attr_a.txt"]]))

            self.assertEqual(
                set([os.path.normcase(f) for f in unresolved]),
                set([os.path.normcase(
                        os.path.abspath("computeAllDependencies/" + f) )
                     for f in ["base_nonexist.usd",
                               "sub_nonexist.usd",
                               "meta_a_nonexist.usd",
                               "meta_nonexist.usd",
                               "payload_nonexist.usd",
                               "attr_a_nonexist.txt",
                               "attr_nonexist.usd",
                               "ref_nonexist.usd",
                               "v_meta_a_nonexist.usd",
                               "v_meta_nonexist.usd",
                               "v_attr_a_nonexist.txt",
                               "v_attr_nonexist.usd"]]))
Exemplo n.º 4
0
    def __init__(self,
                 inputFile,
                 arkit=False,
                 skipARKitRootLayerCheck=False,
                 rootPackageOnly=False,
                 skipVariants=False,
                 verbose=False):
        self._arkit = arkit
        self._skipARKitRootLayerCheck = skipARKitRootLayerCheck

        self._rootPackageOnly = rootPackageOnly
        self._doVariants = not skipVariants
        self._verbose = verbose

        self._failedChecks = []
        self._errors = []
        self._violatedRules = set()
        self._checkedPackages = set()

        from pxr import Ar, Sdf, Usd, UsdUtils
        if not Usd.Stage.IsSupportedFile(inputFile):
            _AddError("Cannot open file '%s' on a USD stage." % args.inputFile)
            return

        # Collect all warnings using a diagnostic delegate.
        delegate = UsdUtils.CoalescingDiagnosticDelegate()
        usdStage = Usd.Stage.Open(inputFile)
        allDiagnostics = delegate.TakeUncoalescedDiagnostics()
        if self._arkit:
            for diag in allDiagnostics:
                # "_ReportErrors" is the name of the function that issues
                # warnings about unresolved references, sublayers and other
                # composition arcs.
                if '_ReportErrors' in diag.sourceFunction and \
                    'usd/stage.cpp' in diag.sourceFileName:
                    self._AddFailedCheck(diag.commentary, ruleNum=4)

        with Ar.ResolverContextBinder(usdStage.GetPathResolverContext()):
            # This recursively computes all of inputFiles's external
            # dependencies.
            (allLayerDeps, allAssetDeps, unresolvedPaths) = \
                    UsdUtils.ComputeAllDependencies(Sdf.AssetPath(inputFile))
            self._CheckDependencies(usdStage, allLayerDeps, allAssetDeps,
                                    unresolvedPaths)
            self._CheckStage(usdStage, allLayerDeps)