add script for cd13 transfer of reponse type

This commit is contained in:
Benjamin Dauvergne 2020-09-11 15:04:15 +02:00
parent ecb6aed21f
commit 310ce4afad
2 changed files with 202 additions and 0 deletions

51
cd13/dump-cd13.py Normal file
View File

@ -0,0 +1,51 @@
import json
import sys
output_filename = sys.argv[1]
print('output to', output_filename)
thematique_slug = '13ave-thematiques'
dispositif_slug = '13ave-dispositifs'
reponse_type_slug = '13ave-dga-p-reponses-types'
from wcs.carddef import CardDef
data = {}
Thematique = CardDef.get_by_urlname(thematique_slug).data_class()
Dispositif = CardDef.get_by_urlname(dispositif_slug).data_class()
ReponseType = CardDef.get_by_urlname(reponse_type_slug).data_class()
data['thematique'] = [{
'digest': thematique.digest,
'name': thematique.data[thematique.formdef.fields[0].id]
} for thematique in Thematique.select()]
dispositifs = Dispositif.select()
for dispositif in dispositifs:
# reconstruct 2_display
field_id = str(dispositif.formdef.fields[1].id)
dispositif.data[field_id + '_display'] = dispositif.formdef.fields[1].store_display_value(dispositif.data, field_id)
dispositif.set_auto_fields()
data['dispositif'] = [{
'digest': dispositif.digest,
'name': dispositif.data[dispositif.formdef.fields[0].id],
'thematique': dispositif.data[dispositif.formdef.fields[1].id + '_display'],
} for dispositif in dispositifs]
data['reponse_type'] = []
for reponse_type in ReponseType.select():
# reconstruct 2_display
field_id = str(reponse_type.formdef.fields[1].id)
reponse_type.data[field_id + '_display'] = reponse_type.formdef.fields[1].store_display_value(reponse_type.data, field_id)
data['reponse_type'].append({
'digest': reponse_type.digest + str(reponse_type.data[reponse_type.formdef.fields[1].id + '_display']),
'title': reponse_type.data[reponse_type.formdef.fields[0].id],
'dispositif': reponse_type.data[reponse_type.formdef.fields[1].id + '_display'],
'message': reponse_type.data[reponse_type.formdef.fields[2].id],
})
with open(output_filename, 'w') as fd:
json.dump(data, fd, indent=2)

151
cd13/load-cd13.py Normal file
View File

