mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-08-10 22:41:51 +02:00
allow parser to deal with null input
This commit is contained in:
@@ -90,6 +90,7 @@ from typing import Dict
|
|||||||
|
|
||||||
import jc.utils
|
import jc.utils
|
||||||
from jc.utils import convert_to_int
|
from jc.utils import convert_to_int
|
||||||
|
from jc.exceptions import ParseError
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
@@ -115,6 +116,9 @@ def _process(proc_data: Dict) -> Dict:
|
|||||||
Returns:
|
Returns:
|
||||||
(dict) processed structured data adhering to the schema
|
(dict) processed structured data adhering to the schema
|
||||||
"""
|
"""
|
||||||
|
if not proc_data:
|
||||||
|
return {}
|
||||||
|
|
||||||
# Initialize the processed dictionary
|
# Initialize the processed dictionary
|
||||||
processed = {
|
processed = {
|
||||||
"control_name": proc_data.get("control_name", ""),
|
"control_name": proc_data.get("control_name", ""),
|
||||||
@@ -209,6 +213,8 @@ def parse(
|
|||||||
|
|
||||||
# starts the parsing from here
|
# starts the parsing from here
|
||||||
mapping: Dict = {}
|
mapping: Dict = {}
|
||||||
|
|
||||||
|
if jc.utils.has_data(data):
|
||||||
# split lines and than work on each line
|
# split lines and than work on each line
|
||||||
lines = data.splitlines()
|
lines = data.splitlines()
|
||||||
first_line = lines[0].strip()
|
first_line = lines[0].strip()
|
||||||
@@ -217,7 +223,7 @@ def parse(
|
|||||||
if first_line.startswith("Simple mixer control"):
|
if first_line.startswith("Simple mixer control"):
|
||||||
control_name = first_line.split("'")[1]
|
control_name = first_line.split("'")[1]
|
||||||
else:
|
else:
|
||||||
raise ValueError("Invalid amixer output format: missing control name.")
|
raise ParseError("Invalid amixer output format: missing control name.")
|
||||||
# map the control name
|
# map the control name
|
||||||
mapping["control_name"] = control_name
|
mapping["control_name"] = control_name
|
||||||
|
|
||||||
|
@@ -22,6 +22,12 @@ class AmixerTests(unittest.TestCase):
|
|||||||
self.test_files_json = [f'{file}.json' for file in self.TEST_FILES_NAME]
|
self.test_files_json = [f'{file}.json' for file in self.TEST_FILES_NAME]
|
||||||
self.test_files_processed_json = [f'{file}-processed.json' for file in self.TEST_FILES_NAME]
|
self.test_files_processed_json = [f'{file}-processed.json' for file in self.TEST_FILES_NAME]
|
||||||
|
|
||||||
|
def test_amixer_sget_nodata(self):
|
||||||
|
"""
|
||||||
|
Test 'amixer' with no data
|
||||||
|
"""
|
||||||
|
self.assertEqual(jc.parsers.amixer.parse('', quiet=True), {})
|
||||||
|
|
||||||
def test_amixer_sget(self):
|
def test_amixer_sget(self):
|
||||||
for file_out, file_json, file_processed_json in zip(self.test_files_out, self.test_files_json,
|
for file_out, file_json, file_processed_json in zip(self.test_files_out, self.test_files_json,
|
||||||
self.test_files_processed_json):
|
self.test_files_processed_json):
|
||||||
|
Reference in New Issue
Block a user