kopia lustrzana https://github.com/glidernet/python-ogn-client
Allow dynamic settings override
Additional (optional) 'settings' attribute in AprsClient, to be able to pass custom settings to the client, without changing the settings.py file. Added 'CustomSettings' class for backward compatible attribute access. Example (myapp.py): ... args = ... parse arguments from command line settings = CustomSettings( APRS_SERVER_HOST = args.server, APRS_SERVER_PORT_FULL_FEED = args.port, APRS_SERVER_PORT_CLIENT_DEFINED_FILTERS = args.port, APRS_APP_NAME = 'python-ogn-client', PACKAGE_VERSION = '0.9.5', APRS_APP_VER = '0.9', APRS_KEEPALIVE_TIME = 240, TELNET_SERVER_HOST = 'localhost', TELNET_SERVER_PORT = 50001, ) client = AprsClient(aprs_user='N0CALL', aprs_filter=args.filter, settings=settings) client.connect() ...pull/66/head
rodzic
226a8239fa
commit
689d60ebbe
|
@ -1,2 +1,9 @@
|
||||||
from ogn.client.client import AprsClient # noqa: F401
|
from ogn.client.client import AprsClient # noqa: F401
|
||||||
from ogn.client.client import TelnetClient # noqa: F401
|
from ogn.client.client import TelnetClient # noqa: F401
|
||||||
|
|
||||||
|
class CustomSettings(object):
|
||||||
|
def __init__(self, **kw):
|
||||||
|
self.kw = kw
|
||||||
|
def __getattr__(self, name):
|
||||||
|
return self.kw[name]
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,12 @@ def create_aprs_login(user_name, pass_code, app_name, app_version, aprs_filter=N
|
||||||
|
|
||||||
|
|
||||||
class AprsClient:
|
class AprsClient:
|
||||||
def __init__(self, aprs_user, aprs_filter=''):
|
def __init__(self, aprs_user, aprs_filter='', settings=settings):
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
self.logger.info("Connect to OGN as {} with filter '{}'".format(aprs_user, (aprs_filter if aprs_filter else 'full-feed')))
|
self.logger.info("Connect to OGN as {} with filter '{}'".format(aprs_user, (aprs_filter if aprs_filter else 'full-feed')))
|
||||||
self.aprs_user = aprs_user
|
self.aprs_user = aprs_user
|
||||||
self.aprs_filter = aprs_filter
|
self.aprs_filter = aprs_filter
|
||||||
|
self.settings = settings
|
||||||
|
|
||||||
self._kill = False
|
self._kill = False
|
||||||
|
|
||||||
|
@ -27,14 +28,14 @@ class AprsClient:
|
||||||
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
||||||
|
|
||||||
if self.aprs_filter:
|
if self.aprs_filter:
|
||||||
port = settings.APRS_SERVER_PORT_CLIENT_DEFINED_FILTERS
|
port = self.settings.APRS_SERVER_PORT_CLIENT_DEFINED_FILTERS
|
||||||
else:
|
else:
|
||||||
port = settings.APRS_SERVER_PORT_FULL_FEED
|
port = self.settings.APRS_SERVER_PORT_FULL_FEED
|
||||||
|
|
||||||
self.sock.connect((settings.APRS_SERVER_HOST, port))
|
self.sock.connect((self.settings.APRS_SERVER_HOST, port))
|
||||||
self.logger.debug('Server port {}'.format(port))
|
self.logger.debug('Server port {}'.format(port))
|
||||||
|
|
||||||
login = create_aprs_login(self.aprs_user, -1, settings.APRS_APP_NAME, settings.APRS_APP_VER, self.aprs_filter)
|
login = create_aprs_login(self.aprs_user, -1, self.settings.APRS_APP_NAME, self.settings.APRS_APP_VER, self.aprs_filter)
|
||||||
self.sock.send(login.encode())
|
self.sock.send(login.encode())
|
||||||
self.sock_file = self.sock.makefile('rw')
|
self.sock_file = self.sock.makefile('rw')
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ class AprsClient:
|
||||||
try:
|
try:
|
||||||
keepalive_time = time()
|
keepalive_time = time()
|
||||||
while not self._kill:
|
while not self._kill:
|
||||||
if time() - keepalive_time > settings.APRS_KEEPALIVE_TIME:
|
if time() - keepalive_time > self.settings.APRS_KEEPALIVE_TIME:
|
||||||
self.logger.info('Send keepalive')
|
self.logger.info('Send keepalive')
|
||||||
self.sock.send('#keepalive\n'.encode())
|
self.sock.send('#keepalive\n'.encode())
|
||||||
timed_callback(self)
|
timed_callback(self)
|
||||||
|
@ -86,13 +87,14 @@ class AprsClient:
|
||||||
|
|
||||||
|
|
||||||
class TelnetClient:
|
class TelnetClient:
|
||||||
def __init__(self):
|
def __init__(self, settings=settings):
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
self.logger.info("Connect to local telnet server")
|
self.logger.info("Connect to local telnet server")
|
||||||
|
self.settings = settings
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.sock.connect((settings.TELNET_SERVER_HOST, settings.TELNET_SERVER_PORT))
|
self.sock.connect((self.settings.TELNET_SERVER_HOST, self.settings.TELNET_SERVER_PORT))
|
||||||
|
|
||||||
def run(self, callback, autoreconnect=False):
|
def run(self, callback, autoreconnect=False):
|
||||||
while True:
|
while True:
|
||||||
|
|
Ładowanie…
Reference in New Issue