Skip to content

Commit

Permalink
created the amixer first skeleton
Browse files Browse the repository at this point in the history
  • Loading branch information
EdenRafael committed Nov 21, 2024
1 parent 5f8c65c commit 0de3b5a
Showing 1 changed file with 146 additions and 0 deletions.
146 changes: 146 additions & 0 deletions jc/parsers/amixer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
from typing import List, Dict

import jc.utils


class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1'
description = '`amixer` command parser'
author = 'Eden Refael'
author_email = '[email protected]'
compatible = ['linux', 'darwin', 'cygwin', 'aix', 'freebsd']
magic_commands = ['amixer']
tags = ['command']


__version__ = info.version

def _process(proc_data: List[Dict]) -> List[Dict]:
"""
Final processing to conform to the schema.
Parameters:
proc_data: (List of Dictionaries) raw structured data to process
Returns:
List of Dictionaries. Structured data to conform to the schema:
"""
# int_list = {'expires'}
#
# # in BSD style, change name to null if it is a question mark
# for entry in proc_data:
# if 'name' in entry and entry['name'] == '?':
# entry['name'] = None
#
# for key in entry:
# if key in int_list:
# entry[key] = jc.utils.convert_to_int(entry[key])
#
# return proc_data


def parse(
data: str,
raw: bool = False,
quiet: bool = False
) -> List[Dict]:
"""
Main text parsing function
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
Returns:
List of Dictionaries. Raw or processed structured data.
"""
# jc.utils.compatibility(__name__, info.compatible, quiet)
# jc.utils.input_type_check(data)
#
# raw_output = []
# cleandata = list(filter(None, data.splitlines()))
#
# if jc.utils.has_data(data):
#
# # remove final Entries row if -v was used
# if cleandata[-1].startswith('Entries:'):
# cleandata.pop(-1)
#
# # detect if freebsd/osx style was used
# if cleandata[0][-1] == ']':
# for line in cleandata:
# splitline = line.split()
# output_line: Dict[str, Any] = {
# 'name': splitline[0],
# 'address': splitline[1].lstrip('(').rstrip(')'),
# 'hwtype': splitline[-1].lstrip('[').rstrip(']'),
# 'hwaddress': splitline[3],
# 'iface': splitline[5]
# }
#
# if 'permanent' in splitline:
# output_line['permanent'] = True
# else:
# output_line['permanent'] = False
#
# if 'expires' in splitline:
# output_line['expires'] = splitline[-3]
#
# raw_output.append(output_line)
#
# # detect if linux style was used
# elif cleandata[0].startswith('Address'):
#
# # fix header row to change Flags Mask to flags_mask
# cleandata[0] = cleandata[0].replace('Flags Mask', 'flags_mask')
# cleandata[0] = cleandata[0].lower()
#
# raw_output = jc.parsers.universal.simple_table_parse(cleandata)
#
# # otherwise, try bsd style
# else:
# for line in cleandata:
# splitline = line.split()
#
# # Ignore AIX bucket information
# if 'bucket:' in splitline[0]:
# continue
# elif 'There' in splitline[0] and 'are' in splitline[1]:
# continue
#
# # AIX uses (incomplete)
# elif '<incomplete>' not in splitline and '(incomplete)' not in splitline:
# output_line = {
# 'name': splitline[0],
# 'address': splitline[1].lstrip('(').rstrip(')'),
# 'hwtype': splitline[4].lstrip('[').rstrip(']'),
# 'hwaddress': splitline[3],
# }
# # Handle permanence and ignore interface in AIX
# if 'permanent' in splitline:
# output_line['permanent'] = True
# elif 'in' not in splitline[6]: # AIX doesn't show interface
# output_line['iface'] = splitline[6]
#
# else:
# output_line = {
# 'name': splitline[0],
# 'address': splitline[1].lstrip('(').rstrip(')'),
# 'hwtype': None,
# 'hwaddress': None,
# }
# # AIX doesn't show interface
# if len(splitline) >= 5:
# output_line['iface'] = splitline[5]
#
# raw_output.append(output_line)
#
# return raw_output if raw else _process(raw_output)


0 comments on commit 0de3b5a

Please sign in to comment.