diff options
Diffstat (limited to 'src/sexparse/functions.py')
-rw-r--r-- | src/sexparse/functions.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/sexparse/functions.py b/src/sexparse/functions.py index 08ba5d9..22aae50 100644 --- a/src/sexparse/functions.py +++ b/src/sexparse/functions.py @@ -20,13 +20,47 @@ #ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import sexparse +def sexdump(obj, col_width=16, truncate=True): + width = col_width + trunc = "<trunc>" + if not isinstance(obj, sexparse.SexConfigBase): + return None + + for k, v in obj: + retainer = v + if truncate: + if len(repr(v)) > width: + v = repr(v)[0:width - len(trunc)] + trunc + + show_type = type(retainer) + sformat = "{:>{width}} | {:<{width}} | {:<{width}}" + sformat_t = (k, v, show_type) + + try: + if obj.status: + status = "Enabled" if convert_type(obj.is_enabled(k)) else "Disabled" + sformat += " | {:>{width}}" + sformat_t = (k, v, status, show_type) + except AttributeError: + pass + + if isinstance(v, list) or isinstance(v, tuple): + show_type = [ type(x) for x in retainer ] + + if isinstance(v, dict): + show_type = [ type(x) for x in retainer.iteritems() ] + + print(sformat.format(*sformat_t, width=col_width)) + def convert_type(s): + for cast in (int, float): try: return cast(s) except ValueError: pass - return s
\ No newline at end of file + return s |