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)
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)
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"]]))
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)