add gnm_update_settings command to set toodego specific settings (#64909)

This commit is contained in:
Frédéric Péters 2022-06-18 10:31:54 +02:00
parent 2c2b9d4306
commit 2e551daa9d
4 changed files with 736 additions and 650 deletions

View File

@ -32,6 +32,8 @@ from combo.utils import requests
class Command(BaseCommand):
def handle(self, *args, **options):
if not getattr(settings, 'GNM_REPORTING', False):
return
reporting_user_email = settings.TEMPLATE_VARS.get('reporting_user_email')
reporting_user = None
if reporting_user_email:

View File

@ -0,0 +1,731 @@
# combo-plugin-gnm - Combo GNM plugin
# Copyright (C) 2022 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import os
from django.core.management.base import BaseCommand
from django.conf import settings
from django.db import connection
class Command(BaseCommand):
def handle(self, *args, **options):
# update settings.json of GNM tenants
self.extra_settings_filepath = os.path.join(connection.tenant.get_directory(), 'gnm-settings.json')
if not os.path.exists(self.extra_settings_filepath):
return
settings_filepath = os.path.join(connection.tenant.get_directory(), 'settings.json')
if os.path.exists(settings_filepath):
with open(settings_filepath) as fd:
self.settings_json = json.load(fd)
else:
self.settings_json = {}
self.update_settings_dict()
self.import_extra_settings()
self.set_no_logs()
self.settings_json['JSON_CELL_TYPES.update'] = self.settings_json['JSON_CELL_TYPES']
del self.settings_json['JSON_CELL_TYPES']
self.settings_json['COMBO_ASSET_SLOTS.update'] = self.settings_json['COMBO_ASSET_SLOTS']
del self.settings_json['COMBO_ASSET_SLOTS']
del self.settings_json['self']
with open(settings_filepath + '.new', 'w') as fd:
json.dump(self.settings_json, fd, indent=2, ensure_ascii=False, sort_keys=True)
os.replace(settings_filepath + '.new', settings_filepath)
def update_settings_dict(self):
MELLON_ADD_AUTHNREQUEST_NEXT_URL_EXTENSION = True
GNM_REPORTING = True
COMBO_MAP_TILE_URLTEMPLATE = "https://tiles.entrouvert.org/hdm/{z}/{x}/{y}.png"
COMBO_MAP_ATTRIBUTION = "&copy; <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a>"
COMBO_GEOCODING_SERVICE = 'https://nominatim.entrouvert.org'
JSON_CELL_TYPES = self.settings_json.get('JSON_CELL_TYPES.update') or {}
JSON_CELL_TYPES = {
"velov": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/ws/rdata/jcd_jcdecaux.jcdvelov/all.json?field=gid&value=[gid]"
% settings.DATA_CREDENTIALS,
"name": "Velov",
"cache_duration": 60,
"force_async": False,
"auto_refresh": 90,
"form": [{"varname": "gid", "type": "string", "label": "GID de la station"}],
},
"taxi": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/taxi/?property:gid={{gid}}",
"name": "Station de taxi",
"cache_duration": 86400,
"force_async": False,
"form": [{"varname": "gid", "type": "string", "label": "GID de la station"}],
},
"mdr": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/mdr/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Maison de la Métropole de Lyon",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"piscine": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/piscine/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Piscine de la Métropole de Lyon",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"mairie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/mairie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Mairie",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"decheterie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/decheterie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Déchèterie",
"toodego:page": True,
"toodego:page-title-template": "Déchèterie {{properties.nom}}",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"donnerie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/donnerie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Donnerie",
"toodego:page": True,
"toodego:page-title-template": "Donnerie {{properties.nom}}",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"bibliotheque": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/bibliotheque/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Bibliothèque",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"aire-de-covoiturage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/aire-de-covoiturage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Aire de covoiturage",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"airquality": {
"url": "{% if q_lat or lat %}http://api.atmo-aura.fr/partenaires/indice_request?api_token=6df2b0b505cc73c5545467758827458e&longitude={% firstof q_lon lon %}&latitude={% firstof q_lat lat %}{% endif %}",
"cache_duration": 300,
"force_async": False,
"name": "Qualité de l'air",
"form": [
{
"varname": "lat",
"type": "string",
"label": "Latitude",
"required": False,
},
{
"varname": "lon",
"type": "string",
"label": "Longitude",
"required": False,
},
],
"additional-data": [
{
"key": "air2go",
"url": "{% if q_lat or lat %}http://api.atmo-aura.fr/partenaires/indice_request?api_token=6df2b0b505cc73c5545467758827458e&longitude={% firstof q_lon lon %}&latitude={% firstof q_lat lat %}{% endif %}",
},
{
"key": "nominatim",
"url": "{% if q_lat or lat %}{{passerelle_url}}base-adresse/nominatim/reverse?lat={% firstof q_lat lat %}&lon={% firstof q_lon lon %}&format=json{% endif %}",
"cache_duration": 3600,
},
{
"key": "places",
"url": "{% if user_nameid %}{{ passerelle_url }}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}{% endif %}",
},
{
"key": "place_geoloc",
"url": "{% if places %}{{ passerelle_url }}base-adresse/nominatim/search?q={{ places.data.0.text }}&format=json{% endif %}",
"cache_duration": 3600,
},
{
"key": "place2_geoloc",
"url": "{% if places|length > 1 %}{{ passerelle_url }}base-adresse/nominatim/search?q={{ places.data.1.text }}&format=json{% endif %}",
"cache_duration": 3600,
},
],
"actions": {
"geocode": {
"url": "{{ passerelle_url }}base-adresse/nominatim/search?q={{ q }}&format=json",
"method": "get",
"response": "raw",
}
},
},
"pollen": {
"url": "https://download.data.grandlyon.com/ws/rdata/rnsa_reseau_aerobio.rnsabulletin/all.json",
"cache_duration": 300,
"force_async": False,
"name": "Info Pollen",
"additional-data": [
{
"key": "syntheses",
"url": "https://download.data.grandlyon.com/ws/rdata/rnsa_reseau_aerobio.rnsabulletin/all.json?field=type&value=Synthese",
}
],
},
"places": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}",
"name": "Lieux favoris",
"force_async": False,
"cache_duration": 600,
"additional-data": [{"key": "userdata", "url": "{{idp_url}}api/users/{{user_nameid}}"}],
"actions": {
"create": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/create?name_id={{user_nameid}}"
},
"update": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/{{id}}/?name_id={{user_nameid}}"
},
"delete": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/{{id}}/delete?name_id={{user_nameid}}"
},
},
},
"silo-a-verre": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/silo-a-verre/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": "Silo à verre",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"tcl": {
"url": "{{passerelle_url}}tcl/tcl/stop/{{id}}",
"auto_refresh": 25,
"cache_duration": 10,
"force_async": False,
"name": "Arrêt TCL",
"form": [{"varname": "id", "type": "string", "label": "Identifiant"}],
},
"goto": {
"url": "{% load l10n %}{% localize off %}{% if lat1 %}{{cityway_api_url}}api/journeyplanner/opt/PlanTrips/json?DepartureType=COORDINATES&DepartureLatitude={{lat1}}&DepartureLongitude={{lng1}}&ArrivalType=COORDINATES&ArrivalLatitude={{lat2}}&ArrivalLongitude={{lng2}}&Date={{date}}&DateType=DEPARTURE&TripModes={{tripmode}}&Algorithm=FASTEST&BikeSecurityLevel=None&BikeSpeed=12&WalkSpeed=4&MaxCarDistance=100&MaxBikeDistance=100&MaxWalkDistance=3000&AvoidDisruptions=1&StopToPlaceCar=1&SpecificOptions=GetOn;3|GetOff;4|TinyDistance;300|VLS;0|CARSHARING;0&UserId={% firstof cityway_api_userid 'toodego' %}&user_key={{cityway_api_userkey}}{% endif %}{% endlocalize %}",
"cache_duration": 60,
"force_async": False,
"name": "M'y rendre",
"loading-message": u'Calcul…',
"varnames": ["lat1", "lng1", "lat2", "lng2", "date", "to"],
"form": [
{
"varname": "tripmode",
"type": "string",
"label": "Mode de transport (WALK, BIKE, PT, CAR)",
}
],
},
"cut-profile": {
"url": "{{idp_url}}api/users/{{user_nameid}}/",
"name": "Profil CUT",
"auto_refresh": 60,
},
"profile-info": {"url": "{{idp_url}}api/users/{{user_nameid}}/", "name": "Infos de profil"},
"suggestions": {
"name": "Suggestions",
"url": "{{idp_url}}api/users/{{user_nameid}}",
"force_async": True,
"loading-message": "Assemblage en cours, quelques secondes…",
"additional-data": [
{
"key": "places",
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}",
}
],
},
"alerte-qualite-de-l-air": {
"url": "{{passerelle_url}}feeds/alertes-qualite-de-lair/json",
"cache_duration": 600,
"force_async": True,
"name": "Alerte qualité de l'air",
},
"mairie-usager": {
"name": "Mairie de l'usager",
"url": "{{idp_url}}api/users/{{user_nameid}}/",
"form": [{"varname": "text", "type": "text", "label": "Texte"}],
},
"group-title": {
"name": "Intertitre",
"url": "{{}}",
"form": [{"varname": "text", "type": "text", "label": "Texte"}],
},
"stats": {
"name": "Statistiques tuiles",
"url": "{{portal_url}}api/dashboard/tile-stats/",
},
"parkingtr": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/wfs/rdata?SERVICE=WFS&VERSION=2.0.0&outputformat=GEOJSON&request=GetFeature&typename=pvo_patrimoine_voirie.pvoparkingtr&filter=<Filter><PropertyIsEqualTo><PropertyName>pkgid</PropertyName><Literal>[pkgid]</Literal></PropertyIsEqualTo></Filter>"
% settings.DATA_CREDENTIALS,
"cache_duration": 86400,
"force_async": False,
"name": "Parking",
"form": [{"varname": "pkgid", "type": "string", "label": "Identifiant"}],
},
"parc-velo": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/parc-velo/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Parc de stationnement vélos",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"autopartage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/autopartage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Autopartage",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"stationnement-pmr": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/stationnement-pmr/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Stationnement réglementé pour les PMR",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"toilette": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/toilette/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Toilette publique",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"evenement-routier": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/wfs/rdata?SERVICE=WFS&VERSION=2.0.0&outputformat=GEOJSON&request=GetFeature&typename=pvo_patrimoine_voirie.pvoevenement&filter=<Filter><PropertyIsEqualTo><PropertyName>id</PropertyName><Literal>[id]</Literal></PropertyIsEqualTo></Filter>"
% settings.DATA_CREDENTIALS,
"cache_duration": 86400,
"force_async": False,
"name": "Evenement routier",
"form": [{"varname": "id", "type": "string", "label": "Identifiant"}],
},
"cartads-dossiers": {
"url": "{{passerelle_url}}grandlyon-cartads-cs/{{slug}}/files?name_id={{user_nameid}}",
"cache_duration": 0,
"force_async": True,
"name": "Dossiers Cart@DS",
"form": [{"varname": "slug", "type": "string", "label": "Slug du connecteur"}],
"actions": {
"unsubscribe": {
"url": "{{passerelle_url}}grandlyon-cartads-cs/{{slug}}/unsubscribe?name_id={{user_nameid}}",
},
},
},
"urgence-sanitaire-soins": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-soins/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Accès aux soins",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-alimentation": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-alimentation/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Alimentation",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-hebergement": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-hebergement/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Hébergement",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-quotidien": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-quotidien/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Services au quotidien",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-animaux-jardin-bricolage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-animaux-jardin-bricolage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Animaux jardin bricolage",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-autres-activites": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-autres-activites/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Autres activités",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-deco-meubles": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-deco-meubles/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Déco meubles",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-fleuriste": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-fleuriste/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Fleuriste",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-jeux-jouets": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-jeux-jouets/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Jeux jouets",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-librairie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-librairie/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Librairie",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-mode": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-mode/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Mode",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-restauration": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-restauration/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Restauration",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-soins-institut-beaute": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-soins-institut-beaute/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Soins institut beauté",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-sport-loisirs": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-sport-loisirs/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Sport loisirs",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"rsj-a-traiter": {
"url": "{{eservices_url}}api/forms/?limit={% firstof limit 100 %}{% if category_id %}&category_id={{ category_id }}{% endif %}&NameID={{user_nameid}}",
"cache_duration": 120,
"name": "Demandes à traiter (RSJ)",
"form": [
{"varname": "limit", "type": "string", "label": "Nombre max de demandes"},
{"varname": "category_id", "type": "string", "label": "Identifiant de la catégorie"},
],
},
"rsj-fiche": {
"url": "{{eservices_url}}api/cards/jeunes-rsa/{{jeunes_rsa_id}}/",
"name": "Fiche RSJ",
"cache_duration": 120,
},
"caluire-famille": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Infos famille",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/family_info?NameID={{ user_nameid }}",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-responsables": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Infos responsables",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/family_info?NameID={{ user_nameid }}",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-liste-enfants": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Liste des enfants (repeat)",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/children_info?NameID={{ user_nameid }}",
"make_global": "list_children",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-enfant": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Enfant (repeat)",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_info?NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}",
"repeat": "{{ list_children.data|length }}",
"additional-data": [
{
"key": "schooling",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_schooling_info?"
"NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}&schooling_date={% now 'Y-m-d' %}",
},
{
"key": "activities",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_activities_info?"
"NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}&schooling_date={% now 'Y-m-d' %}",
},
],
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-detail": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Enfant",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_info?NameID={{ user_nameid }}&idpersonne={{ child_id }}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-prochaines-inscriptions": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Prochaines inscriptions",
"url": "{% now 'n' as current_month %}{% if current_month in '678' %}"
"{{ passerelle_url }}caluire-axel/{{ slug }}/child_activities_info?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"&schooling_date={% now 'Y' as current_year %}{{ current_year|add:'1' }}-{% now 'm-d' %}{% endif %}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-agenda": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Agenda",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/get_agenda_full?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"{% now 'Y' as current_year %}{% now 'n' as current_month %}"
"&start_date={% if current_month in '87654321' %}{{ current_year|add:'-1' }}{% else %}{{ current_year }}{% endif %}-09-01"
"&end_date={% if current_month in '87654321' %}{{ current_year }}{% else %}{{ current_year|add:'1' }}{% endif %}-08-31",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-agenda-next-year": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Agenda prochaine année scolaire",
"url": "{% now 'Y' as current_year %}{% now 'n' as current_month %}{% if current_month in '678' %}"
"{{ passerelle_url }}caluire-axel/{{ slug }}/get_agenda_full?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"&start_date={% if current_month in '87654321' %}{{ current_year }}{% else %}{{ current_year|add:'1' }}{% endif %}-09-01"
"&end_date={% if current_month in '87654321' %}{{ current_year|add:'1' }}{% else %}{{ current_year|add:'2' }}{% endif %}-08-31{% endif %}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
}
PRODUCER_LABELS = {
'atmo': u'ATMO Auvergne Rhône-Alpes',
'rnsa': u'RNSA',
'onlymoov': u'ONLY MOOV',
'tcl': u'TCL',
'toodego': u'Toodego',
'velov': "Velo'v",
'vivrou': "Vivro",
'grandlyon': u'Grand Lyon',
'bluely': "Bluely",
'citiz-lpa': "Citiz LPA",
'sncf': "SNCF",
'effia': "EFFIA",
'indigo': "Indigo",
'lpa': "LPA",
'sas-parc-opera': "SAS Parc Opera",
'q-park': "Q-Park",
'unibail': "Unibail",
'sajr': "sajr",
'aeroport-saint-exupe': "Aéroport Saint Exupe",
}
COLLECTIVITY_LABELS = {
"albigny-sur-saone": "Albigny-sur-Saône",
"bron": "Bron",
"cailloux-sur-fontaines": "Cailloux-sur-Fontaines",
"caluire-et-cuire": "Caluire-et-Cuire",
"champagne-au-mont-d-or": "Champagne-au-Mont-d'Or",
"charbonnieres-les-bains": "Charbonnières-les-Bains",
"charly": "Charly",
"chassie": "Chassie",
"collonges-au-mont-d-or": "Collonges-au-Mont-d'Or",
"corbas": "Corbas",
"couzon-au-mont-d-or": "Couzon-au-Mont-d'Or",
"craponne": "Craponne",
"curis-au-mont-d-or": "Curis-au-Mont-d'Or",
"dardilly": "Dardilly",
"decines-charpie": "Décines-Charpie",
"ecully": "Écully",
"feyzin": "Feyzin",
"fleurieu-sur-saone": "Fleurieu-sur-Saône",
"fontaines-saint-martin": "Fontaines-Saint-Martin",
"fontaines-sur-saone": "Fontaines-sur-Saône",
"francheville": "Francheville",
"genay": "Genay",
"givors": "Givors",
"grigny": "Grigny",
"irigny": "Irigny",
"jonage": "Jonage",
"la-mulatiere": "La Mulatière",
"la-tour-de-salvagny": "La Tour de Salvagny",
"limonest": "Limonest",
"lissie": "Lissie",
"lyon": "Lyon",
"marcy-l-etoile": "Marcy-l'Étoile",
"meyzie": "Meyzie",
"mions": "Mions",
"montanay": "Montanay",
"neuville-sur-saone": "Neuville-sur-Saône",
"oullins": "Oullins",
"pierre-benite": "Pierre-Bénite",
"poleymieux-au-mont-d-or": "Poleymieux-au-Mont-d'Or",
"quincieux": "Quincieux",
"rillieux-la-pape": "Rillieux-la-Pape",
"rochetaillee-sur-saone": "Rochetaillée-sur-Saône",
"saint-cyr-au-mont-d-or": "Saint-Cyr-au-Mont-d'Or",
"saint-didier-au-mont-d-or": "Saint-Didier-au-Mont-d'Or",
"saint-fons": "Saint-Fons",
"saint-genis-laval": "Saint-Genis-Laval",
"saint-genis-les-ollieres": "Saint-Genis-les-Ollières",
"saint-germain-au-mont-d-or": "Saint-Germain-au-Mont-d'Or",
"saint-priest": "Saint-Priest",
"sainte-foy-les-lyon": "Sainte-Foy-lès-Lyon",
"sathonay-camp": "Sathonay-Camp",
"sathonay-village": "Sathonay-Village",
"solaize": "Solaize",
"st-romain-au-mont-d-or": "Saint-Romain-au-Mont-d'Or",
"tassin-la-demi-lune": "Tassin-la-Demi-Lune",
"vaulx-en-velin": "Vaulx-en-Velin",
"venissieux": "Venissieux",
"vernaison": "Vernaison",
"villeurbanne": "Villeurbanne",
}
PRODUCER_LABELS.update(COLLECTIVITY_LABELS)
COMBO_ASSET_SLOTS = self.settings_json.get('COMBO_ASSET_SLOTS.update') or {}
for producer, producer_label in PRODUCER_LABELS.items():
COMBO_ASSET_SLOTS['logo:%s' % producer] = {'label': u'Logo %s' % producer_label}
# add lyon as used by cart@ds
for arrondissement in ['1er'] + ['%seme' % x for x in range(2, 10)]:
COMBO_ASSET_SLOTS['logo:lyon-%s' % arrondissement] = {
'label': u'Logo Lyon %s' % arrondissement,
}
tiles = [
('air', "Qualité de l'air"),
('bibliotheque', "Bibliothèque"),
('commerce-animaux-jardin-bricolage', 'Commerce - Animaux jardin bricolage'),
('commerce-autres-activites', 'Commerce - Autres activités'),
('commerce-deco-meubles', 'Commerce - Déco meubles'),
('commerce-fleuriste', 'Commerce - Fleuriste'),
('commerce-jeux-jouets', 'Commerce - Jeux jouets'),
('commerce-librairie', 'Commerce - Librairie'),
('commerce-mode', 'Commerce - Mode'),
('commerce-restauration', 'Commerce - Restauration'),
('commerce-soins-institut-beaute', 'Commerce - Soins institut beauté'),
('commerce-sport-loisirs', 'Commerce - Sport loisirs'),
('covoiturage', "Aire de covoiturage"),
('decheterie', "Déchèterie"),
('donnerie', "Donnerie"),
('mairie', "Mairie"),
('mdr', "Maison du Rhône"),
('parc-velo', "Parc vélo"),
('piscine', "Piscine"),
('pollen', "Pollen"),
('silo-a-verre', u'Silo à verre'),
('taxi', "Taxi"),
('tcl', "TCL"),
('velov', "Velo'v"),
('parkingtr', "Parking"),
('autopartage', "Autopartage"),
('evenement-routier', "Événement routier"),
('pmr', "Stationnement PMR"),
('toilette', "Toilette publique"),
('urgence-sanitaire-soins', 'Urgence sanitaire Covid 19 - Accès aux soins'),
('urgence-sanitaire-alimentation', 'Urgence sanitaire Covid 19 - Alimentation'),
('urgence-sanitaire-hebergement', 'Urgence sanitaire Covid 19 - Hébergement'),
('urgence-sanitaire-quotidien', 'Urgence sanitaire Covid 19 - Services au quotidien'),
]
for tile, tile_label in tiles:
COMBO_ASSET_SLOTS['picture:%s' % tile] = {'label': u'Photographie %s' % tile_label}
if tile not in ('taxi', 'tcl', 'velov'):
COMBO_ASSET_SLOTS['picture:banner:%s' % tile] = {
'label': u'Photographie/bannière %s' % tile_label
}
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
self.settings_json.update(locals())
def import_extra_settings(self):
with open(self.extra_settings_filepath) as fd:
settings_json = json.load(fd)
for k, v in settings_json.items():
if isinstance(self.settings_json.get(k), dict):
self.settings_json[k].update(v)
else:
self.settings_json[k] = v
def set_no_logs(self):
# change json cells to never log
for cell in self.settings_json['JSON_CELL_TYPES'].values():
cell['log_errors'] = False
for add in cell.get('additional-data') or []:
add['log_errors'] = False

