@@ -197,11 +197,42 @@ def assertExportedXml(self, items, rows, settings=None):
197
197
got_rows = [{e .tag : e .text for e in it } for it in root .findall ('item' )]
198
198
self .assertEqual (rows , got_rows )
199
199
200
+ def _load_until_eof (self , data , load_func ):
201
+ bytes_output = BytesIO (data )
202
+ result = []
203
+ while True :
204
+ try :
205
+ result .append (load_func (bytes_output ))
206
+ except EOFError :
207
+ break
208
+ return result
209
+
210
+ @defer .inlineCallbacks
211
+ def assertExportedPickle (self , items , rows , settings = None ):
212
+ settings = settings or {}
213
+ settings .update ({'FEED_FORMAT' : 'pickle' })
214
+ data = yield self .exported_data (items , settings )
215
+ expected = [{k : v for k , v in row .items () if v } for row in rows ]
216
+ import pickle
217
+ result = self ._load_until_eof (data , load_func = pickle .load )
218
+ self .assertEqual (expected , result )
219
+
220
+ @defer .inlineCallbacks
221
+ def assertExportedMarshal (self , items , rows , settings = None ):
222
+ settings = settings or {}
223
+ settings .update ({'FEED_FORMAT' : 'marshal' })
224
+ data = yield self .exported_data (items , settings )
225
+ expected = [{k : v for k , v in row .items () if v } for row in rows ]
226
+ import marshal
227
+ result = self ._load_until_eof (data , load_func = marshal .load )
228
+ self .assertEqual (expected , result )
229
+
200
230
@defer .inlineCallbacks
201
231
def assertExported (self , items , header , rows , settings = None , ordered = True ):
202
232
yield self .assertExportedCsv (items , header , rows , settings , ordered )
203
233
yield self .assertExportedJsonLines (items , rows , settings )
204
234
yield self .assertExportedXml (items , rows , settings )
235
+ yield self .assertExportedPickle (items , rows , settings )
205
236
206
237
@defer .inlineCallbacks
207
238
def test_export_items (self ):
0 commit comments