Skip to content

Commit

Permalink
renamed variable nmeaserver to avoid name collision
Browse files Browse the repository at this point in the history
  • Loading branch information
felixpageau committed Jun 11, 2019
1 parent d9a6d36 commit b699c85
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 64 deletions.
42 changes: 23 additions & 19 deletions nmeaserver/server.py
@@ -1,6 +1,7 @@
import threading
import SocketServer
import formatter
import logging

class NMEAServer:
#: The dictionary of handler functions for well-formed nmea messages.
Expand Down Expand Up @@ -413,71 +414,74 @@ class MyTCPHandler(SocketServer.StreamRequestHandler):
"""The StreamRequestHandler instance to use to create a NMEAServer"""

context = {}
server = None
nmeaserver = None

def __init__(self, request, client_address,
server, NMEAServer_instance):
if NMEAServer_instance is None:
raise ValueError('server cannot be None')
raise ValueError('nmeaserver cannot be None')

self.server = NMEAServer_instance
self.nmeaserver = NMEAServer_instance
SocketServer.StreamRequestHandler.__init__(
self, request, client_address, server)

def default_context(self):
"""Creates a default connection context dictionary"""

default_context = {}
default_context['client_address'] = self.client_address[0]
return default_context

# read TCP message and use the NMEAServer.dispatch().
def handle(self):
"""Handles a request and pass it to NMEAServer.dispatch()"""

context = self.default_context()
if self.server.connection_context_creator is not None:
self.context = self.server.connection_context_creator(context)
if self.nmeaserver.connection_context_creator is not None:
self.context = self.nmeaserver.connection_context_creator(context)

try:
while not self.server.shutdown_flag:
while not self.nmeaserver.shutdown_flag:
received = self.rfile.readline().strip()
if self.server.debug:
if self.nmeaserver.debug:
print("< ", received)
response = self.server.dispatch(received, self.context)
response = self.nmeaserver.dispatch(received, self.context)

if response is not None:
if self.server.debug:
if self.nmeaserver.debug:
print("> ", response)
self.wfile.write(format(response))
self.wfile.flush()
except BaseException:
except BaseException as e:
print("Connection closing")

class ThreadedTCPServer(SocketServer.ThreadingTCPServer):
server = None
nmeaserver = None

def __init__(self, server_address, RequestHandlerClass,
NMEAServer_instance):
if NMEAServer_instance is None:
raise ValueError('server cannot be None')
raise ValueError('nmeaserver cannot be None')

SocketServer.ThreadingTCPServer.__init__(
self, server_address, RequestHandlerClass)
self.server = NMEAServer_instance
self.nmeaserver = NMEAServer_instance

print('Server Address:', server_address[0])
print('Connect to server on port:', server_address[1])
print('Connect to nmeaserver on port:', server_address[1])

def finish_request(self, request, client_address):
"""Finish one request by instantiating RequestHandlerClass."""
self.RequestHandlerClass(
request, client_address, self, self.server)
request, client_address, self, self.nmeaserver)

def start(self):
self.server = self.ThreadedTCPServer(
self.nmeaserver = self.ThreadedTCPServer(
(self.host, self.port), NMEAServer.MyTCPHandler, self)
server_thread = threading.Thread(
name='nmea', target=self.server.serve_forever)
name='nmea', target=self.nmeaserver.serve_forever)
server_thread.daemon = True
server_thread.start()

def stop(self):
self.shutdown_flag = True
self.server.shutdown()
self.nmeaserver.shutdown()
4 changes: 2 additions & 2 deletions setup.py
Expand Up @@ -4,10 +4,10 @@

