def connectionMade(self): """ Start parsing, since the connection has been established. """ self.sender = self._senderFactory(self.transport) self.receiver = self._receiverFactory(self.sender) self.receiver.prepareParsing(self) self._parser = TrampolinedParser( self._grammar, self.receiver, self._bindings)
def test_dataNotFullyReceived(self): """ Since the initial rule inside the grammar is not matched, the receiver shouldn't receive any byte. """ receiver = TrampolinedReceiver() trampolinedParser = TrampolinedParser(self.grammar, receiver, {}) buf = b'foobarandnotreachdelimiter' for c in iterbytes(buf): trampolinedParser.receive(c) self.assertEqual(receiver.received, [])
def test_currentRuleWithArgs(self): """ TrampolinedParser should be able to invoke curruent rule with args. """ receiver = TrampolinedReceiver() receiver.currentRule = "witharg", "nice ", "day" trampolinedParser = TrampolinedParser(self.grammar, receiver, {}) buf = ' oh yes\r\n' for c in iterbytes(buf): trampolinedParser.receive(c) self.assertEqual(receiver.received, ["nice day oh yes"])
def test_bindings(self): """ The passed-in bindings should be accessible inside the grammar. """ receiver = TrampolinedReceiver() grammar = r""" initial = digit:d (-> int(d)+SMALL_INT):val -> receiver.receive(val) """ bindings = {'SMALL_INT': 3} TrampolinedParser(self._parseGrammar(grammar), receiver, bindings).receive('0') self.assertEqual(receiver.received, [3])
def test_dataFullyReceived(self): """ The receiver should receive the data according to the grammar. """ receiver = TrampolinedReceiver() trampolinedParser = TrampolinedParser(self.grammar, receiver, {}) buf = b'\r\n'.join((b'foo', b'bar', b'foo', b'bar')) for c in iterbytes(buf): trampolinedParser.receive(c) self.assertEqual(receiver.received, [b'foo', b'bar', b'foo']) trampolinedParser.receive('\r\n') self.assertEqual(receiver.received, [b'foo', b'bar', b'foo', b'bar'])
def _getMessageSetParser(self, topicName): if topicName not in self._parsers: receiver = MessageSetReceiver() self._parsers[topicName] = TrampolinedParser(grammar=self._messageSetGrammar, receiver=receiver, bindings=globalBindings) return self._parsers[topicName]
def _initializeParserProtocol(self): self._trampolinedParser = TrampolinedParser(grammar=getGrammar( self._parsleyGrammarPKG, self._parsleyGrammarName), receiver=self, bindings=self._bindings)