Changeset 844
- Timestamp:
- 03/25/11 16:46:17 (14 months ago)
- Files:
-
- 1 modified
-
trunk/lib/core.py (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/core.py
r833 r844 4505 4505 self._file.seek(self._datLoc) 4506 4506 data = GroupData(_get_tbdata(self)) 4507 data. columns = data._coldefs = self.columns4507 data._coldefs = weakref.ref(self.columns) 4508 4508 data.formats = self.columns.formats 4509 4509 data.parnames = self.columns._pnames … … 5667 5667 names=tmp.names, shape=nrows)) 5668 5668 5669 hdu.data._coldefs = hdu.columns5669 hdu.data._coldefs = weakref.ref(hdu.columns) 5670 5670 hdu.data.formats = hdu.columns.formats 5671 5671 … … 5887 5887 self._nfields = len(self.dtype.names) 5888 5888 self._convert = [None]*len(self.dtype.names) 5889 self. columns = self._coldefs = None5889 self.__coldefs = None 5890 5890 self._gap = 0 5891 5891 self.names = list(self.dtype.names) … … 5902 5902 if isinstance(obj, FITS_rec): 5903 5903 self._convert = obj._convert 5904 self. columns = self._coldefs = obj._coldefs5904 self.__coldefs = obj.__coldefs 5905 5905 self._nfields = obj._nfields 5906 5906 self.names = obj.names … … 5917 5917 self._file = getattr(obj,'_file', None) 5918 5918 5919 self. columns = self._coldefs = None5919 self.__coldefs = None 5920 5920 self._gap = 0 5921 5921 self.names = list(obj.dtype.names) … … 5923 5923 self.formats = None 5924 5924 5925 attrs=['_convert', '_coldefs', 'names', '_names', '_gap', 'formats'] 5925 attrs=['_convert', '__coldefs', 'names', '_names', '_gap', 5926 'formats'] 5926 5927 for attr in attrs: 5927 5928 if hasattr(obj, attr): … … 5931 5932 setattr(self, attr, value) 5932 5933 5934 def columns(self): 5935 """ 5936 Users may find it convenient to access the columns through the data 5937 object, and might not notice they can since _coldefs is 'private'. Go 5938 ahead and give them read access to it. (See ticket #44.) 5939 """ 5940 5941 return self._coldefs 5942 columns = property(columns) 5943 5944 def _get_coldefs(self): 5945 if isinstance(self.__coldefs, weakref.ReferenceType): 5946 return self.__coldefs() 5947 else: 5948 return self.__coldefs 5949 5950 def _set_coldefs(self, val): 5951 self.__coldefs = val 5952 _coldefs = property(_get_coldefs, _set_coldefs) 5953 5933 5954 def _clone(self, shape): 5934 5955 """ … … 5951 5972 elif isinstance(key, slice) or isinstance(key,np.ndarray): 5952 5973 out = rec.recarray.__getitem__(self, key) 5953 out. columns = out._coldefs = ColDefs(self._coldefs)5974 out._coldefs = ColDefs(self._coldefs) 5954 5975 arrays = [] 5955 5976 out._convert = [None]*len(self.dtype.names) … … 6590 6611 raise TypeError, "table data has incorrect type" 6591 6612 6613 #def __del__(self): 6614 #for c in self.columns: 6615 # if hasattr(c, 'array'): 6616 # del c.array 6617 # if hasattr(self.data, '_coldefs'): 6618 # del self.data._coldefs 6619 6592 6620 def __getattr__(self, attr): 6593 6621 """ … … 6599 6627 self._file.seek(self._datLoc) 6600 6628 data = _get_tbdata(self) 6601 data. columns = data._coldefs = self.columns6629 data._coldefs = weakref.ref(self.columns) 6602 6630 data.formats = self.columns.formats 6603 6631 # print "Got data?" … … 7995 8023 formats=",".join(cols._recformats), 7996 8024 names=cols.names, shape=nrows)) 7997 self.compData._coldefs = self.columns8025 self.compData._coldefs = weakref.ref(self.columns) 7998 8026 self.compData.formats = self.columns.formats 7999 8027 … … 11161 11189 hdulist, _ext = _getext(filename, mode, *ext, **extkeys) 11162 11190 hdu = hdulist[_ext] 11191 # Before hdu goes out of scope, convert the hdu.data._coldefs weakref to a 11192 # hard reference 11193 if hasattr(hdu.data, '_coldefs'): 11194 hdu.data._coldefs = hdu.columns 11163 11195 _data = hdu.data 11164 11196 if _data is None and isinstance(_ext, _Zero):