braine-l-alleud: scripts pour configurer les tuiles (#59131)
This commit is contained in:
parent
9d7f282df4
commit
54ea00314c
|
@ -0,0 +1 @@
|
|||
*~
|
|
@ -0,0 +1 @@
|
|||
topics.json
|
|
@ -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)
|
|
@ -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
|
||||
})
|
|
@ -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()))
|
|
@ -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.
|
Loading…
Reference in New Issue