9f9230833b50b8271840dc2c12bd1e94d9df7d12Alexander Pyhalov#!@PYTHON@
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# CDDL HEADER START
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# The contents of this file are subject to the terms of the
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# Common Development and Distribution License (the "License").
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# You may not use this file except in compliance with the License.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# or http://www.opensolaris.org/os/licensing.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# See the License for the specific language governing permissions
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# and limitations under the License.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# When distributing Covered Code, include this CDDL HEADER in each
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# If applicable, add the following below this CDDL HEADER, with the
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# fields enclosed by brackets "[]" replaced with your own identifying
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# information: Portions Copyright [yyyy] [name of copyright owner]
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby# CDDL HEADER END
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
6d52f363e3b2c0c5da672c5b8c8adec99d345f38Lori Alt# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby#
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirbyimport zfs.util
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirbyclass Table:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby __slots__ = "fields", "rjustfields", "maxfieldlen", "lines"
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby __repr__ = zfs.util.default_repr
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby def __init__(self, fields, rjustfields=()):
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby # XXX maybe have a defaults, too?
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.fields = fields
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.rjustfields = rjustfields
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.maxfieldlen = dict.fromkeys(fields, 0)
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.lines = list()
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby def __updatemax(self, k, v):
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.maxfieldlen[k] = max(self.maxfieldlen.get(k, None), v)
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby def addline(self, sortkey, values):
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby """values is a dict from field name to value"""
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby va = list()
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby for f in self.fields:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby v = str(values[f])
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby va.append(v)
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.__updatemax(f, len(v))
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.lines.append((sortkey, va))
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby def printme(self, headers=True):
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby if headers:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby d = dict([(f, f.upper()) for f in self.fields])
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.addline(None, d)
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby self.lines.sort()
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby for (k, va) in self.lines:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby line = str()
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby for i in range(len(self.fields)):
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby if not headers:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby line += va[i]
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby line += "\t"
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby else:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby if self.fields[i] in self.rjustfields:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby fmt = "%*s "
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby else:
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby fmt = "%-*s "
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby mfl = self.maxfieldlen[self.fields[i]]
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby line += fmt % (mfl, va[i])
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby print(line)