-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathnamespaceHelpers.py
92 lines (63 loc) · 2.46 KB
/
namespaceHelpers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from maya.cmds import *
def getNamespaceTokensFromReference( node ):
'''
returns a list of namespaces added to the given node via referencing
'''
if not referenceQuery( node, inr=True ):
return []
theReferenceFilepath = referenceQuery( node, filename=True )
theReferenceNode = file( theReferenceFilepath, q=True, referenceNode=True )
theReferenceNamespace = file( theReferenceFilepath, q=True, namespace=True )
#now get the parent namespaces for the reference - these are the namespaces found on the reference node
namespaces = theReferenceNode.split( ':' )
#pop the last token - its the name of the reference node
namespaces.pop()
namespaces.append( theReferenceNamespace )
return namespaces
def stripReferenceNamespaceFromNode( node ):
'''
strips off any namespaces from the given node that were added due to referencing
'''
referenceNamespaceToks = getNamespaceTokensFromReference( node )
return stripNamespaceFromNode( node, referenceNamespaceToks )
def stripNamespaceFromNode( node, namespace ):
'''
Strips off the given namespace from the given node if possible
If not possible, the original node name is returned
'''
if namespace.endswith( ':' ):
namespace = namespace[ :-1 ]
return stripNamespaceTokensFromNode( namespace.split( ':' ) )
def stripNamespaceTokensFromNode( node, namespaceToks ):
'''
Strips off the given namespace tokens from the given node if possible
If not possible, the original node name is returned
'''
numNamespaceToks = len( namespaceToks )
if not namespaceToks:
return node
#if the node name is a name path, we'll need to remove the referenced namespace tokens from each name path...
pathToks = node.split( '|' )
newPathToks = []
for pathTok in pathToks:
pathNamespaceToks = pathTok.split( ':' )
if pathNamespaceToks[ :numNamespaceToks ] == namespaceToks:
newPathToks.append( ':'.join( pathNamespaceToks[ numNamespaceToks: ] ) )
else:
newPathToks.append( pathTok )
return '|'.join( newPathToks )
def addNamespaceTokNamePath( name, namespace ):
'''
adds the given namespace to a name path.
example:
addNamespaceTokNamePath( 'some|name|path', 'ns' )
returns:
'ns:some|ns:name|ns:path'
'''
if namespace.endswith( ':' ):
namespace = namespace[ :-1 ]
namespacedToks = []
for pathTok in name.split( name, '|' ):
namespacedToks.append( '%s:%s' % (namespace, name) )
return '|'.join( namespacedToks )
#end