Fixed importing of dependency for map tracker.

This commit is contained in:
Ryan Kraus 2015-08-30 20:01:02 -04:00
parent 1958dfd0c1
commit b1876d586e

View File

@ -26,13 +26,6 @@ from collections import namedtuple
import subprocess import subprocess
import re import re
try:
from libnmap.process import NmapProcess
from libnmap.parser import NmapParser, NmapParserException
LIB_LOADED = True
except ImportError:
LIB_LOADED = False
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from homeassistant.const import CONF_HOSTS from homeassistant.const import CONF_HOSTS
from homeassistant.helpers import validate_config from homeassistant.helpers import validate_config
@ -52,13 +45,16 @@ REQUIREMENTS = ['python-libnmap==0.6.1']
def get_scanner(hass, config): def get_scanner(hass, config):
""" Validates config and returns a Nmap scanner. """ """ Validates config and returns a Nmap scanner. """
# pylint: disable=unused-variable
if not validate_config(config, {DOMAIN: [CONF_HOSTS]}, if not validate_config(config, {DOMAIN: [CONF_HOSTS]},
_LOGGER): _LOGGER):
return None return None
if not LIB_LOADED: try:
import libnmap # noqa
except ImportError:
_LOGGER.error("Error while importing dependency python-libnmap.") _LOGGER.error("Error while importing dependency python-libnmap.")
return False return None
scanner = NmapDeviceScanner(config[DOMAIN]) scanner = NmapDeviceScanner(config[DOMAIN])
@ -83,6 +79,13 @@ class NmapDeviceScanner(object):
""" This class scans for devices using nmap """ """ This class scans for devices using nmap """
def __init__(self, config): def __init__(self, config):
from libnmap.process import NmapProcess
from libnmap.parser import NmapParser, NmapParserException
self.nmap_process = NmapProcess
self.nmap_parser = NmapParser
self.nmap_parser_exception = NmapParserException
self.last_results = [] self.last_results = []
self.hosts = config[CONF_HOSTS] self.hosts = config[CONF_HOSTS]
@ -116,7 +119,7 @@ class NmapDeviceScanner(object):
""" Parses results from an nmap scan. """ Parses results from an nmap scan.
Returns True if successful, False otherwise. """ Returns True if successful, False otherwise. """
try: try:
results = NmapParser.parse(stdout) results = self.nmap_parser.parse(stdout)
now = dt_util.now() now = dt_util.now()
self.last_results = [] self.last_results = []
for host in results.hosts: for host in results.hosts:
@ -134,7 +137,7 @@ class NmapDeviceScanner(object):
self.last_results.append(device) self.last_results.append(device)
_LOGGER.info("nmap scan successful") _LOGGER.info("nmap scan successful")
return True return True
except NmapParserException as parse_exc: except self.nmap_parser_exception as parse_exc:
_LOGGER.error("failed to parse nmap results: %s", parse_exc.msg) _LOGGER.error("failed to parse nmap results: %s", parse_exc.msg)
self.last_results = [] self.last_results = []
return False return False
@ -159,7 +162,7 @@ class NmapDeviceScanner(object):
target_list = [t.ip for t in exclude_targets] target_list = [t.ip for t in exclude_targets]
options += " --exclude {}".format(",".join(target_list)) options += " --exclude {}".format(",".join(target_list))
nmap = NmapProcess(targets=self.hosts, options=options) nmap = self.nmap_process(targets=self.hosts, options=options)
nmap.run() nmap.run()