Source code for pidibble.baserecord

"""

.. module:: baserecord
   :synopsis: defines the BaseRecord class
   
.. moduleauthor: Cameron F. Abrams, <cfa22@drexel.edu>

"""
from .baseparsers import StringParser
import logging
logger = logging.getLogger(__name__)

[docs] def rstr(d, excludes, pad): """ Generate a formatted string representation of a dictionary, excluding specified keys. Parameters ---------- d : dict The dictionary to format. excludes : list A list of keys to exclude from the output. pad : int The padding for the keys in the output string. Returns ------- str A formatted string representation of the dictionary. """ retstr = '' kfstr = r'{:>' + str(pad) + r's}:' for k, v in d.items(): if not k in excludes: retstr += kfstr.format(k) if isinstance(v, dict): retstr += '\n' retstr += rstr(v, excludes, pad + 5) elif hasattr(v, '__len__') and not isinstance(v, str): ch = ['', ''] if hasattr(v[0], '__dict__'): ch = ['[', ']'] retstr += ' ' + ', '.join([f'{ch[0]}{str(x)}{ch[1]}' for x in v]) + '\n' else: retstr += f' {str(v)}' + '\n' return retstr
[docs] class BaseRecord: """ A class representing a base record with fields and methods for parsing and displaying. """ def __init__(self, input_dict): self.__dict__.update(input_dict)
[docs] def empty(self): """ Check if the record is empty, meaning all fields are empty strings. Returns ------- bool True if all fields are empty strings, False otherwise. """ return all(v == '' for v in self.__dict__.values())
def __str__(self): """ Generate a string representation of the BaseRecord instance. Returns ------- str A string representation of the BaseRecord instance, showing its attributes and values. """ return '; '.join([f'{k}: {v}' for k, v in self.__dict__.items()])
[docs] def pstr(self, excludes=['key', 'format', 'continuation'], pad=20): """ Generate a formatted string representation of the BaseRecord instance, excluding specified keys. Parameters ---------- excludes : list, optional A list of keys to exclude from the output (default is ['key', 'format', 'continuation']). pad : int, optional The padding for the keys in the output string (default is 20). Returns ------- str A formatted string representation of the BaseRecord instance, excluding specified keys. """ retstr = f'{self.key}' + '\n' retstr += rstr(self.__dict__, excludes, pad) return retstr
[docs] class BaseRecordParser(StringParser): """ A parser for fixed-width string records that generates BaseRecord instances. Inherits from :class:`StringParser`. """
[docs] def add_fields(self, fields): """ Add fields to the parser's field map. Parameters ---------- fields : dict A dictionary of fields to add to the parser's field map. """ self.fields.update(fields)
[docs] def parse(self, record): """ Parse a fixed-width string record into a BaseRecord instance. Parameters ---------- record : str The fixed-width string record to parse. Returns ------- BaseRecord A BaseRecord instance containing the parsed fields. """ input_dict = super().parse(record) return BaseRecord(input_dict)