650
debian/50gnm.py vendored
View File

@ -4,656 +4,6 @@ if not 'combo_plugin_gnm' in INSTALLED_APPS:
INSTALLED_APPS += ('combo_plugin_gnm',)
TENANT_APPS += ('combo_plugin_gnm',)
MELLON_ADD_AUTHNREQUEST_NEXT_URL_EXTENSION = True
COMBO_MAP_TILE_URLTEMPLATE = "https://tiles.entrouvert.org/hdm/{z}/{x}/{y}.png"
COMBO_MAP_ATTRIBUTION = "&copy; <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a>"
COMBO_GEOCODING_SERVICE = 'https://nominatim.entrouvert.org'
JSON_CELL_TYPES = {
"velov": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/ws/rdata/jcd_jcdecaux.jcdvelov/all.json?field=gid&value=[gid]"
% DATA_CREDENTIALS,
"name": u"Velov",
"cache_duration": 60,
"force_async": False,
"auto_refresh": 90,
"form": [{"varname": "gid", "type": "string", "label": "GID de la station"}],
},
"taxi": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/taxi/?property:gid={{gid}}",
"name": u"Station de taxi",
"cache_duration": 86400,
"force_async": False,
"form": [{"varname": "gid", "type": "string", "label": "GID de la station"}],
},
"mdr": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/mdr/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Maison de la Métropole de Lyon",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"piscine": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/piscine/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Piscine de la Métropole de Lyon",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"mairie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/mairie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Mairie",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"decheterie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/decheterie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Déchèterie",
"toodego:page": True,
"toodego:page-title-template": "Déchèterie {{properties.nom}}",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"donnerie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/donnerie/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Donnerie",
"toodego:page": True,
"toodego:page-title-template": "Donnerie {{properties.nom}}",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"bibliotheque": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/bibliotheque/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Bibliothèque",
"toodego:page": True,
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"aire-de-covoiturage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/aire-de-covoiturage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Aire de covoiturage",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"airquality": {
"url": "{% if q_lat or lat %}http://api.atmo-aura.fr/partenaires/indice_request?api_token=6df2b0b505cc73c5545467758827458e&longitude={% firstof q_lon lon %}&latitude={% firstof q_lat lat %}{% endif %}",
"cache_duration": 300,
"force_async": False,
"name": u"Qualité de l'air",
"form": [
{
"varname": "lat",
"type": "string",
"label": "Latitude",
"required": False,
},
{
"varname": "lon",
"type": "string",
"label": "Longitude",
"required": False,
},
],
"additional-data": [
{
"key": "air2go",
"url": "{% if q_lat or lat %}http://api.atmo-aura.fr/partenaires/indice_request?api_token=6df2b0b505cc73c5545467758827458e&longitude={% firstof q_lon lon %}&latitude={% firstof q_lat lat %}{% endif %}",
},
{
"key": "nominatim",
"url": "{% if q_lat or lat %}{{passerelle_url}}base-adresse/nominatim/reverse?lat={% firstof q_lat lat %}&lon={% firstof q_lon lon %}&format=json{% endif %}",
"cache_duration": 3600,
},
{
"key": "places",
"url": "{% if user_nameid %}{{ passerelle_url }}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}{% endif %}",
},
{
"key": "place_geoloc",
"url": "{% if places %}{{ passerelle_url }}base-adresse/nominatim/search?q={{ places.data.0.text }}&format=json{% endif %}",
"cache_duration": 3600,
},
{
"key": "place2_geoloc",
"url": "{% if places|length > 1 %}{{ passerelle_url }}base-adresse/nominatim/search?q={{ places.data.1.text }}&format=json{% endif %}",
"cache_duration": 3600,
},
],
"actions": {
"geocode": {
"url": "{{ passerelle_url }}base-adresse/nominatim/search?q={{ q }}&format=json",
"method": "get",
"response": "raw",
}
},
},
"pollen": {
"url": "https://download.data.grandlyon.com/ws/rdata/rnsa_reseau_aerobio.rnsabulletin/all.json",
"cache_duration": 300,
"force_async": False,
"name": u"Info Pollen",
"additional-data": [
{
"key": "syntheses",
"url": "https://download.data.grandlyon.com/ws/rdata/rnsa_reseau_aerobio.rnsabulletin/all.json?field=type&value=Synthese",
}
],
},
"places": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}",
"name": u"Lieux favoris",
"force_async": False,
"cache_duration": 600,
"additional-data": [{"key": "userdata", "url": "{{idp_url}}api/users/{{user_nameid}}"}],
"actions": {
"create": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/create?name_id={{user_nameid}}"
},
"update": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/{{id}}/?name_id={{user_nameid}}"
},
"delete": {
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/{{id}}/delete?name_id={{user_nameid}}"
},
},
},
"silo-a-verre": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/silo-a-verre/?property:identifiant={{identifiant}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Silo à verre",
"form": [{"varname": "identifiant", "type": "string", "label": "Identifiant"}],
},
"tcl": {
"url": "{{passerelle_url}}tcl/tcl/stop/{{id}}",
"auto_refresh": 25,
"cache_duration": 10,
"force_async": False,
"name": u"Arrêt TCL",
"form": [{"varname": "id", "type": "string", "label": "Identifiant"}],
},
"goto": {
"url": "{% load l10n %}{% localize off %}{% if lat1 %}{{cityway_api_url}}api/journeyplanner/opt/PlanTrips/json?DepartureType=COORDINATES&DepartureLatitude={{lat1}}&DepartureLongitude={{lng1}}&ArrivalType=COORDINATES&ArrivalLatitude={{lat2}}&ArrivalLongitude={{lng2}}&Date={{date}}&DateType=DEPARTURE&TripModes={{tripmode}}&Algorithm=FASTEST&BikeSecurityLevel=None&BikeSpeed=12&WalkSpeed=4&MaxCarDistance=100&MaxBikeDistance=100&MaxWalkDistance=3000&AvoidDisruptions=1&StopToPlaceCar=1&SpecificOptions=GetOn;3|GetOff;4|TinyDistance;300|VLS;0|CARSHARING;0&UserId={% firstof cityway_api_userid 'toodego' %}&user_key={{cityway_api_userkey}}{% endif %}{% endlocalize %}",
"cache_duration": 60,
"force_async": False,
"name": u"M'y rendre",
"loading-message": u'Calcul…',
"varnames": ["lat1", "lng1", "lat2", "lng2", "date", "to"],
"form": [
{"varname": "tripmode", "type": "string", "label": "Mode de transport (WALK, BIKE, PT, CAR)"}
],
},
"cut-profile": {
"url": "{{idp_url}}api/users/{{user_nameid}}/",
"name": "Profil CUT",
"auto_refresh": 60,
},
"profile-info": {"url": "{{idp_url}}api/users/{{user_nameid}}/", "name": "Infos de profil"},
"suggestions": {
"name": "Suggestions",
"url": "{{idp_url}}api/users/{{user_nameid}}",
"force_async": True,
"loading-message": "Assemblage en cours, quelques secondes…",
"additional-data": [
{
"key": "places",
"url": "{{passerelle_url}}jsondatastore/lieux-favoris/data/?name_id={{user_nameid}}",
}
],
},
"alerte-qualite-de-l-air": {
"url": "{{passerelle_url}}feeds/alertes-qualite-de-lair/json",
"cache_duration": 600,
"force_async": True,
"name": u"Alerte qualité de l'air",
},
"mairie-usager": {
"name": "Mairie de l'usager",
"url": "{{idp_url}}api/users/{{user_nameid}}/",
"form": [{"varname": "text", "type": "text", "label": "Texte"}],
},
"group-title": {
"name": "Intertitre",
"url": "{{}}",
"form": [{"varname": "text", "type": "text", "label": "Texte"}],
},
"stats": {
"name": "Statistiques tuiles",
"url": "{{portal_url}}api/dashboard/tile-stats/",
},
"parkingtr": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/wfs/rdata?SERVICE=WFS&VERSION=2.0.0&outputformat=GEOJSON&request=GetFeature&typename=pvo_patrimoine_voirie.pvoparkingtr&filter=<Filter><PropertyIsEqualTo><PropertyName>pkgid</PropertyName><Literal>[pkgid]</Literal></PropertyIsEqualTo></Filter>"
% DATA_CREDENTIALS,
"cache_duration": 86400,
"force_async": False,
"name": u"Parking",
"form": [{"varname": "pkgid", "type": "string", "label": "Identifiant"}],
},
"parc-velo": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/parc-velo/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Parc de stationnement vélos",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"autopartage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/autopartage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Autopartage",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"stationnement-pmr": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/stationnement-pmr/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Stationnement réglementé pour les PMR",
"form": [{"varname": "gid", "type": "string", "label": "Identifiant"}],
},
"toilette": {
"url": "{{passerelle_url}}opengis/data-grandlyon-general/query/toilette/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": u"Toilette publique",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"evenement-routier": {
"url": "https://%(data_username)s:%(data_password)s@download.data.grandlyon.com/wfs/rdata?SERVICE=WFS&VERSION=2.0.0&outputformat=GEOJSON&request=GetFeature&typename=pvo_patrimoine_voirie.pvoevenement&filter=<Filter><PropertyIsEqualTo><PropertyName>id</PropertyName><Literal>[id]</Literal></PropertyIsEqualTo></Filter>"
% DATA_CREDENTIALS,
"cache_duration": 86400,
"force_async": False,
"name": u"Evenement routier",
"form": [{"varname": "id", "type": "string", "label": "Identifiant"}],
},
"cartads-dossiers": {
"url": "{{passerelle_url}}grandlyon-cartads-cs/{{slug}}/files?name_id={{user_nameid}}",
"cache_duration": 0,
"force_async": True,
"name": u"Dossiers Cart@DS",
"form": [{"varname": "slug", "type": "string", "label": "Slug du connecteur"}],
"actions": {
"unsubscribe": {
"url": "{{passerelle_url}}grandlyon-cartads-cs/{{slug}}/unsubscribe?name_id={{user_nameid}}",
},
},
},
"urgence-sanitaire-soins": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-soins/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Accès aux soins",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-alimentation": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-alimentation/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Alimentation",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-hebergement": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-hebergement/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Hébergement",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"urgence-sanitaire-quotidien": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/urgence-sanitaire-quotidien/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Urgence sanitaire Covid 19 - Services au quotidien",
"toodego:page": True,
"template-name": "combo/json/urgence-sanitaire.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-animaux-jardin-bricolage": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-animaux-jardin-bricolage/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Animaux jardin bricolage",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-autres-activites": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-autres-activites/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Autres activités",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-deco-meubles": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-deco-meubles/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Déco meubles",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-fleuriste": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-fleuriste/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Fleuriste",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-jeux-jouets": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-jeux-jouets/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Jeux jouets",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-librairie": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-librairie/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Librairie",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-mode": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-mode/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Mode",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-restauration": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-restauration/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Restauration",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-soins-institut-beaute": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-soins-institut-beaute/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Soins institut beauté",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"commerce-sport-loisirs": {
"url": "{{passerelle_url}}opengis/data-grandlyon-rdata/query/commerce-sport-loisirs/?property:gid={{gid}}",
"cache_duration": 86400,
"force_async": False,
"name": "Commerce - Sport loisirs",
"toodego:page": True,
"template-name": "combo/json/commerce.html",
"form": [{"varname": "gid", "type": "string", "label": "gid"}],
},
"rsj-a-traiter": {
"url": "{{eservices_url}}api/forms/?limit={% firstof limit 100 %}{% if category_id %}&category_id={{ category_id }}{% endif %}&NameID={{user_nameid}}",
"cache_duration": 120,
"name": "Demandes à traiter (RSJ)",
"form": [
{"varname": "limit", "type": "string", "label": "Nombre max de demandes"},
{"varname": "category_id", "type": "string", "label": "Identifiant de la catégorie"},
],
},
"rsj-fiche": {
"url": "{{eservices_url}}api/cards/jeunes-rsa/{{jeunes_rsa_id}}/",
"name": "Fiche RSJ",
"cache_duration": 120,
},
"caluire-famille": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Infos famille",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/family_info?NameID={{ user_nameid }}",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-responsables": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Infos responsables",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/family_info?NameID={{ user_nameid }}",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-liste-enfants": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Liste des enfants (repeat)",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/children_info?NameID={{ user_nameid }}",
"make_global": "list_children",
"form": [{"label": "Identifiant du connecteur", "varname": "slug", "required": True}],
},
"caluire-enfant": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Enfant (repeat)",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_info?NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}",
"repeat": "{{ list_children.data|length }}",
"additional-data": [
{
"key": "schooling",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_schooling_info?"
"NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}&schooling_date={% now 'Y-m-d' %}",
},
{
"key": "activities",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_activities_info?"
"NameID={{ user_nameid }}&idpersonne={{ list_children.data|get:repeat_index|get:'id' }}&schooling_date={% now 'Y-m-d' %}",
},
],
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-detail": {
"cache_duration": 30,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Enfant",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/child_info?NameID={{ user_nameid }}&idpersonne={{ child_id }}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-prochaines-inscriptions": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Prochaines inscriptions",
"url": "{% now 'n' as current_month %}{% if current_month in '678' %}"
"{{ passerelle_url }}caluire-axel/{{ slug }}/child_activities_info?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"&schooling_date={% now 'Y' as current_year %}{{ current_year|add:'1' }}-{% now 'm-d' %}{% endif %}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-agenda": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Agenda",
"url": "{{ passerelle_url }}caluire-axel/{{ slug }}/get_agenda_full?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"{% now 'Y' as current_year %}{% now 'n' as current_month %}"
"&start_date={% if current_month in '87654321' %}{{ current_year|add:'-1' }}{% else %}{{ current_year }}{% endif %}-09-01"
"&end_date={% if current_month in '87654321' %}{{ current_year }}{% else %}{{ current_year|add:'1' }}{% endif %}-08-31",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
"caluire-enfant-agenda-next-year": {
"cache_duration": 0,
"force_async": True,
"name": "Caluire-et-Cuire - Teamnet Axel: Agenda prochaine année scolaire",
"url": "{% now 'Y' as current_year %}{% now 'n' as current_month %}{% if current_month in '678' %}"
"{{ passerelle_url }}caluire-axel/{{ slug }}/get_agenda_full?NameID={{ user_nameid }}&idpersonne={{ child_id }}"
"&start_date={% if current_month in '87654321' %}{{ current_year }}{% else %}{{ current_year|add:'1' }}{% endif %}-09-01"
"&end_date={% if current_month in '87654321' %}{{ current_year|add:'1' }}{% else %}{{ current_year|add:'2' }}{% endif %}-08-31{% endif %}",
"form": [
{"label": "Identifiant du connecteur", "varname": "slug", "required": True},
],
},
}
PRODUCER_LABELS = {
'atmo': u'ATMO Auvergne Rhône-Alpes',
'rnsa': u'RNSA',
'onlymoov': u'ONLY MOOV',
'tcl': u'TCL',
'toodego': u'Toodego',
'velov': u"Velo'v",
'vivrou': u"Vivrou",
'grandlyon': u'Grand Lyon',
'bluely': u"Bluely",
'citiz-lpa': u"Citiz LPA",
'sncf': u"SNCF",
'effia': u"EFFIA",
'indigo': u"Indigo",
'lpa': u"LPA",
'sas-parc-opera': u"SAS Parc Opera",
'q-park': u"Q-Park",
'unibail': u"Unibail",
'sajr': u"sajr",
'aeroport-saint-exupe': u"Aéroport Saint Exupe",
}
COLLECTIVITY_LABELS = {
"albigny-sur-saone": u"Albigny-sur-Saône",
"bron": u"Bron",
"cailloux-sur-fontaines": u"Cailloux-sur-Fontaines",
"caluire-et-cuire": u"Caluire-et-Cuire",
"champagne-au-mont-d-or": u"Champagne-au-Mont-d'Or",
"charbonnieres-les-bains": u"Charbonnières-les-Bains",
"charly": u"Charly",
"chassieu": u"Chassieu",
"collonges-au-mont-d-or": u"Collonges-au-Mont-d'Or",
"corbas": u"Corbas",
"couzon-au-mont-d-or": u"Couzon-au-Mont-d'Or",
"craponne": u"Craponne",
"curis-au-mont-d-or": u"Curis-au-Mont-d'Or",
"dardilly": u"Dardilly",
"decines-charpieu": u"Décines-Charpieu",
"ecully": u"Écully",
"feyzin": u"Feyzin",
"fleurieu-sur-saone": u"Fleurieu-sur-Saône",
"fontaines-saint-martin": u"Fontaines-Saint-Martin",
"fontaines-sur-saone": u"Fontaines-sur-Saône",
"francheville": u"Francheville",
"genay": u"Genay",
"givors": u"Givors",
"grigny": u"Grigny",
"irigny": u"Irigny",
"jonage": u"Jonage",
"la-mulatiere": u"La Mulatière",
"la-tour-de-salvagny": u"La Tour de Salvagny",
"limonest": u"Limonest",
"lissieu": u"Lissieu",
"lyon": u"Lyon",
"marcy-l-etoile": u"Marcy-l'Étoile",
"meyzieu": u"Meyzieu",
"mions": u"Mions",
"montanay": u"Montanay",
"neuville-sur-saone": u"Neuville-sur-Saône",
"oullins": u"Oullins",
"pierre-benite": u"Pierre-Bénite",
"poleymieux-au-mont-d-or": u"Poleymieux-au-Mont-d'Or",
"quincieux": u"Quincieux",
"rillieux-la-pape": u"Rillieux-la-Pape",
"rochetaillee-sur-saone": u"Rochetaillée-sur-Saône",
"saint-cyr-au-mont-d-or": u"Saint-Cyr-au-Mont-d'Or",
"saint-didier-au-mont-d-or": u"Saint-Didier-au-Mont-d'Or",
"saint-fons": u"Saint-Fons",
"saint-genis-laval": u"Saint-Genis-Laval",
"saint-genis-les-ollieres": u"Saint-Genis-les-Ollières",
"saint-germain-au-mont-d-or": u"Saint-Germain-au-Mont-d'Or",
"saint-priest": u"Saint-Priest",
"sainte-foy-les-lyon": u"Sainte-Foy-lès-Lyon",
"sathonay-camp": u"Sathonay-Camp",
"sathonay-village": u"Sathonay-Village",
"solaize": u"Solaize",
"st-romain-au-mont-d-or": u"Saint-Romain-au-Mont-d'Or",
"tassin-la-demi-lune": u"Tassin-la-Demi-Lune",
"vaulx-en-velin": u"Vaulx-en-Velin",
"venissieux": u"Venissieux",
"vernaison": u"Vernaison",
"villeurbanne": u"Villeurbanne",
}
PRODUCER_LABELS.update(COLLECTIVITY_LABELS)
for producer, producer_label in PRODUCER_LABELS.items():
COMBO_ASSET_SLOTS['logo:%s' % producer] = {'label': u'Logo %s' % producer_label}
# add lyon as used by cart@ds
for arrondissement in ['1er'] + ['%seme' % x for x in range(2, 10)]:
COMBO_ASSET_SLOTS['logo:lyon-%s' % arrondissement] = {
'label': u'Logo Lyon %s' % arrondissement,
}
tiles = [
('air', u"Qualité de l'air"),
('bibliotheque', u"Bibliothèque"),
('commerce-animaux-jardin-bricolage', 'Commerce - Animaux jardin bricolage'),
('commerce-autres-activites', 'Commerce - Autres activités'),
('commerce-deco-meubles', 'Commerce - Déco meubles'),
('commerce-fleuriste', 'Commerce - Fleuriste'),
('commerce-jeux-jouets', 'Commerce - Jeux jouets'),
('commerce-librairie', 'Commerce - Librairie'),
('commerce-mode', 'Commerce - Mode'),
('commerce-restauration', 'Commerce - Restauration'),
('commerce-soins-institut-beaute', 'Commerce - Soins institut beauté'),
('commerce-sport-loisirs', 'Commerce - Sport loisirs'),
('covoiturage', u"Aire de covoiturage"),
('decheterie', u"Déchèterie"),
('donnerie', u"Donnerie"),
('mairie', u"Mairie"),
('mdr', u"Maison du Rhône"),
('parc-velo', u"Parc vélo"),
('piscine', u"Piscine"),
('pollen', u"Pollen"),
('silo-a-verre', u'Silo à verre'),
('taxi', u"Taxi"),
('tcl', u"TCL"),
('velov', u"Velo'v"),
('parkingtr', u"Parking"),
('autopartage', u"Autopartage"),
('evenement-routier', u"Événement routier"),
('pmr', u"Stationnement PMR"),
('toilette', u"Toilette publique"),
('urgence-sanitaire-soins', 'Urgence sanitaire Covid 19 - Accès aux soins'),
('urgence-sanitaire-alimentation', 'Urgence sanitaire Covid 19 - Alimentation'),
('urgence-sanitaire-hebergement', 'Urgence sanitaire Covid 19 - Hébergement'),
('urgence-sanitaire-quotidien', 'Urgence sanitaire Covid 19 - Services au quotidien'),
]
for tile, tile_label in tiles:
COMBO_ASSET_SLOTS['picture:%s' % tile] = {'label': u'Photographie %s' % tile_label}
if tile not in ('taxi', 'tcl', 'velov'):
COMBO_ASSET_SLOTS['picture:banner:%s' % tile] = {'label': u'Photographie/bannière %s' % tile_label}
import memcache
memcache.SERVER_MAX_VALUE_LENGTH = 10 * 1024 * 1024
SESSION_EXPIRE_AT_BROWSER_CLOSE = False

3
debian/python3-combo-plugin-gnm.cron.hourly vendored Executable file
View File

@ -0,0 +1,3 @@
#! /bin/sh
/sbin/runuser -u combo /usr/bin/combo-manage -- tenant_command gnm_update_settings --all-tenants