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