3
3
from io import BytesIO , StringIO
4
4
from itertools import islice
5
5
import os
6
- from typing import IO , Any , Callable , List , Optional , Type
6
+ from typing import IO , Any , Callable , List , Optional , Tuple , Type
7
7
8
8
import numpy as np
9
9
@@ -111,6 +111,8 @@ def to_json(
111
111
112
112
113
113
class Writer :
114
+ _default_orient : str
115
+
114
116
def __init__ (
115
117
self ,
116
118
obj ,
@@ -126,8 +128,7 @@ def __init__(
126
128
self .obj = obj
127
129
128
130
if orient is None :
129
- # error: "Writer" has no attribute "_default_orient"
130
- orient = self ._default_orient # type: ignore[attr-defined]
131
+ orient = self ._default_orient
131
132
132
133
self .orient = orient
133
134
self .date_format = date_format
@@ -777,8 +778,8 @@ def read(self):
777
778
obj = self ._get_object_parser (lines_json )
778
779
else :
779
780
data = ensure_str (self .data )
780
- data = data .split ("\n " )
781
- obj = self ._get_object_parser (self ._combine_lines (data ))
781
+ data_lines = data .split ("\n " )
782
+ obj = self ._get_object_parser (self ._combine_lines (data_lines ))
782
783
else :
783
784
obj = self ._get_object_parser (self .data )
784
785
self .close ()
@@ -848,6 +849,8 @@ def __next__(self):
848
849
849
850
850
851
class Parser :
852
+ _split_keys : Tuple [str , ...]
853
+ _default_orient : str
851
854
852
855
_STAMP_UNITS = ("s" , "ms" , "us" , "ns" )
853
856
_MIN_STAMPS = {
@@ -873,6 +876,7 @@ def __init__(
873
876
874
877
if orient is None :
875
878
orient = self ._default_orient
879
+
876
880
self .orient = orient
877
881
878
882
self .dtype = dtype
@@ -902,8 +906,8 @@ def check_keys_split(self, decoded):
902
906
"""
903
907
bad_keys = set (decoded .keys ()).difference (set (self ._split_keys ))
904
908
if bad_keys :
905
- bad_keys = ", " .join (bad_keys )
906
- raise ValueError (f"JSON data had unexpected key(s): { bad_keys } " )
909
+ bad_keys_joined = ", " .join (bad_keys )
910
+ raise ValueError (f"JSON data had unexpected key(s): { bad_keys_joined } " )
907
911
908
912
def parse (self ):
909
913
@@ -922,14 +926,22 @@ def parse(self):
922
926
self ._try_convert_types ()
923
927
return self .obj
924
928
929
+ def _parse_numpy (self ):
930
+ raise AbstractMethodError (self )
931
+
932
+ def _parse_no_numpy (self ):
933
+ raise AbstractMethodError (self )
934
+
925
935
def _convert_axes (self ):
926
936
"""
927
937
Try to convert axes.
928
938
"""
929
- for axis_name in self .obj ._AXIS_ORDERS :
939
+ obj = self .obj
940
+ assert obj is not None # for mypy
941
+ for axis_name in obj ._AXIS_ORDERS :
930
942
new_axis , result = self ._try_convert_data (
931
943
name = axis_name ,
932
- data = self . obj ._get_axis (axis_name ),
944
+ data = obj ._get_axis (axis_name ),
933
945
use_dtypes = False ,
934
946
convert_dates = True ,
935
947
)
@@ -1083,7 +1095,11 @@ def _parse_numpy(self):
1083
1095
self .check_keys_split (decoded )
1084
1096
self .obj = create_series_with_explicit_dtype (** decoded )
1085
1097
elif self .orient in ["columns" , "index" ]:
1086
- self .obj = create_series_with_explicit_dtype (* data , dtype_if_empty = object )
1098
+ # error: "create_series_with_explicit_dtype"
1099
+ # gets multiple values for keyword argument "dtype_if_empty
1100
+ self .obj = create_series_with_explicit_dtype (
1101
+ * data , dtype_if_empty = object
1102
+ ) # type:ignore[misc]
1087
1103
else :
1088
1104
self .obj = create_series_with_explicit_dtype (data , dtype_if_empty = object )
1089
1105
@@ -1175,9 +1191,12 @@ def _process_converter(self, f, filt=None):
1175
1191
if filt is None :
1176
1192
filt = lambda col , c : True
1177
1193
1194
+ obj = self .obj
1195
+ assert obj is not None # for mypy
1196
+
1178
1197
needs_new_obj = False
1179
1198
new_obj = dict ()
1180
- for i , (col , c ) in enumerate (self . obj .items ()):
1199
+ for i , (col , c ) in enumerate (obj .items ()):
1181
1200
if filt (col , c ):
1182
1201
new_data , result = f (col , c )
1183
1202
if result :
@@ -1188,9 +1207,9 @@ def _process_converter(self, f, filt=None):
1188
1207
if needs_new_obj :
1189
1208
1190
1209
# possibly handle dup columns
1191
- new_obj = DataFrame (new_obj , index = self . obj .index )
1192
- new_obj .columns = self . obj .columns
1193
- self .obj = new_obj
1210
+ new_frame = DataFrame (new_obj , index = obj .index )
1211
+ new_frame .columns = obj .columns
1212
+ self .obj = new_frame
1194
1213
1195
1214
def _try_convert_types (self ):
1196
1215
if self .obj is None :
0 commit comments