[Twisted-Python] attribute error when I am trying to make one factory to send data to another

Pantelis Theodosiou ypercube at gmail.com
Tue Apr 28 11:46:31 MDT 2015


No, I don't think that would work.

You would need something like changing these lines:

        reactor.listenTCP(8000, EchoFactory(self))  # for sender
        reactor.listenTCP(8001, MultiEchoFactory(self))  # for receiver

to:

        self.echofactory = EchoFactory(self)
        self.multiechofactory = MultiEchoFactory(self)
        reactor.listenTCP(8000, self.echofactory)  # for sender
        reactor.listenTCP(8001, self.multiechofactory)  # for receiver

so, your "app" object (which is just a normal Python object) knows the
other two objects (the instances of the 2 factories).

Then, your calls:

        if sendermessage:
            self.transport.write(data)
            #this line here is the trouble maker that caused the error
            MultiEcho().dataReceived(sendermessage)

could be written:

        if sendermessage:
            self.transport.write(data)

            self.app.multiechofactory.dataReceived(sendermessage)

On Tue, Apr 28, 2015 at 6:28 PM, Jessica Tsui <jesadjust at gmail.com> wrote:

> Hi Daniel,
>
>   Thank you so much for your suggestion. I am quite new to python and
> twisted so I am not very certain about how to make it work well. Does that
> mean if I change the dataReceived by adding a line to instantiate the
> MultiEchoFactory like this, it will work?
>
> def dataReceived(self, data):
>     "As soon as any data is received, write it back."
>     handlesendermessage = self.factory.app.handle_message(data)
>
>     if handlesendermessage:
>         self.transport.write(data)
>         MultiEchoFactory()
>         MultiEcho().dataReceived(data)
>
>
> 2015-04-29 0:33 GMT+08:00 Louis D. Burr <ldanielburr at me.com>:
>
>> Hi Jessica,
>>
>> On Apr 28, 2015, at 10:14 AM, Jessica Tsui <jesadjust at gmail.com> wrote:
>>
>> SNIP
>>
>>  exceptions.AttributeError: MultiEcho instance has no attribute ‘factory'
>>
>> SNIP
>>
>> MultiEcho().dataReceived(sendermessage)
>>
>> Here you create an instance of the protocol directly, i.e., without
>> having instantiated a MutilEchoFactory.  The factory’s buildProtocol method
>> is what assigns the factory instance as a member of the protocol
>> (self.factory), and since you didn’t create the protocol via a factory, you
>> have no factory attribute on your protocol instance.
>>
>> There are a number of ways to fix this, but generally speaking, you need
>> to provide a way for your factories and their protocols to be aware of each
>> other.
>>
>> Hope this helps,
>>
>> Daniel
>> --
>> L. Daniel Burr
>> ldanielburr at me.com
>> (312) 656-8387
>>
>>
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20150428/bf3e5103/attachment-0002.html>


More information about the Twisted-Python mailing list