def _cbLogin(self, (interface, avatar, logout)):
        if not IJellyable.providedBy(avatar):
            avatar = AsReferenceable(avatar, "perspective")

        puid = avatar.processUniqueID()

        # only call logout once, whether the connection is dropped (disconnect)
        # or a logout occurs (cleanup), and be careful to drop the reference to
        # it in either case
        logout = [ logout ]
        def maybeLogout():
            if not logout:
                return
            fn = logout[0]
            del logout[0]
            fn()
        self.broker._localCleanup[puid] = maybeLogout
        self.broker.notifyOnDisconnect(maybeLogout)

        return avatar
Show that attributes exist in class.
dataset/ETHPy150Open nlloyd/SubliminalCollaborator/libs/twisted/spread/pb.py/_JellyableAvatarMixin._cbLogin--crossover with--dataset/ETHPy150Open sigmavirus24/github3.py/tests/unit/test_licenses.py/TestLicenses.test_get_attr