setup(
name='nmeaserver',
version='0.1.5',
version='0.1.6',
description='Python framework for a NMEA 0183 TCP Server inspired by Flask developer API',
url='https://github.com/robonation/nmeaserver',
download_url = 'https://github.com/robonation/nmeaserver/archive/v0.1.5.tar.gz',
download_url = 'https://github.com/robonation/nmeaserver/archive/v0.1.6.tar.gz',
author='Felix Pageau',
author_email='pageau@robonation.org',
license='Apache License 2.0',
Expand Down
86 changes: 43 additions & 43 deletions tests/test_server.py
Expand Up @@ -17,79 +17,79 @@ def dummy1(): pass
def dummy2(): pass

def assertServerClean(self):
self.assertIsNone(self.server.missing_handler)
self.assertIsNone(self.server.message_pre_handler)
self.assertIsNone(self.server.message_post_handler)
self.assertIsNone(self.server.error_handler)
self.assertIsNone(self.server.bad_checksum_message_handler)
self.assertIsNone(self.server.connection_context_creator)
self.assertIsNone(self.nmeaserver.missing_handler)
self.assertIsNone(self.nmeaserver.message_pre_handler)
self.assertIsNone(self.nmeaserver.message_post_handler)
self.assertIsNone(self.nmeaserver.error_handler)
self.assertIsNone(self.nmeaserver.bad_checksum_message_handler)
self.assertIsNone(self.nmeaserver.connection_context_creator)

class TestStringMethods(unittest.TestCase):
server = server.NMEAServer()
nmeaserver = nmeaserver.NMEAServer()

def test_add_message_handler(self):
assertServerClean(self)
with self.assertRaises(KeyError):
self.server.message_handlers['RXTST']
self.server.add_message_handler('RXTST', dummy1)
self.assertEqual(self.server.message_handlers['RXTST'], dummy1)
self.assertNotEqual(self.server.message_handlers['RXTST'], dummy2)
self.server.add_message_handler('RXTST', None)
self.assertIsNone(self.server.message_handlers['RXTST'])
self.nmeaserver.message_handlers['RXTST']
self.nmeaserver.add_message_handler('RXTST', dummy1)
self.assertEqual(self.nmeaserver.message_handlers['RXTST'], dummy1)
self.assertNotEqual(self.nmeaserver.message_handlers['RXTST'], dummy2)
self.nmeaserver.add_message_handler('RXTST', None)
self.assertIsNone(self.nmeaserver.message_handlers['RXTST'])
assertServerClean(self)

def test_add_prehandler(self):
assertServerClean(self)
self.server.add_prehandler(dummy1)
self.assertEqual(self.server.message_pre_handler, dummy1)
self.assertNotEqual(self.server.message_pre_handler, dummy2)
self.server.add_prehandler(None)
self.assertIsNone(self.server.message_pre_handler)
self.nmeaserver.add_prehandler(dummy1)
self.assertEqual(self.nmeaserver.message_pre_handler, dummy1)
self.assertNotEqual(self.nmeaserver.message_pre_handler, dummy2)
self.nmeaserver.add_prehandler(None)
self.assertIsNone(self.nmeaserver.message_pre_handler)
assertServerClean(self)

def test_add_posthandler(self):
assertServerClean(self)
self.server.add_posthandler(dummy1)
self.assertEqual(self.server.message_post_handler, dummy1)
self.assertNotEqual(self.server.message_post_handler, dummy2)
self.server.add_posthandler(None)
self.assertIsNone(self.server.message_post_handler)
self.nmeaserver.add_posthandler(dummy1)
self.assertEqual(self.nmeaserver.message_post_handler, dummy1)
self.assertNotEqual(self.nmeaserver.message_post_handler, dummy2)
self.nmeaserver.add_posthandler(None)
self.assertIsNone(self.nmeaserver.message_post_handler)
assertServerClean(self)

def test_add_unknown_message(self):
assertServerClean(self)
self.server.add_unknown_message(dummy1)
self.assertEqual(self.server.missing_handler, dummy1)
self.assertNotEqual(self.server.missing_handler, dummy2)
self.server.add_unknown_message(None)
self.assertIsNone(self.server.missing_handler)
self.nmeaserver.add_unknown_message(dummy1)
self.assertEqual(self.nmeaserver.missing_handler, dummy1)
self.assertNotEqual(self.nmeaserver.missing_handler, dummy2)
self.nmeaserver.add_unknown_message(None)
self.assertIsNone(self.nmeaserver.missing_handler)
assertServerClean(self)

def test_add_context_creator(self):
assertServerClean(self)
self.server.add_context_creator(dummy1)
self.assertEqual(self.server.connection_context_creator, dummy1)
self.assertNotEqual(self.server.connection_context_creator, dummy2)
self.server.add_context_creator(None)
self.assertIsNone(self.server.connection_context_creator)
self.nmeaserver.add_context_creator(dummy1)
self.assertEqual(self.nmeaserver.connection_context_creator, dummy1)
self.assertNotEqual(self.nmeaserver.connection_context_creator, dummy2)
self.nmeaserver.add_context_creator(None)
self.assertIsNone(self.nmeaserver.connection_context_creator)
assertServerClean(self)

def test_add_bad_checksum_handler(self):
assertServerClean(self)
self.server.add_bad_checksum_handler(dummy1)
self.assertEqual(self.server.bad_checksum_message_handler, dummy1)
self.assertNotEqual(self.server.bad_checksum_message_handler, dummy2)
self.server.add_bad_checksum_handler(None)
self.assertIsNone(self.server.bad_checksum_message_handler)
self.nmeaserver.add_bad_checksum_handler(dummy1)
self.assertEqual(self.nmeaserver.bad_checksum_message_handler, dummy1)
self.assertNotEqual(self.nmeaserver.bad_checksum_message_handler, dummy2)
self.nmeaserver.add_bad_checksum_handler(None)
self.assertIsNone(self.nmeaserver.bad_checksum_message_handler)
assertServerClean(self)

def test_add_error_handler(self):
assertServerClean(self)
self.server.add_error_handler(dummy1)
self.assertEqual(self.server.error_handler, dummy1)
self.assertNotEqual(self.server.error_handler, dummy2)
self.server.add_error_handler(None)
self.assertIsNone(self.server.error_handler)
self.nmeaserver.add_error_handler(dummy1)
self.assertEqual(self.nmeaserver.error_handler, dummy1)
self.assertNotEqual(self.nmeaserver.error_handler, dummy2)
self.nmeaserver.add_error_handler(None)
self.assertIsNone(self.nmeaserver.error_handler)
assertServerClean(self)

if __name__ == '__main__':
Expand Down

0 comments on commit b699c85

Please sign in to comment.