Skip to content

Commit 38debb7

Browse files
committed
TST: more tests, added ncols to table output in printing
1 parent 375248e commit 38debb7

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

pandas/io/pytables.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ def __repr__(self):
233233
for k in self.keys():
234234
s = self.get_storer(k)
235235
if s is not None:
236-
keys.append(str(s.pathname))
237-
values.append(str(s))
236+
keys.append(str(s.pathname or k))
237+
values.append(str(s or 'invalid_HDFStore node'))
238238

239239
output += adjoin(12, keys, values)
240240
else:
@@ -671,15 +671,22 @@ def copy(self, file, mode = 'w', propindexes = True, keys = None, complib = None
671671
def _create_storer(self, group, value = None, table = False, append = False, **kwargs):
672672
""" return a suitable Storer class to operate """
673673

674+
def error(t):
675+
raise Exception("cannot properly create the storer for: [%s] [group->%s,value->%s,table->%s,append->%s,kwargs->%s]" %
676+
(t,group,type(value),table,append,kwargs))
677+
674678
pt = getattr(group._v_attrs,'pandas_type',None)
675679
tt = getattr(group._v_attrs,'table_type',None)
676680

677-
# infer the typ from the passed value
681+
# infer the pt from the passed value
678682
if pt is None:
679683
if value is None:
680684
raise Exception("cannot create a storer if the object is not existing nor a value are passed")
681685

682-
pt = _TYPE_MAP[type(value)]
686+
try:
687+
pt = _TYPE_MAP[type(value)]
688+
except:
689+
error('_TYPE_MAP')
683690

684691
# we are actually a table
685692
if table or append:
@@ -690,8 +697,7 @@ def _create_storer(self, group, value = None, table = False, append = False, **k
690697
try:
691698
return globals()[_STORER_MAP[pt]](self, group, **kwargs)
692699
except:
693-
raise Exception("cannot properly create the storer for: [group->%s,value->%s,table->%s,append->%s,kwargs->%s]" %
694-
(group,value,table,append,kwargs))
700+
error('_STORER_MAP')
695701

696702
# existing node (and must be a table)
697703
if tt is None:
@@ -718,10 +724,9 @@ def _create_storer(self, group, value = None, table = False, append = False, **k
718724
pass
719725

720726
try:
721-
return globals()[_TABLE_MAP[tt or 'appendable_panel']](self, group, **kwargs)
727+
return globals()[_TABLE_MAP[tt]](self, group, **kwargs)
722728
except:
723-
raise Exception("cannot properly create the storer for: [group->%s,value->%s,table->%s,append->%s,kwargs->%s]" %
724-
(group,value,table,append,kwargs))
729+
error('_TABLE_MAP')
725730

726731
def _write_to_group(self, key, value, index=True, table=False, append=False, complib=None, **kwargs):
727732
group = self.get_node(key)
@@ -1834,12 +1839,13 @@ def __repr__(self):
18341839
if self.is_old_version:
18351840
ver = "[%s]" % '.'.join([ str(x) for x in self.version ])
18361841

1837-
return "%-12.12s%s (typ->%s,nrows->%s,indexers->[%s]%s)" % (self.pandas_type,
1838-
ver,
1839-
self.table_type_short,
1840-
self.nrows,
1841-
','.join([ a.name for a in self.index_axes ]),
1842-
dc)
1842+
return "%-12.12s%s (typ->%s,nrows->%s,ncols->%s,indexers->[%s]%s)" % (self.pandas_type,
1843+
ver,
1844+
self.table_type_short,
1845+
self.nrows,
1846+
self.ncols,
1847+
','.join([ a.name for a in self.index_axes ]),
1848+
dc)
18431849

18441850
def __getitem__(self, c):
18451851
""" return the axis for c """
@@ -1887,6 +1893,11 @@ def description(self):
18871893
def axes(self):
18881894
return itertools.chain(self.index_axes, self.values_axes)
18891895

1896+
@property
1897+
def ncols(self):
1898+
""" the number of total columns in the values axes """
1899+
return sum([ len(a.values) for a in self.values_axes ])
1900+
18901901
@property
18911902
def is_transposed(self):
18921903
return False

pandas/io/tests/test_pytables.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ def test_repr(self):
8989
df.ix[3:6,['obj1']] = np.nan
9090
df = df.consolidate().convert_objects()
9191
self.store['df'] = df
92+
93+
# make a random group in hdf space
94+
self.store.handle.createGroup(self.store.handle.root,'bah')
95+
9296
repr(self.store)
9397
str(self.store)
9498

@@ -776,6 +780,20 @@ def test_append_hierarchical(self):
776780

777781
def test_append_misc(self):
778782

783+
# unsuported data types for non-tables
784+
p4d = tm.makePanel4D()
785+
self.assertRaises(Exception, self.store.put,'p4d',p4d)
786+
787+
# unsupported data type for table
788+
s = tm.makeStringSeries()
789+
self.assertRaises(Exception, self.store.append,'s',s)
790+
791+
# unsuported data types
792+
self.assertRaises(Exception, self.store.put,'abc',None)
793+
self.assertRaises(Exception, self.store.put,'abc','123')
794+
self.assertRaises(Exception, self.store.put,'abc',123)
795+
self.assertRaises(Exception, self.store.put,'abc',np.arange(5))
796+
779797
df = tm.makeDataFrame()
780798
self.store.append('df', df, chunksize=1)
781799
result = self.store.select('df')

0 commit comments

Comments
 (0)