@@ -320,37 +320,14 @@ def get(self, request, countryShortCode, state, raw=None):
320
320
return Response (serializer .data )
321
321
322
322
323
- class StateDailyListView ( APIView ):
323
+ class BaseDailyView ( object ):
324
324
325
- """州按天返回列表"""
326
-
327
- def get_object (self , countryShortCode , state ):
328
- state = models .State .objects .filter (
329
- countryShortCode = countryShortCode , state = state ).first ()
330
- if state is None :
331
- raise Http404
332
- return state
333
-
334
- @method_decorator (cache_page (
335
- CACHE_PAGE_TIMEOUT , key_prefix = 'state-daily-list' ))
336
- def get (self , request , countryShortCode , state , raw = None ):
337
- inst = self .get_object (countryShortCode , state )
338
- result = inst .dailyData
339
- result = json .loads (result )
340
- if raw == 'raw' :
341
- return Response (result )
342
- data = []
343
- for r in result :
344
- data .append (self .format (inst , r ))
345
- serializer = serializers .StateDailySerializer (data , many = True )
346
- return Response (serializer .data )
347
-
348
- def format (self , inst , data ):
325
+ def format (self , countryShortCode , stateName , data ):
349
326
item = {}
350
327
item ['date' ] = data ['date' ]
351
328
item ['state' ] = data ['state' ]
352
- item ['stateName' ] = inst . stateName
353
- item ['countryShortCode' ] = inst . countryShortCode
329
+ item ['stateName' ] = stateName
330
+ item ['countryShortCode' ] = countryShortCode
354
331
355
332
item ['confirmedCount' ] = data .get ('positive' )
356
333
item ['currentConfirmedCount' ] = self .get_current_confirmed (data )
@@ -376,7 +353,34 @@ def get_current_confirmed_incr(self, data):
376
353
death = data ['deathIncrease' ] if data .get ('deathIncrease' ) else 0
377
354
return positive - death
378
355
379
- class StateDailyListByNameView (StateDailyListView ):
356
+
357
+ class StateDailyListView (APIView , BaseDailyView ):
358
+
359
+ """州按天返回列表"""
360
+
361
+ def get_object (self , countryShortCode , state ):
362
+ state = models .State .objects .filter (
363
+ countryShortCode = countryShortCode , state = state ).first ()
364
+ if state is None :
365
+ raise Http404
366
+ return state
367
+
368
+ @method_decorator (cache_page (
369
+ CACHE_PAGE_TIMEOUT , key_prefix = 'state-daily-list' ))
370
+ def get (self , request , countryShortCode , state , raw = None ):
371
+ inst = self .get_object (countryShortCode , state )
372
+ result = inst .dailyData
373
+ result = json .loads (result )
374
+ if raw == 'raw' :
375
+ return Response (result )
376
+ stateName = inst .stateName
377
+ data = []
378
+ for r in result :
379
+ data .append (self .format (countryShortCode , stateName , r ))
380
+ serializer = serializers .StateDailySerializer (data , many = True )
381
+ return Response (serializer .data )
382
+
383
+ class StateDailyListByNameView (APIView , BaseDailyView ):
380
384
381
385
def get_object (self , countryShortCode , stateName ):
382
386
state = models .State .objects .filter (
@@ -393,8 +397,54 @@ def get(self, request, countryShortCode, stateName, raw=None):
393
397
result = json .loads (result )
394
398
if raw == 'raw' :
395
399
return Response (result )
400
+ stateName = inst .stateName
396
401
data = []
397
402
for r in result :
398
- data .append (self .format (inst , r ))
403
+ data .append (self .format (countryShortCode , stateName , r ))
399
404
serializer = serializers .StateDailySerializer (data , many = True )
400
- return Response (serializer .data )
405
+ return Response (serializer .data )
406
+
407
+
408
+ class StateListDailyListView (ListAPIView , BaseDailyView ):
409
+
410
+ serializer_class = serializers .StateDailyListSerializer
411
+ filter_class = filters .StateFilter
412
+
413
+ def get_queryset (self ):
414
+ countryShortCode = self .kwargs ['countryShortCode' ]
415
+ return models .State .objects .filter (
416
+ countryShortCode = countryShortCode ).order_by ('state' )
417
+
418
+ def list (self , request , * args , ** kwargs ):
419
+ countryShortCode = kwargs ['countryShortCode' ]
420
+ queryset = self .filter_queryset (self .get_queryset ())
421
+
422
+ if kwargs .get ('raw' ) == 'raw' :
423
+ self .serializer_class = serializers .StateRawSerializer
424
+
425
+ result = []
426
+ page = self .paginate_queryset (queryset )
427
+ if page is not None :
428
+ serializer = self .get_serializer (page , many = True )
429
+ for item in serializer .data :
430
+ stateName = item ['stateName' ]
431
+ dailyData = json .loads (item ['dailyData' ])
432
+ for daily in dailyData :
433
+ result .append (
434
+ self .format (countryShortCode , stateName , daily ))
435
+ return self .get_paginated_response (result )
436
+
437
+ serializer = self .get_serializer (queryset , many = True )
438
+ for item in serializer .data :
439
+ stateName = item ['stateName' ]
440
+ dailyData = json .loads (item ['dailyData' ])
441
+ for daily in dailyData :
442
+ result .append (
443
+ self .format (countryShortCode , stateName , daily ))
444
+ return Response (result )
445
+
446
+ @method_decorator (cache_page (
447
+ CACHE_PAGE_TIMEOUT , key_prefix = 'state-list-daily-list' ))
448
+ def dispatch (self , * args , ** kwargs ):
449
+ return super (StateListDailyListView , self ).dispatch (* args , ** kwargs )
450
+
0 commit comments