@ -0,0 +1,151 @@
import json
import sys
input_filename = sys.argv[1]
print('load from', input_filename)
with open(input_filename) as fd:
data = json.load(fd)
thematique_slug = '13ave-thematiques'
dispositif_slug = '13ave-dispositifs'
reponse_type_slug = '13ave-dga-p-reponses-types'
from wcs.carddef import CardDef
ThematiqueDef = CardDef.get_by_urlname(thematique_slug)
Thematique = ThematiqueDef.data_class()
DispositifDef = CardDef.get_by_urlname(dispositif_slug)
Dispositif = DispositifDef.data_class()
ReponseTypeDef = CardDef.get_by_urlname(reponse_type_slug)
ReponseType = ReponseTypeDef.data_class()
indexes = {}
indexes['thematique'] = {thematique.digest: thematique for thematique in Thematique.select()}
for thematique in data['thematique']:
digest = thematique['digest']
if digest in indexes['thematique']:
# print('Thematique %s already exists.' % digest)
pass
else:
new_thematique = Thematique()
new_thematique.data = {ThematiqueDef.fields[0].id: thematique['name']}
new_thematique.just_created()
new_thematique.store()
assert new_thematique.digest == digest
new_thematique.perform_workflow()
print('Thematique %s created.' % digest)
indexes['thematique'][digest] = new_thematique
indexes['dispositif'] = {dispositif.digest: dispositif for dispositif in Dispositif.select()}
for dispositif in data['dispositif']:
digest = dispositif['digest']
name = dispositif['name']
store = False
if digest in indexes['dispositif']:
new_dispositif = indexes['dispositif'][digest]
new = False
else:
store = True
new = True
new_dispositif = Dispositif()
new_dispositif.data = {DispositifDef.fields[0].id: name}
print('Dispositif %s created.' % digest)
thematique = dispositif['thematique'] and indexes['thematique'][dispositif['thematique']]
field = DispositifDef.fields[1]
field_id = str(field.id)
if thematique:
if new_dispositif.data.get(field_id) != str(thematique.id):
if not store:
print('Thematique of dispositif %s changed, updating.' % name)
store = True
new_dispositif.data[field_id] = str(thematique.id)
new_dispositif.data[field_id + '_display'] = field.store_display_value(new_dispositif.data, field_id)
new_dispositif.data[field_id + '_structured'] = field.store_structured_value(new_dispositif.data, field_id)
else:
if new_dispositif.data.get(field_id):
if not store:
print('Thematique of dispositif %s changed, updating.' % name)
store = True
new_dispositif.data[field_id] = None
new_dispositif.data.pop(field_id + '_display')
new_dispositif.data.pop(field_id + '_structured')
indexes['dispositif'][digest] = new_dispositif
if store:
if new:
new_dispositif.just_created()
new_dispositif.store()
assert new_dispositif.digest == digest
if new:
new_dispositif.perform_workflow()
else:
pass
# print('Dispositif %s already exists.' % digest)
indexes['reponse_type'] = {reponse_type.digest + str(reponse_type.data[reponse_type.formdef.fields[1].id + '_display']): reponse_type for reponse_type in ReponseType.select()}
for reponse_type in data['reponse_type']:
digest = reponse_type['digest']
title = reponse_type['title']
dispositif_name = reponse_type['dispositif']
message = reponse_type['message']
if dispositif_name and dispositif_name not in indexes['dispositif']:
print('Error: dispositif "%s" is unknown in reponse type "%s".' % (dispositif_name, title))
continue
dispositif = indexes['dispositif'].get(dispositif_name)
if digest in indexes['reponse_type']:
store = False
new_reponse_type = indexes['reponse_type'][digest]
else:
store = True
new = True
new_reponse_type = ReponseType()
new_reponse_type.data = {
ReponseTypeDef.fields[0].id: title,
ReponseTypeDef.fields[1].id: dispositif and str(dispositif.id),
ReponseTypeDef.fields[2].id: message,
}
if not store:
if new_reponse_type.data[ReponseTypeDef.fields[2].id] != message:
store = True
new_reponse_type.data[ReponseTypeDef.fields[2].id] = message
print('Reponse type "%s" message differs, updating.' % digest)
if new_reponse_type.data[ReponseTypeDef.fields[1].id] and not dispositif:
store = True
new_reponse_type.data[ReponseTypeDef.fields[1].id] = None
new_reponse_type.data.pop(ReponseTypeDef.fields[1].id + '_display')
new_reponse_type.data.pop(ReponseTypeDef.fields[1].id + '_structured')
print('Reponse type "%s" dispositif differs, updating.' % digest)
if dispositif and new_reponse_type.data[ReponseTypeDef.fields[1].id] != str(dispositif.id):
store = True
print('Reponse type "%s" dispositif differs, updating. %r %r' % (digest, new_reponse_type.data[ReponseTypeDef.fields[1].id], dispositif.id))
new_reponse_type.data[ReponseTypeDef.fields[1].id] = str(dispositif.id)
if store and dispositif:
new_reponse_type.data[ReponseTypeDef.fields[1].id + '_display'] = ReponseTypeDef.fields[1].store_display_value(
new_reponse_type.data, ReponseTypeDef.fields[1].id)
new_reponse_type.data[ReponseTypeDef.fields[1].id + '_structured'] = ReponseTypeDef.fields[1].store_structured_value(
new_reponse_type.data, ReponseTypeDef.fields[1].id)
if store:
if new:
new_reponse_type.just_created()
new_reponse_type.store()
if new:
new_reponse_type.perform_workflow()
else:
# pass
pass
# print('Reponse type %s already exists.' % digest)
indexes['reponse_type'][digest] = new_reponse_type