Refactor get_boards method with exception handler

This commit is contained in:
Ivan Kravets
2015-02-12 14:24:31 +02:00
committed by Valeriy Koval
parent f9ec259742
commit 7f2e6a02f0

View File

@ -10,9 +10,7 @@ from subprocess import PIPE, Popen
import requests import requests
from platformio import __apiurl__, __version__ from platformio import __apiurl__, __version__, exception
from platformio.exception import (APIRequestError, GetSerialPortsError,
NotPlatformProject)
try: try:
from configparser import ConfigParser from configparser import ConfigParser
@ -33,7 +31,7 @@ def get_home_dir():
if (config.has_section("platformio") and if (config.has_section("platformio") and
config.has_option("platformio", "home_dir")): config.has_option("platformio", "home_dir")):
home_dir = config.get("platformio", "home_dir") home_dir = config.get("platformio", "home_dir")
except NotPlatformProject: except exception.NotPlatformProject:
pass pass
if not home_dir: if not home_dir:
@ -55,7 +53,7 @@ def get_lib_dir():
if lib_dir.startswith("~"): if lib_dir.startswith("~"):
lib_dir = expanduser(lib_dir) lib_dir = expanduser(lib_dir)
return abspath(lib_dir) return abspath(lib_dir)
except NotPlatformProject: except exception.NotPlatformProject:
pass pass
return join(get_home_dir(), "lib") return join(get_home_dir(), "lib")
@ -75,7 +73,7 @@ def get_pioenvs_dir():
def get_project_config(): def get_project_config():
path = join(get_project_dir(), "platformio.ini") path = join(get_project_dir(), "platformio.ini")
if not isfile(path): if not isfile(path):
raise NotPlatformProject(get_project_dir()) raise exception.NotPlatformProject(get_project_dir())
cp = ConfigParser() cp = ConfigParser()
cp.read(path) cp.read(path)
return cp return cp
@ -101,7 +99,7 @@ def get_serialports():
elif os_name == "posix": elif os_name == "posix":
from serial.tools.list_ports_posix import comports from serial.tools.list_ports_posix import comports
else: else:
raise GetSerialPortsError(os_name) raise exception.GetSerialPortsError(os_name)
return[{"port": p, "description": d, "hwid": h} for p, d, h in comports()] return[{"port": p, "description": d, "hwid": h} for p, d, h in comports()]
@ -127,14 +125,15 @@ def get_api_result(path, params=None, data=None):
r.raise_for_status() r.raise_for_status()
except requests.exceptions.HTTPError as e: except requests.exceptions.HTTPError as e:
if result and "errors" in result: if result and "errors" in result:
raise APIRequestError(result['errors'][0]['title']) raise exception.APIRequestError(result['errors'][0]['title'])
else: else:
raise APIRequestError(e) raise exception.APIRequestError(e)
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
raise APIRequestError( raise exception.APIRequestError(
"Could not connect to PlatformIO Registry Service") "Could not connect to PlatformIO Registry Service")
except ValueError: except ValueError:
raise APIRequestError("Invalid response: %s" % r.text.encode("utf-8")) raise exception.APIRequestError(
"Invalid response: %s" % r.text.encode("utf-8"))
finally: finally:
if r: if r:
r.close() r.close()
@ -143,15 +142,24 @@ def get_api_result(path, params=None, data=None):
def get_boards(type_=None): def get_boards(type_=None):
boards = {} boards = {}
bdirs = [join(get_source_dir(), "boards")] try:
if isdir(join(get_home_dir(), "boards")): boards = get_boards._cache
bdirs.append(join(get_home_dir(), "boards")) except AttributeError:
bdirs = [join(get_source_dir(), "boards")]
if isdir(join(get_home_dir(), "boards")):
bdirs.append(join(get_home_dir(), "boards"))
for bdir in bdirs: for bdir in bdirs:
for json_file in listdir(bdir): for json_file in listdir(bdir):
if not json_file.endswith(".json"): if not json_file.endswith(".json"):
continue continue
with open(join(bdir, json_file)) as f: with open(join(bdir, json_file)) as f:
boards.update(json.load(f)) boards.update(json.load(f))
get_boards._cache = boards
return boards[type_] if type_ is not None else boards if type_ is None:
return boards
else:
if type_ not in boards:
raise exception.UnknownBoard(type_)
return boards[type_]