Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements a different approach for __repr__ #78

Merged
merged 8 commits into from
Feb 27, 2024
114 changes: 76 additions & 38 deletions cmdx.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ class Node(object):
>>> transform = createNode("transform")
>>> transform["tx"] = 5
>>> transform["worldMatrix"][0] >> decompose["inputMatrix"]
>>> decompose["outputTranslate"]
>>> decompose["outputTranslate"].read()
chelloiaco marked this conversation as resolved.
Show resolved Hide resolved
(5.0, 0.0, 0.0)

"""
Expand Down Expand Up @@ -548,7 +548,8 @@ def __str__(self):
return self.name(namespace=True)

def __repr__(self):
return self.name(namespace=True)
cls_name = '{}.{}'.format(__name__, self.__class__.__name__)
return "<{} : '{}'>".format(cls_name, self.name(namespace=True))

def __add__(self, other):
"""Support legacy + '.attr' behavior
Expand Down Expand Up @@ -578,7 +579,7 @@ def __getitem__(self, key):
Example:
>>> node = createNode("transform")
>>> node["translate"] = (1, 1, 1)
>>> node["translate", Meters]
>>> node["translate", Meters].read()
(0.01, 0.01, 0.01)

"""
Expand Down Expand Up @@ -624,7 +625,7 @@ def __setitem__(self, key, value):
True
>>> node["rotateX", Degrees] = 1.0
>>> node["rotateX"] = Degrees(1)
>>> node["rotateX", Degrees]
>>> node["rotateX", Degrees].read()
1.0
>>> node["myDist"] = Distance()
>>> node["myDist"] = node["translateX"]
Expand Down Expand Up @@ -980,7 +981,7 @@ def update(self, attrs):
Examples:
>>> node = createNode("transform")
>>> node.update({"tx": 5.0, ("ry", Degrees): 30.0})
>>> node["tx"]
>>> node["tx"].read()
5.0

"""
Expand All @@ -998,14 +999,14 @@ def clear(self):
Example:
>>> node = createNode("transform")
>>> node["translateX"] = 5
>>> node["translateX"]
>>> node["translateX"].read()
5.0
>>> # Plug was reused
>>> node["translateX"]
>>> node["translateX"].read()
5.0
>>> # Value was reused
>>> node.clear()
>>> node["translateX"]
>>> node["translateX"].read()
5.0
>>> # Plug and value was recomputed

Expand Down Expand Up @@ -1513,7 +1514,8 @@ def __str__(self):
return self.path()

def __repr__(self):
return self.path()
cls_name = '{}.{}'.format(__name__, self.__class__.__name__)
return "<{} : '{}'>".format(cls_name, self.path())

def __or__(self, other):
"""Syntax sugar for finding a child
Expand All @@ -1522,13 +1524,21 @@ def __or__(self, other):
>>> _new()
>>> parent = createNode("transform", "parent")
>>> child = createNode("transform", "child", parent)
>>> parent | "child"
|parent|child
>>> result = (parent | "child").path()
>>> result in (
... '|parent|child',
... u'|parent|child'
... )
True

# Stackable too
>>> grand = createNode("transform", "grand", child)
>>> parent | "child" | "grand"
|parent|child|grand
>>> result = (parent | "child" | "grand").path()
>>> result in (
... '|parent|child|grand',
... u'|parent|child|grand'
... )
True

"""

Expand Down Expand Up @@ -2301,8 +2311,12 @@ def flatten(self, type=None):
>>> cc = cmds.sets([gc, b], name="child")
>>> parent = cmds.sets([cc, c], name="parent")
>>> mainset = encode(parent)
>>> sorted(mainset.flatten(), key=lambda n: n.name())
[|a, |b, |c]
>>> result = sorted([n.path() for n in mainset.flatten()])
>>> result in (
... ['|a', '|b', '|c'],
... [u'|a', u'|b', u'|c']
... )
True

"""

Expand Down Expand Up @@ -2560,9 +2574,9 @@ def __add__(self, other):
Example:
>>> node = createNode("transform")
>>> node["tx"] = 5
>>> node["translate"] + "X"
>>> (node["translate"] + "X").read()
5.0
>>> node["t"] + "x"
>>> (node["t"] + "x").read()
5.0
>>> try:
... node["t"] + node["r"]
Expand Down Expand Up @@ -2597,11 +2611,11 @@ def __iadd__(self, other):
>>> node["myArray"].extend([2.0, 3.0])
>>> node["myArray"] += 5.1
>>> node["myArray"] += [1.1, 2.3, 999.0]
>>> node["myArray"][0]
>>> node["myArray"][0].read()
1.0
>>> node["myArray"][6]
>>> node["myArray"][6].read()
999.0
>>> node["myArray"][-1]
>>> node["myArray"][-1].read()
999.0

"""
Expand All @@ -2627,7 +2641,13 @@ def __str__(self):
return str(self.read())

