Autodesk / Autodesk/maya-usd

String-ified ufe.Path cannot be used to recreate the path using ufe.PathString in Python

Open
#919 2 comments 0 reactions 1 assignee Claimed by @santosg87 View on GitHub
bug reproduced ufe
Dominant language
Wolfram Language
Stars
905
Forks
223
Avg merge
2d 9h
Merged PRs (30d)
17

Description

**Describe the bug**
When an instance of `ufe.Path` in Python is string-ified using `str()`, the resulting string is missing the comma separator between the Maya segment and the USD segment. This string then cannot be used to recreate an instance of `ufe.Path` using `ufe.PathString.path()` that would then return the same scene item using `ufe.Hierarchy.createItem()`.

This may be an issue in UFE as opposed to maya-usd.

**Steps to reproduce**
This should be reproducible with any USD exposed by a `mayaUsdProxyShape`, but for the purposes of this test, I used the USD here:
https://github.com/Autodesk/maya-usd/blob/dev/test/lib/usd/translators/UsdImportExportScopeTest/Scopes.usda

Steps to reproduce the behavior:
1. Load the `mayaUsdPlugin`
2. Create -> USD -> Stage from file..., and pick a layer to create the proxy
3. In the outliner, select a USD prim underneath the proxy
4. Then in the script editor:
```Python
import ufe

# Get the SceneItem and its Path from the selection
sceneItem = list(ufe.GlobalSelection.get())[0]
ufePath = sceneItem.path()

ufePathString = str(ufePath)
print("ufePathString: %s" % ufePathString)

# In my case, this printed something like:
# ufePathString: |world|Scopes|ScopesShape/A/A_1
#
# Notice the comma missing between the Maya segment "|world|Scopes|ScopesShape" and the USD segment "/A/A_1"

# Try to use ufePathString to re-fetch the SceneItem
newUfePath = ufe.PathString.path(ufePathString)
newSceneItem = ufe.Hierarchy.createItem(newUfePath)
print(newSceneItem is None)

# That should print True, so we failed to get the SceneItem with the reconstructed path.

# If we correct the path string to insert the comma, we're able to get the SceneItem:
ufePathString = '|world|Scopes|ScopesShape,/A/A_1'
newUfePath = ufe.PathString.path(ufePathString)
newSceneItem = ufe.Hierarchy.createItem(newUfePath)
print(newSceneItem is None)

# That should then print False
```

**Expected behavior**
String-ifiying a `ufe.Path` should return a string that can then be used to recreate the exact same `ufe.Path`.

**Specs (if applicable):**
- OS & version: Linux RHEL 7.8
- Compiler & version: gcc 6.3.1
- Maya version: PR 120
- Maya USD commit SHA: https://github.com/Autodesk/maya-usd/commit/a83cfc1350a485f30cc378f1e1568ed7cba6a463
- Pixar USD commit SHA: https://github.com/PixarAnimationStudios/USD/commit/f7b5f25e0d7bd951439485841304aa430683ab23

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.