Source code for fbrelation.declarations.box.base
'''
Defines base classes for box declarations.
'''
from fbrelation.declarations.node import BoxNodeDeclaration
[docs]class BoxDeclaration(object):
'''
An abstract base class that defines the declaration of a box within a
relation constraint. All types of boxes can have nodes which are referenced
by connections.
'''
[docs] def __init__(self, name):
'''
Initializes a new box declaration with the given name.
'''
self.name = name
[docs] def execute(self, constraint, relationComponents):
'''
Overridden by subclasses in order to create and configure a new box of
the appropriate type within the given FBConstraintRelation.
:param relationComponents: Maps the names of the relation declarations
executed so far to the corresponding
FBConstraintRelation objects. Used to
resolve macro references.
:returns: The newly created FBBox object.
:raises: an :class:`.ExecutionError` if the box can not be created.
'''
raise NotImplementedError
[docs] def createNodeDeclaration(self, nodeName, isSrc):
'''
Creates and returns a new :class:`.NodeDeclaration` object for a node
of the given name within this box.
:param isSrc: Represents whether the connection uses this box as a
source (with an output node) or a destination (with an
input node).
:note: The default implementation uses the base
:class:`.BoxNodeDeclaration` class, but subclasses may override
this method to create more specialized node declarations.
'''
return BoxNodeDeclaration(self, nodeName, isSrc)
[docs] def supportsNode(self, nodeName):
'''
Returns whether this box could possibly support a connection to a node
of the given name.
:note: A return value of True is not confirmation that the box
absolutely will have a node of the given name in MotionBuilder,
but it allows us to perform some rudimentary static checking at
compile-time.
:note: The default implementation simply requires that a non-blank node
name be given in the node declaration.
'''
return bool(nodeName)
[docs] def prepareNode(self, nodeName):
'''
Signals to the box declaration that a connection is about to be made
using one of the box's nodes. Gives the box an opportunity to ensure
that the node exists.
:note: The default implementation does nothing, but subclasses can
override this method as necessary.
'''
pass