def __repr__(self):
return str(self.read())
cls_name = '{}.{}'.format(__name__, self.__class__.__name__)
read_val = self.read()
if isinstance(read_val, string_types):
# Add surrounding single quotes, indicating the value is a string
read_val = "'{}'".format(read_val)

return "<{} : {}>".format(cls_name, read_val)

def __rshift__(self, other):
"""Support connecting attributes via A >> B"""
Expand Down Expand Up @@ -2798,7 +2818,7 @@ def __setitem__(self, index, value):
Example:
>>> node = createNode("transform")
>>> node["translate"][0] = 5
>>> node["tx"]
>>> node["tx"].read()
5.0

"""
Expand Down Expand Up @@ -3173,9 +3193,9 @@ def extend(self, values):
>>> node = createNode("transform")
>>> node["myArray"] = Double(array=True)
>>> node["myArray"].extend([1.0, 2.0, 3.0])
>>> node["myArray"][0]
>>> node["myArray"][0].read()
1.0
>>> node["myArray"][-1]
>>> node["myArray"][-1].read()
3.0

"""
Expand Down Expand Up @@ -4101,7 +4121,7 @@ def connections(self,
True
>>> b["ihi"].connection() == a
True
>>> a["ihi"]
>>> a["ihi"].read()
2
>>> b["arrayAttr"] = Long(array=True)
>>> b["arrayAttr"][0] >> a["ihi"]
Expand Down Expand Up @@ -6350,16 +6370,25 @@ def connect(self, src, dst, force=True):
>>> with DagModifier() as mod:
... mod.connect(tm["sx"], tm["tx"])
...
>>> tm["tx"].connection()
|myTransform
>>> result = tm["tx"].connection().path()
>>> result in (
... '|myTransform',
... u'|myTransform'
... )
True

>>> cmds.undo()
>>> tm["tx"].connection() is None
True

# Connect without undo
>>> tm["tx"] << tx["output"]
>>> tm["tx"].connection()
myAnimCurve
>>> result = tm["tx"].connection().name()
>>> result in (
... 'myAnimCurve',
... u'myAnimCurve'
... )
True

# Disconnect without undo
>>> tm["tx"] // tx["output"]
Expand Down Expand Up @@ -6444,12 +6473,20 @@ def connectAttr(self, srcPlug, dstNode, dstAttr):
... otherAttr = mod.addAttr(otherNode, Message("otherAttr"))
... mod.connectAttr(newNode["newAttr"], otherNode, otherAttr)
...
>>> newNode["newAttr"].connection()
|otherNode
>>> result = newNode["newAttr"].connection().path()
>>> result in (
... '|otherNode',
... u'|otherNode'
... )
True

>>> cmds.undo()
>>> newNode["newAttr"].connection()
|newNode
>>> result = newNode["newAttr"].connection().path()
>>> result in (
... '|newNode',
... u'|newNode'
... )
True

"""

Expand Down Expand Up @@ -6768,19 +6805,19 @@ class DagModifier(_BaseModifier):
...
>>> getAttr(node1 + ".translateX")
1.0
>>> node2["translate"][0]
>>> node2["translate"][0].read()
1.0
>>> node2["translate"][1]
>>> node2["translate"][1].read()
2.0
>>> with DagModifier() as mod:
... node1 = mod.createNode("transform")
... node2 = mod.createNode("transform", parent=node1)
... node1["translate"] = (5, 6, 7)
... node1["translate"] >> node2["translate"]
...
>>> node2["translate"][0]
>>> node2["translate"][0].read()
5.0
>>> node2["translate"][1]
>>> node2["translate"][1].read()
6.0

Example, without context manager:
Expand Down Expand Up @@ -7721,7 +7758,8 @@ def __hash__(self):

def __repr__(self):
"""Avoid repr depicting the full contents of this dict"""
return self["name"]
cls_name = '{}.{}'.format(__name__, self.__class__.__name__)
return "<{} : '{}'>".format(cls_name, self["name"])

def __new__(cls, *args, **kwargs):
"""Support for using name of assignment
Expand Down
3 changes: 2 additions & 1 deletion tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,9 @@ def test_nodeoperators():

node = cmdx.createNode(cmdx.tTransform, name="myNode")
assert_equals(node, "|myNode")
assert_equals(repr(node), "<cmdx.DagNode : '|myNode'>")
assert_not_equals(node, "|NotEquals")
assert_equals(str(node), repr(node))
assert_not_equals(str(node), repr(node))


@with_setup(new_scene)
Expand Down
Loading