usr/src/lib/pyzfs/common/table.py
changeset 10242 c40d075fbca6
child 12973 f0448f1d899f
equal deleted inserted replaced
10241:356a64b58ebc 10242:c40d075fbca6
       
     1 #! /usr/bin/python2.4
       
     2 #
       
     3 # CDDL HEADER START
       
     4 #
       
     5 # The contents of this file are subject to the terms of the
       
     6 # Common Development and Distribution License (the "License").
       
     7 # You may not use this file except in compliance with the License.
       
     8 #
       
     9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
       
    10 # or http://www.opensolaris.org/os/licensing.
       
    11 # See the License for the specific language governing permissions
       
    12 # and limitations under the License.
       
    13 #
       
    14 # When distributing Covered Code, include this CDDL HEADER in each
       
    15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       
    16 # If applicable, add the following below this CDDL HEADER, with the
       
    17 # fields enclosed by brackets "[]" replaced with your own identifying
       
    18 # information: Portions Copyright [yyyy] [name of copyright owner]
       
    19 #
       
    20 # CDDL HEADER END
       
    21 #
       
    22 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
       
    23 # Use is subject to license terms.
       
    24 #
       
    25 
       
    26 import zfs.util
       
    27 
       
    28 class Table:
       
    29 	__slots__ = "fields", "rjustfields", "maxfieldlen", "lines"
       
    30 	__repr__ = zfs.util.default_repr
       
    31 
       
    32 	def __init__(self, fields, rjustfields=()):
       
    33 		# XXX maybe have a defaults, too?
       
    34 		self.fields = fields
       
    35 		self.rjustfields = rjustfields
       
    36 		self.maxfieldlen = dict.fromkeys(fields, 0)
       
    37 		self.lines = list()
       
    38 	
       
    39 	def __updatemax(self, k, v):
       
    40 		self.maxfieldlen[k] = max(self.maxfieldlen.get(k, None), v)
       
    41 
       
    42 	def addline(self, sortkey, values):
       
    43 		"""values is a dict from field name to value"""
       
    44 
       
    45 		va = list()
       
    46 		for f in self.fields:
       
    47 			v = str(values[f])
       
    48 			va.append(v)
       
    49 			self.__updatemax(f, len(v))
       
    50 		self.lines.append((sortkey, va))
       
    51 
       
    52 	def printme(self, headers=True):
       
    53 		if headers:
       
    54 			d = dict([(f, f.upper()) for f in self.fields])
       
    55 			self.addline(None, d)
       
    56 
       
    57 		self.lines.sort()
       
    58 		for (k, va) in self.lines:
       
    59 			line = str()
       
    60 			for i in range(len(self.fields)):
       
    61 				if not headers:
       
    62 					line += va[i]
       
    63 					line += "\t"
       
    64 				else:
       
    65 					if self.fields[i] in self.rjustfields:
       
    66 						fmt = "%*s  "
       
    67 					else:
       
    68 						fmt = "%-*s  "
       
    69 					mfl = self.maxfieldlen[self.fields[i]]
       
    70 					line += fmt % (mfl, va[i])
       
    71 			print(line)