14
14
from typing import List
15
15
16
16
17
- _TABLE_METADATA_FIELD_NAME = ' _pandastable_metadata'
17
+ _TABLE_METADATA_FIELD_NAME = " _pandastable_metadata"
18
18
19
19
20
20
def _combine_metadata (data : List [str ]) -> str :
21
21
"""
22
22
A mock implementation for testing
23
23
"""
24
- return '+' .join (data )
24
+ return "+" .join (data )
25
25
26
26
27
27
class PandasTable (pd .DataFrame ):
@@ -37,49 +37,52 @@ def _constructor(self):
37
37
38
38
def __finalize__ (self , other , method = None , ** kwargs ):
39
39
"""
40
- This method be called after constructor to populate metadata
40
+ This method will be called after constructor to populate metadata
41
41
42
42
The "method" argument is subject to change and must be handled robustly.
43
43
"""
44
44
src = [other ] # more logic here in actual implementation
45
45
metadata = _combine_metadata (
46
- [d .get_metadata () for d in src if isinstance (d , PandasTable )])
46
+ [d .get_metadata () for d in src if isinstance (d , PandasTable )]
47
+ )
47
48
48
49
if not metadata :
49
- warn ('__finalize__ unable to combine metadata for method "{method}", '
50
- 'falling back to DataFrame' )
50
+ warn (
51
+ '__finalize__ unable to combine metadata for method "{method}", '
52
+ "falling back to DataFrame"
53
+ )
51
54
return pd .DataFrame (self )
52
55
object .__setattr__ (self , _TABLE_METADATA_FIELD_NAME , metadata )
53
56
return self
54
57
55
58
def get_metadata (self ):
56
59
metadata = getattr (self , _TABLE_METADATA_FIELD_NAME , None )
57
60
if metadata is None :
58
- warn (' PandasTable object not correctly initialized: no metadata' )
61
+ warn (" PandasTable object not correctly initialized: no metadata" )
59
62
return metadata
60
63
61
64
@staticmethod
62
- def from_table_data (df : pd .DataFrame , metadata ) -> ' PandasTable' :
65
+ def from_table_data (df : pd .DataFrame , metadata ) -> " PandasTable" :
63
66
df = PandasTable (df )
64
67
object .__setattr__ (df , _TABLE_METADATA_FIELD_NAME , metadata )
65
68
return df
66
69
67
70
68
71
@pytest .fixture
69
72
def dft ():
70
- df = pd .DataFrame ([[11 , 12 , 0 ], [21 , 22 , 0 ], [31 , 32 , 1 ]], columns = {'a' , 'b' , 'g' })
71
- return PandasTable .from_table_data (df , ' My metadata' )
73
+ df = pd .DataFrame ([[11 , 12 , 0 ], [21 , 22 , 0 ], [31 , 32 , 1 ]], columns = {"a" , "b" , "g" })
74
+ return PandasTable .from_table_data (df , " My metadata" )
72
75
73
76
74
77
def test_initial_metadata (dft ):
75
- assert dft .get_metadata () == ' My metadata'
78
+ assert dft .get_metadata () == " My metadata"
76
79
77
80
78
81
def test_basic_propagation (dft ):
79
82
gg = dft .loc [dft .g == 0 , :]
80
- assert gg .get_metadata () == ' My metadata'
83
+ assert gg .get_metadata () == " My metadata"
81
84
82
85
83
86
def test_groupby (dft ):
84
- gg = [ab for g , ab in dft .groupby ('g' )]
87
+ gg = [ab for g , ab in dft .groupby ("g" )]
85
88
assert gg [0 ].get_metadata () is not None
0 commit comments