braine-l-alleud: scripts pour configurer les tuiles (#59131)

This commit is contained in:
Nicolas Roche 2021-12-15 12:03:23 +01:00
parent 9d7f282df4
commit 54ea00314c
6 changed files with 220 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*~

1
braine-l-alleud/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
topics.json

View File

@ -0,0 +1,39 @@
#!/usr/bin/env python
# create topics.json having vocabulary for category_and_topics field
# ex:
# $ ssh passerelle.node2.test.saas.entrouvert.org
# $ sudo -u passerelle passerelle-manage shell -d passerelle-braine-l-alleud.test.entrouvert.org < 00_passerelle_list_topics.py
import json
from passerelle.apps.plone_restapi.models import PloneRestApi
# connectors to Plone types having a category_and_topics index
settings = {
'news-dev': {
'vocabulary_id': 'imio.news.vocabulary.NewsCategoriesAndTopicsVocabulary',
'plone_type': 'imio.news.NewsItem',
'uri': 'belleville',
'description': "Actualités %s",
'cell_key': 'actualites',
},
'events-dev': {
'vocabulary_id': 'imio.events.vocabulary.EventsCategoriesAndTopicsVocabulary',
'plone_type': 'imio.events.Event',
'uri': 'bruxelles/administration-communale-de-bruxelles',
'description': "Événements %s",
'cell_key': 'evenements',
},
}
# get values for category_and_topics fields
for key, value in settings.items():
vocabulary_id = value.pop('vocabulary_id')
con = PloneRestApi.objects.get(slug=key)
resp = con.request(uri='@vocabularies', uid=vocabulary_id)
value['field_values'] = resp['items']
with open('topics.json', 'w') as fd:
json.dump(settings, fd, indent=2)

View File

@ -0,0 +1,75 @@
#!/usr/bin/env python
# ex:
# $ ssh passerelle.node2.test.saas.entrouvert.org
# $ passerelle-manage shell -d passerelle-braine-l-alleud.test.entrouvert.org< 01_passerelle_add_con_queries.py
import json
from passerelle.apps.plone_restapi.models import PloneRestApi
# connector query parameters to add
settings = {
'delib-dev': {
'deliberations': {
'name': 'Délibérations',
'description': "Soyez informés dès que les décisions publiques du Conseil communal auront été approuvées par ses membres.",
'uri': 'belle-ville',
'filter_expression': 'portal_type=Meeting',
'sort': 'date_time',
},
},
'bla-dev': {
'avis_et_enquete': {
'name': "Avis d'urbanisme",
'description': "Avis d'urbanisme",
'uri': 'ma-commune/services-communaux/urbanisme-et-amenagement-du-territoire/avis-et-enquetes/avis-2021',
'filter_expression': 'portal_type=imio.smartweb.Page\r\nreview_state=published\r\ntaxonomy_page_category=avis_et_enquete\r\ntopics=habitat_town_planning',
'sort': 'effective',
},
'info_travaux': {
'name': 'Infos travaux',
'description': 'Informations des travaux',
'uri': 'ma-commune/services-communaux/travaux-et-patrimoine/info-travaux',
'filter_expression': 'portal_type=imio.smartweb.Page\r\nreview_state=published\r\ntaxonomy_page_category=info_travaux',
'sort': 'effective',
},
},
}
# add topics to settings
with open('topics.json') as fd:
topics = json.load(fd)
for con_slug, topic in topics.items():
if not settings.get(con_slug):
settings[con_slug] = {}
for field_value in topic['field_values']:
query_slug = field_value['token']
settings[con_slug][query_slug] = {
'con_slug': con_slug,
'name': field_value['title'],
'description': topic['description'] % field_value['title'].lower(),
'uri': topic['uri'],
'filter_expression': 'portal_type=%s\r\nreview_state=published\r\ncategory_and_topics=%s' % (
topic['plone_type'],
query_slug,
),
'sort': 'created',
}
# update or create connector queries
for con_slug in settings.keys():
for query_slug, setting in settings[con_slug].items():
print("update %s/%s" % (con_slug, query_slug))
con = PloneRestApi.objects.get(slug=con_slug)
con.queries.update_or_create(slug=query_slug, defaults={
'name': setting['name'],
'description': setting['description'],
'uri': setting['uri'],
'text_template': '{{ title }}',
'filter_expression': setting['filter_expression'],
'sort': setting['sort'],
'order': False,
'limit': 5
})

View File

@ -0,0 +1,87 @@
#!/usr/bin/env python
# ex:
# $ ssh combo.node2.test.saas.entrouvert.org
# $ sudo -u comno combo-manage shell -d portail-braine-l-alleud.test.entrouvert.org < 02_combo_add_tiles.py
import json
from combo.data.models import ConfigJsonCell, Page
settings = {
'tiles title page': 'Mon compte',
'bla_con_slug': 'bla-dev',
}
page = Page.objects.get(title=settings['tiles title page'])
order = len(page.get_cells())
nb_created = 0
# add deliberation cell
kwargs = {
'placeholder': 'content',
'key': 'deliberations-communales'
}
try:
ConfigJsonCell.objects.get(**kwargs)
except ConfigJsonCell.DoesNotExist:
print(kwargs)
kwargs.update({
'page': page,
'order': order + nb_created,
})
ConfigJsonCell.objects.create(**kwargs).save()
nb_created += 1
# add bla cells
con_slug = settings['bla_con_slug']
for query_slug in 'avis_et_enquete', 'info_travaux':
kwargs = {
'placeholder': 'content',
'parameters__connector': con_slug,
'parameters__query': query_slug,
}
try:
ConfigJsonCell.objects.get(**kwargs)
except ConfigJsonCell.DoesNotExist:
print(kwargs)
kwargs = {
'placeholder': 'content',
'parameters': {'connector': con_slug, 'query': query_slug},
'page': page,
'key': 'actualites',
'order': order + nb_created,
}
ConfigJsonCell.objects.create(**kwargs).save()
nb_created += 1
# add category_and_topics related cells
with open('topics.json') as fd:
settings = json.load(fd)
for con_slug in settings.keys():
field_values = sorted(settings[con_slug]['field_values'], key=lambda x: x['title'])
for field_value in field_values:
query_slug = field_value['token']
kwargs = {
'placeholder': 'content',
'parameters__connector': con_slug,
'parameters__query': query_slug,
}
try:
ConfigJsonCell.objects.get(**kwargs)
except ConfigJsonCell.DoesNotExist:
kwargs = {
'placeholder': 'content',
'parameters': {'connector': con_slug, 'query': query_slug},
'page': page,
'key': settings[con_slug]['cell_key'],
'order': order + nb_created,
}
print(kwargs)
ConfigJsonCell.objects.create(**kwargs).save()
nb_created += 1
if nb_created >= 5:
exit()
if nb_created > 0:
print('Please reorder the %s added cells on %s page' % (nb_created, page.get_online_url()))

17
braine-l-alleud/README Normal file
View File

@ -0,0 +1,17 @@
Ces 3 scripts permettent de configurer les tuiles sur la recette (puis
la prod).
* 00 : lister les topics
* 01 : ajouter les objets requêtes aux connecteurs
* 02 : ajouter les tuiles
Il faut penser à modifier les settings des 3 scripts.
Les seules choses suposées changer sont :
* les slug des connecteurs : XXX-dev -> XXX-prod
* les uri
Attention à 'bla-XXX' :
Il s'agit du site web de la ville.
Actuellement de la même instance utilisée en dev et en prod.
Cette instance va disparaître et il faudra alors mettre à jour les
connecteurs pour pointer sur les bonnes instances.