@@ -112,6 +112,55 @@ class PlotlyJSONEncoder(json.JSONEncoder):
112
112
See PlotlyJSONEncoder.default for more implementation information.
113
113
114
114
"""
115
+
116
+ def default (self , obj ):
117
+ """
118
+ Accept an object (of unknown type) and try to encode with priority:
119
+ 1. builtin: user-defined objects
120
+ 2. sage: sage math cloud
121
+ 3. pandas: dataframes/series
122
+ 4. numpy: ndarrays
123
+ 5. datetime: time/datetime objects
124
+
125
+ Each method throws a NotEncoded exception if it fails.
126
+
127
+ The default method will only get hit if the object is not a type that
128
+ is naturally encoded by json:
129
+
130
+ Normal objects:
131
+ dict object
132
+ list, tuple array
133
+ str, unicode string
134
+ int, long, float number
135
+ True true
136
+ False false
137
+ None null
138
+
139
+ Extended objects:
140
+ float('nan') 'NaN'
141
+ float('infinity') 'Infinity'
142
+ float('-infinity') '-Infinity'
143
+
144
+ Therefore, we only anticipate either unknown iterables or values here.
145
+
146
+ """
147
+ # TODO: The ordering if these methods is *very* important. Is this OK?
148
+ encoding_methods = (
149
+ self .encode_as_plotly ,
150
+ self .encode_as_sage ,
151
+ self .encode_as_numpy ,
152
+ self .encode_as_pandas ,
153
+ self .encode_as_datetime ,
154
+ self .encode_as_date ,
155
+ self .encode_as_list # because some values have `tolist` do last.
156
+ )
157
+ for encoding_method in encoding_methods :
158
+ try :
159
+ return encoding_method (obj )
160
+ except NotEncodable :
161
+ pass
162
+ return json .JSONEncoder .default (self , obj )
163
+
115
164
@staticmethod
116
165
def encode_as_plotly (obj ):
117
166
"""Attempt to use a builtin `ploty_to_json` method."""
@@ -185,54 +234,6 @@ def encode_as_date(obj):
185
234
else :
186
235
return iso_to_plotly_time_string (time_string )
187
236
188
- def default (self , obj ):
189
- """
190
- Accept an object (of unknown type) and try to encode with priority:
191
- 1. builtin: user-defined objects
192
- 2. sage: sage math cloud
193
- 3. pandas: dataframes/series
194
- 4. numpy: ndarrays
195
- 5. datetime: time/datetime objects
196
-
197
- Each method throws a NotEncoded exception if it fails.
198
-
199
- The default method will only get hit if the object is not a type that
200
- is naturally encoded by json:
201
-
202
- Normal objects:
203
- dict object
204
- list, tuple array
205
- str, unicode string
206
- int, long, float number
207
- True true
208
- False false
209
- None null
210
-
211
- Extended objects:
212
- float('nan') 'NaN'
213
- float('infinity') 'Infinity'
214
- float('-infinity') '-Infinity'
215
-
216
- Therefore, we only anticipate either unknown iterables or values here.
217
-
218
- """
219
- # TODO: The ordering if these methods is *very* important. Is this OK?
220
- encoding_methods = (
221
- self .encode_as_plotly ,
222
- self .encode_as_sage ,
223
- self .encode_as_numpy ,
224
- self .encode_as_pandas ,
225
- self .encode_as_datetime ,
226
- self .encode_as_date ,
227
- self .encode_as_list # because some values have `tolist` do last.
228
- )
229
- for encoding_method in encoding_methods :
230
- try :
231
- return encoding_method (obj )
232
- except NotEncodable :
233
- pass
234
- return json .JSONEncoder .default (self , obj )
235
-
236
237
237
238
### unicode stuff ###
238
239
def decode_unicode (coll ):
0 commit comments