I am working on this messaging app and I would like to pass data from one factory to another. I have been referencing to other answers provided in other similar questions by trying to add a variable storing the data from one factory then initiate another factory and write the data to it. Unfortunately there is an error when i call the other class, and I cannot figure out why. Is there anything I can do to fix it? I have been stuck in here for quite a while
this is the error: receivermessage = self.factory.app.handle_message2(data) exceptions.AttributeError: MultiEcho instance has no attribute 'factory' Here is the code: import kivyfrom kivy.app import Appfrom kivy.uix.label import Labelfrom kivy.uix.scatter import Scatterfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.scrollview import ScrollViewfrom kivy.uix.button import Buttonfrom kivy.graphics.vertex_instructions import Rectanglefrom kivy.graphics.context_instructions import Colorfrom kivy.graphics.instructions import Instructionfrom kivy.base import runTouchAppfrom kivy.lang import Builderimport socketfrom kivy.core.window import Windowimport pygameimport randomfrom kivy.support import install_twisted_reactor install_twisted_reactor()from twisted.internet import reactor, protocol Window.size = (550, 400) # monitoring wordlistwith open("wordlist.txt") as word_file: wordlist = list(word.strip().lower() for word in word_file) # protocols for senderclass EchoProtocol(protocol.Protocol): """This is just about the simplest possible protocol""" def dataReceived(self, data): "As soon as any data is received, write it back." sendermessage = self.factory.app.handle_message(data) if sendermessage: self.transport.write(data) #this line here is the trouble maker that caused the error MultiEcho().dataReceived(sendermessage) class EchoFactory(protocol.Factory): protocol = EchoProtocol def __init__(self, app): self.app = app # protocols for receiver class MultiEcho(protocol.Protocol): def connectionMade(self): self.factory.echoers.append(self) def dataReceived(self, data): receivermessage = self.factory.app.handle_message2(data) if receivermessage: self.transport.write(data) #this line here is the trouble maker that caused the error EchoProtocol().dataReceived(receivermessage) class MultiEchoFactory(protocol.Factory): protocol = MultiEcho def __init__(self, app): self.echoers = [] self.app = app class ServerApp(App): def build(self): self.layout = BoxLayout(orientation='vertical', spacing=10) self.label = Button(text='Censoring process begin\nBeware of keyword "umbrella"\n ', color=[1.0, 1.0, 1.0, 1.0]) self.label.color = [0.9, 0.2, 0.2, 1.0] self.upperscroll = Button(pos_hint={'x': 0, 'center_y': .5}, size_hint=(None, None)) self.scatter = Scatter() self.displaybox = Label() self.displaybox.color = [0.4, 0.9, 0.4, 1.0] reactor.listenTCP(8000, EchoFactory(self)) # for sender reactor.listenTCP(8001, MultiEchoFactory(self)) # for receiver self.layout.add_widget(self.label) self.layout.add_widget(self.scatter) self.scatter.add_widget(self.displaybox) return self.layout def handle_message(self, msg): if any(word in msg.lower() for word in wordlist): self.displaybox.color = [0.9, 0.4, 0.4, 1.0] self.displaybox.text = "content blocked" self.label.text += "Alert! Sender posts %s \n" % msg else: self.label.text += "Safe - sender posts %s \n" % msg self.displaybox.color = [0.4, 0.9, 0.4, 1.0] self.displaybox.text = "%s" % msg msg = msg return msg def handle_message2(self, msg): if any(word in msg.lower() for word in wordlist): self.label.color = [0.8, 0.8, 0.5, 1.0] self.label.text += "Alert! Receiver got %s \n" % msg else: self.label.color = [0.2, 0.2, 1.0, 1.0] self.label.text += "Safe - receiver sends %s \n" % msg msg = msg return msg if __name__ == '__main__': ServerApp().run()
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python