xref: /onnv-gate/usr/src/lib/pyzfs/common/table.py (revision 12961:f0448f1d899f)
1*12961Slori.alt@oracle.com#! /usr/bin/python2.6
210242Schris.kirby@sun.com#
310242Schris.kirby@sun.com# CDDL HEADER START
410242Schris.kirby@sun.com#
510242Schris.kirby@sun.com# The contents of this file are subject to the terms of the
610242Schris.kirby@sun.com# Common Development and Distribution License (the "License").
710242Schris.kirby@sun.com# You may not use this file except in compliance with the License.
810242Schris.kirby@sun.com#
910242Schris.kirby@sun.com# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1010242Schris.kirby@sun.com# or http://www.opensolaris.org/os/licensing.
1110242Schris.kirby@sun.com# See the License for the specific language governing permissions
1210242Schris.kirby@sun.com# and limitations under the License.
1310242Schris.kirby@sun.com#
1410242Schris.kirby@sun.com# When distributing Covered Code, include this CDDL HEADER in each
1510242Schris.kirby@sun.com# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1610242Schris.kirby@sun.com# If applicable, add the following below this CDDL HEADER, with the
1710242Schris.kirby@sun.com# fields enclosed by brackets "[]" replaced with your own identifying
1810242Schris.kirby@sun.com# information: Portions Copyright [yyyy] [name of copyright owner]
1910242Schris.kirby@sun.com#
2010242Schris.kirby@sun.com# CDDL HEADER END
2110242Schris.kirby@sun.com#
22*12961Slori.alt@oracle.com# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
2310242Schris.kirby@sun.com#
2410242Schris.kirby@sun.com
2510242Schris.kirby@sun.comimport zfs.util
2610242Schris.kirby@sun.com
2710242Schris.kirby@sun.comclass Table:
2810242Schris.kirby@sun.com	__slots__ = "fields", "rjustfields", "maxfieldlen", "lines"
2910242Schris.kirby@sun.com	__repr__ = zfs.util.default_repr
3010242Schris.kirby@sun.com
3110242Schris.kirby@sun.com	def __init__(self, fields, rjustfields=()):
3210242Schris.kirby@sun.com		# XXX maybe have a defaults, too?
3310242Schris.kirby@sun.com		self.fields = fields
3410242Schris.kirby@sun.com		self.rjustfields = rjustfields
3510242Schris.kirby@sun.com		self.maxfieldlen = dict.fromkeys(fields, 0)
3610242Schris.kirby@sun.com		self.lines = list()
3710242Schris.kirby@sun.com
3810242Schris.kirby@sun.com	def __updatemax(self, k, v):
3910242Schris.kirby@sun.com		self.maxfieldlen[k] = max(self.maxfieldlen.get(k, None), v)
4010242Schris.kirby@sun.com
4110242Schris.kirby@sun.com	def addline(self, sortkey, values):
4210242Schris.kirby@sun.com		"""values is a dict from field name to value"""
4310242Schris.kirby@sun.com
4410242Schris.kirby@sun.com		va = list()
4510242Schris.kirby@sun.com		for f in self.fields:
4610242Schris.kirby@sun.com			v = str(values[f])
4710242Schris.kirby@sun.com			va.append(v)
4810242Schris.kirby@sun.com			self.__updatemax(f, len(v))
4910242Schris.kirby@sun.com		self.lines.append((sortkey, va))
5010242Schris.kirby@sun.com
5110242Schris.kirby@sun.com	def printme(self, headers=True):
5210242Schris.kirby@sun.com		if headers:
5310242Schris.kirby@sun.com			d = dict([(f, f.upper()) for f in self.fields])
5410242Schris.kirby@sun.com			self.addline(None, d)
5510242Schris.kirby@sun.com
5610242Schris.kirby@sun.com		self.lines.sort()
5710242Schris.kirby@sun.com		for (k, va) in self.lines:
5810242Schris.kirby@sun.com			line = str()
5910242Schris.kirby@sun.com			for i in range(len(self.fields)):
6010242Schris.kirby@sun.com				if not headers:
6110242Schris.kirby@sun.com					line += va[i]
6210242Schris.kirby@sun.com					line += "\t"
6310242Schris.kirby@sun.com				else:
6410242Schris.kirby@sun.com					if self.fields[i] in self.rjustfields:
6510242Schris.kirby@sun.com						fmt = "%*s  "
6610242Schris.kirby@sun.com					else:
6710242Schris.kirby@sun.com						fmt = "%-*s  "
6810242Schris.kirby@sun.com					mfl = self.maxfieldlen[self.fields[i]]
6910242Schris.kirby@sun.com					line += fmt % (mfl, va[i])
7010242Schris.kirby@sun.com			print(line)
71