update_classic_status: ensure fields are correctly ordered

On some systems it seems the order of fields in a values() query aren't
guaranteed, so in order to avoid the contents dancing around too much,
explicitly write out the fields in the order we expect them to be in.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2019-09-24 13:58:53 +12:00
parent 21a7a550eb
commit c08d96607c

View File

@ -17,6 +17,7 @@ import re
import utils import utils
import logging import logging
import json import json
from collections import OrderedDict
logger = utils.logger_create('LayerIndexComparisonUpdate') logger = utils.logger_create('LayerIndexComparisonUpdate')
@ -28,13 +29,17 @@ def export(args, layerbranch, skiplist):
from layerindex.models import ClassicRecipe from layerindex.models import ClassicRecipe
from django.db.models import F from django.db.models import F
jscoverlist = [] jscoverlist = []
recipequery = ClassicRecipe.objects.filter(layerbranch=layerbranch, deleted=False).order_by('pn').values( # These shenanigans are necessary because values() order is not
'pn', 'cover_pn', 'cover_status', 'cover_comment', 'classic_category', cover_layer=F('cover_layerbranch__layer__name')) # guaranteed and we can't use values_list because that won't work with our
# extra cover_layer field.
fields = ['pn', 'cover_pn', 'cover_status', 'cover_comment', 'classic_category']
recipequery = ClassicRecipe.objects.filter(layerbranch=layerbranch, deleted=False).order_by('pn').values(*fields, cover_layer=F('cover_layerbranch__layer__name'))
fields.append('cover_layer') # need to add this after the call
for recipe in recipequery: for recipe in recipequery:
if recipe['pn'] in skiplist: if recipe['pn'] in skiplist:
logger.debug('Skipping %s' % recipe.pn) logger.debug('Skipping %s' % recipe.pn)
continue continue
jscoverlist.append(recipe) jscoverlist.append(OrderedDict([(k,recipe[k]) for k in fields]))
jsdata = {'coverlist': jscoverlist} jsdata = {'coverlist': jscoverlist}
with open(args.export_data, 'w') as f: with open(args.export_data, 'w') as f:
json.dump(jsdata, f, indent=4) json.dump(jsdata, f, indent=4)