Skip to content

MemberAccessValue

Bases: MemberAccess

Represents a member access value.

Member access value is a member access read from, e.g. a.b in print(a.b).

Source code in src/library_analyzer/processing/api/purity_analysis/model/_module_data.py
@dataclass
class MemberAccessValue(MemberAccess):
    """Represents a member access value.

    Member access value is a member access read from, e.g. `a.b` in `print(a.b)`.
    """

    node: astroid.Attribute

    def __hash__(self) -> int:
        return hash(str(self))

    @classmethod
    def construct_member_access_value(cls, node: astroid.Attribute) -> MemberAccessValue:
        """Construct a MemberAccessValue node.

        Construct a MemberAccessValue node from an Attribute node.
        The receiver is the node that is accessed, and the member is the node that accesses the receiver.
        The receiver can be nested.

        Parameters
        ----------
        node :
            The node to construct the MemberAccessValue node from.

        Returns
        -------
        MemberAccessValue
            The constructed MemberAccessValue node.
        """
        receiver = node.expr
        member = node.attrname

        try:
            if isinstance(receiver, astroid.Name):
                return MemberAccessValue(node=node, receiver=receiver, member=member)
            elif isinstance(receiver, astroid.Call):
                return MemberAccessValue(node=node, receiver=receiver.func, member=member)
            elif isinstance(receiver, astroid.Attribute):
                return MemberAccessValue(node=node, receiver=cls.construct_member_access_value(receiver), member=member)
            else:
                return MemberAccessValue(node=node, receiver=None, member=member)
        # Since it is tedious to add testcases for this function, ignore the coverage for now
        except TypeError as err:  # pragma: no cover
            raise TypeError(f"Unexpected node type {type(node)}") from err  # pragma: no cover

node: astroid.Attribute instance-attribute

__hash__()

Source code in src/library_analyzer/processing/api/purity_analysis/model/_module_data.py
def __hash__(self) -> int:
    return hash(str(self))

__init__(node, receiver, member, parent=None)

construct_member_access_value(node) classmethod

Construct a MemberAccessValue node.

Construct a MemberAccessValue node from an Attribute node. The receiver is the node that is accessed, and the member is the node that accesses the receiver. The receiver can be nested.

Parameters:

Name Type Description Default
node Attribute

The node to construct the MemberAccessValue node from.

required

Returns:

Type Description
MemberAccessValue

The constructed MemberAccessValue node.

Source code in src/library_analyzer/processing/api/purity_analysis/model/_module_data.py
@classmethod
def construct_member_access_value(cls, node: astroid.Attribute) -> MemberAccessValue:
    """Construct a MemberAccessValue node.

    Construct a MemberAccessValue node from an Attribute node.
    The receiver is the node that is accessed, and the member is the node that accesses the receiver.
    The receiver can be nested.

    Parameters
    ----------
    node :
        The node to construct the MemberAccessValue node from.

    Returns
    -------
    MemberAccessValue
        The constructed MemberAccessValue node.
    """
    receiver = node.expr
    member = node.attrname

    try:
        if isinstance(receiver, astroid.Name):
            return MemberAccessValue(node=node, receiver=receiver, member=member)
        elif isinstance(receiver, astroid.Call):
            return MemberAccessValue(node=node, receiver=receiver.func, member=member)
        elif isinstance(receiver, astroid.Attribute):
            return MemberAccessValue(node=node, receiver=cls.construct_member_access_value(receiver), member=member)
        else:
            return MemberAccessValue(node=node, receiver=None, member=member)
    # Since it is tedious to add testcases for this function, ignore the coverage for now
    except TypeError as err:  # pragma: no cover
        raise TypeError(f"Unexpected node type {type(node)}") from err  # pragma: no cover