MCPcopy Index your code
hub / github.com/clips/pattern / DatasheetColumns

Class DatasheetColumns

pattern/db/__init__.py:1950–2061  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1948#--- DATASHEET COLUMNS -----------------------------------------------------------------------------
1949
1950class DatasheetColumns(list):
1951
1952 def __init__(self, datasheet):
1953 self._datasheet = datasheet
1954 self._cache = {} # Keep a reference to DatasheetColumn objects generated with Datasheet.columns[j].
1955 # This way we can unlink them when they are deleted.
1956
1957 def __setitem__(self, j, column):
1958 if self._datasheet.fields is not None and j < len(self._datasheet.fields):
1959 # Preserve the column header if it exists.
1960 f = self._datasheet.fields[j]
1961 else:
1962 f = None
1963 self.pop(j)
1964 self.insert(j, column, field=f)
1965 def __getitem__(self, j):
1966 if j < 0: j = j % len(self) # DatasheetColumns[-1]
1967 if j >= len(self):
1968 raise IndexError, "list index out of range"
1969 return self._cache.setdefault(j, DatasheetColumn(self._datasheet, j))
1970 def __delitem__(self, j):
1971 self.pop(j)
1972 def __len__(self):
1973 return len(self._datasheet) > 0 and len(self._datasheet[0]) or 0
1974 def __iter__(self):
1975 for i in xrange(len(self)): yield self.__getitem__(i)
1976 def __repr__(self):
1977 return repr(list(iter(self)))
1978 def __add__(self, column):
1979 raise TypeError, "unsupported operand type(s) for +: 'Datasheet.columns' and '%s'" % column.__class__.__name__
1980 def __iadd__(self, column):
1981 self.append(column); return self
1982 def __eq__(self, columns):
1983 return list(self) == columns
1984 def __ne__(self, columns):
1985 return not self.__eq__(self, columns)
1986
1987 def insert(self, j, column, default=None, field=None):
1988 """ Inserts the given column into the matrix.
1989 Missing rows at the end (bottom) will be filled with the default value.
1990 """
1991 try: column = [v for v in column]
1992 except:
1993 raise TypeError, "Datasheet.columns.insert(x): x must be list"
1994 column = column + [default] * (len(self._datasheet) - len(column))
1995 if len(column) > len(self._datasheet):
1996 self._datasheet.extend([[None]] * (len(column)-len(self._datasheet)))
1997 for i, row in enumerate(self._datasheet):
1998 row.insert(j, column[i])
1999 self._datasheet.__dict__["_m"] += 1 # Increase column count.
2000 # Add a new header.
2001 if self._datasheet.fields is not None:
2002 self._datasheet.fields += [(None, None)] * (len(self) - len(self._datasheet.fields) - 1)
2003 self._datasheet.fields.insert(j, field or (None, None))
2004
2005 def append(self, column, default=None, field=None):
2006 self.insert(len(self), column, default, field)
2007 def extend(self, columns, default=None, fields=[]):

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…