This repository has been archived on 2023-02-22. You can view files and clone it, but cannot push or open issues or pull requests.
passerelle-atreal-openads/atreal_openads/json_schemas.py

398 lines
16 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# passerelle - uniform access to multiple data sources and services
# Copyright (C) 2018 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/>.
# TODO add string limits (maxLength)
JSON_SCHEMA_FILE = {
"description": "A file object",
"$id" : "#file",
"type": "object",
"properties": {
"content" : { "type": "string" },
"content_type": { "type": ["string","null"] },
"filename" : { "type": "string" }
},
"required": ["content","filename"]
}
JSON_SCHEMA_FILE_B64 = {
"description": "A file object encoded in base64",
"$id" : "#file",
"type": "object",
"properties": {
"b64_content" : { "type": "string" },
"content_type": { "type": ["string","null"] },
"filename" : { "type": "string" }
},
"required": ["b64_content","filename"]
}
JSON_SCHEMA_DATE_FRENCH = {
"type": "string",
"pattern": "^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/\d{4}$"
}
JSON_SCHEMA_CHECK_STATUS_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of an openADS 'connexion' test",
"type" : "object",
"properties": {
"response": { "type": "integer" }
},
"required": ["response"]
}
JSON_SCHEMA_CREATE_DOSSIER_IN = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Incoming request to create a 'dossier' in openADS.API",
"definitions": {
"refs-cadastrales": {
"description": "The 3 items of a 'cadastrale' reference",
"$id" : "#refs-cadastrales",
"type" : "array",
"items": {
"type": "string"
},
"minItems": 3,
"maxItems": 3
},
"file": JSON_SCHEMA_FILE,
"file_plan_cadastral": {
"description": "A 'plan cadastral' document file",
"anyOf": [{ "$ref": "#/definitions/file" }, { "type": "null" }]
}
},
"type": "object",
"properties": {
"fields": {
"type": "object",
"properties": {
"cerfa": {
"description": "A 'CERFA' PDF document file",
"type": "object",
"allOf": [{"$ref": "#/definitions/file" }]
},
"plan_cadastral_1": { "$ref": "#/definitions/file_plan_cadastral" },
"plan_cadastral_2": { "$ref": "#/definitions/file_plan_cadastral" },
"plan_cadastral_3": { "$ref": "#/definitions/file_plan_cadastral" },
"plan_cadastral_4": { "$ref": "#/definitions/file_plan_cadastral" },
"plan_cadastral_5": { "$ref": "#/definitions/file_plan_cadastral" },
"terrain_numero_voie" : { "type": "string" },
"terrain_nom_voie" : { "type": "string" },
"terrain_code_postal" : { "type": "string" },
"terrain_localite" : { "type": "string" },
"terrain_lieu_dit" : { "type": ["string","null"] },
"reference_cadastrale": {
"description": "A list of 'cadastrales' references",
"type": "array",
"items": { "$ref": "#/definitions/refs-cadastrales" }
},
"autres_parcelles": {
"type": "boolean"
},
"references_cadastrales": {
"description": "A list of 'cadastrales' references",
# conditionaly required and typed below
},
"proprietaire" : { "enum": ["Oui","Non"] },
"qualite" : { "type": "string" },
"denomination" : { }, # conditionaly required and typed below
"raison_sociale" : { }, # conditionaly required and typed below
"nom" : { "type": "string" },
"prenom" : { "type": "string" },
"numero_voie" : { "type": "string" },
"nom_voie" : { "type": "string" },
"code_postal" : { "type": "string" },
"localite" : { "type": "string" },
"lieu_dit" : { "type": ["string","null"] },
"mandataire_nom" : { }, # conditionaly required and typed below
"mandataire_prenom" : { }, # conditionaly required and typed below
"mandataire_numero_voie": { }, # conditionaly required and typed below
"mandataire_nom_voie" : { }, # conditionaly required and typed below
"mandataire_code_postal": { }, # conditionaly required and typed below
"mandataire_localite" : { }, # conditionaly required and typed below
"mandataire_lieu_dit" : { } # conditionaly required and typed below
},
# requirements
"required": [
"cerfa",
"terrain_numero_voie",
"terrain_nom_voie",
"terrain_code_postal",
"terrain_localite",
"reference_cadastrale",
"proprietaire",
"qualite",
"nom",
"prenom",
"numero_voie",
"nom_voie",
"code_postal",
"localite"
],
# conditional requirements
"allOf": [
{
# qualite
"anyOf": [
# if qualite == "Un particulier"
# "denomination" and "raison_sociale" are not required
# and must be null
{
"properties": {
"qualite": { "const": "Un particulier" },
"denomination" : { "type": "null" },
"raison_sociale": { "type": "null" }
}
},
# if qualite == "Une personne morale"
# "denomination" and "raison_sociale" are required
# and must be string
{
"properties": {
"qualite": { "const": "Une personne morale" },
"denomination" : { "type": "string" },
"raison_sociale": { "type": "string" }
},
"required": ["denomination","raison_sociale"]
}
]
},
{
# proprietaire
"anyOf": [
# if proprietaire == "Oui"
# all the mandataire fields are not required
# and must be null
{
"properties": {
"proprietaire": { "const": "Oui" },
"mandataire_nom" : { "type": "null" },
"mandataire_prenom" : { "type": "null" },
"mandataire_numero_voie": { "type": "null" },
"mandataire_nom_voie" : { "type": "null" },
"mandataire_code_postal": { "type": "null" },
"mandataire_localite" : { "type": "null" },
"mandataire_lieu_dit" : { "type": "null" }
}
},
# if proprietaire == "Non"
# all the mandataire fields are required (except the lieu_dit)
# and must be string
# and conditions are checked against mandataire_qualite
{
"properties": {
"proprietaire": { "const": "Non" },
"mandataire_nom" : { "type": "string" },
"mandataire_prenom" : { "type": "string" },
"mandataire_numero_voie": { "type": "string" },
"mandataire_nom_voie" : { "type": "string" },
"mandataire_code_postal": { "type": "string" },
"mandataire_localite" : { "type": "string" },
"mandataire_qualite" : { "type": "string" },
"mandataire_lieu_dit" : { "type": ["string","null"] }
},
"required": [
"mandataire_nom",
"mandataire_prenom",
"mandataire_numero_voie",
"mandataire_nom_voie",
"mandataire_code_postal",
"mandataire_localite",
"mandataire_qualite"
],
# mandataire_qualite
"anyOf": [
# if mandataire_qualite == "Un particulier"
# "mandataire_denomination" and "mandataire_raison_sociale" are not required
# and must be null
{
"properties": {
"mandataire_qualite": { "const": "Un particulier" },
"mandataire_denomination" : { "type": "null" },
"mandataire_raison_sociale": { "type": "null" }
}
},
# if mandataire_qualite == "Une personne morale"
# "mandataire_denomination" and "mandataire_raison_sociale" are required
# and must be string
{
"properties": {
"mandataire_qualite": { "const": "Une personne morale" },
"mandataire_denomination" : { "type": "string" },
"mandataire_raison_sociale": { "type": "string" }
},
"required": ["mandataire_denomination","mandataire_raison_sociale"]
}
]
}
]
},
{
# autres_parcelles
"anyOf": [
# if autres_parcelles == False
# "references_cadastrales" is not required
# and must be null
{
"properties": {
"autres_parcelles": { "const": False },
"references_cadastrales": { "type": "null" }
}
},
# if autres_parcelles == True
# "references_cadastrales" is required
# and must be of type "array" of "refs-cadastrales"
{
"properties": {
"autres_parcelles": { "const": True },
"references_cadastrales": {
"type": "array",
"items": { "$ref": "#/definitions/refs-cadastrales" }
}
},
"required": ["autres_parcelles", "references_cadastrales"]
}
]
}
]
}
},
"required": ["fields"]
}
JSON_SCHEMA_CREATE_DOSSIER_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of a 'dossier' creation in openADS.API",
"type" : "object",
"properties": {
"numero_dossier": { "type": "string" },
"recepisse": JSON_SCHEMA_FILE_B64
},
"required": ["numero_dossier", "recepisse"]
}
JSON_SCHEMA_GET_DOSSIER_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of a 'dossier' creation in openADS.API",
"type" : "object",
"properties": {
"etat" : { "type": "string" },
"date_depot" : JSON_SCHEMA_DATE_FRENCH,
"date_decision": JSON_SCHEMA_DATE_FRENCH,
"date_limite_instruction": JSON_SCHEMA_DATE_FRENCH,
"decision" : { "type": "string" }
},
"required": [
"etat",
"date_depot",
"date_decision",
"date_limite_instruction",
"decision"
]
}
JSON_SCHEMA_FORWARDFILE = {
"description": "A ForwardFile object (PDF document that must be forwarded to openADS)",
"$id" : "#forwardfile",
"type": "object",
"properties": {
"id" : { "type": "integer" },
"numero_demande" : { "type": "string" },
"numero_dossier" : { "type": "string" },
"type_fichier" : { "type": "string" },
"file_hash" : { "type": "string" },
"orig_filename" : { "type": "string" },
"content_type" : { "type": "string" },
"upload_status" : { "type": "string" },
"upload_attempt" : { "type": "integer" },
"upload_msg" : { "type": "string" },
"content_size" : { "type": "integer" },
"last_update_datetime": { "type": "string", "format": "date-time" }
},
"required": [
"id",
"numero_demande",
"numero_dossier",
"type_fichier",
"file_hash",
"orig_filename",
"content_type",
"upload_status",
"upload_attempt",
"upload_msg",
"content_size",
"last_update_datetime"
]
}
JSON_SCHEMA_GET_FWD_FILES_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of a request about the forwarding (detailled) of user files to openADS",
"type" : "array",
"items": { "$ref": "#/definitions/forwardfile" },
"definitions": {
"forwardfile" : JSON_SCHEMA_FORWARDFILE
}
}
JSON_SCHEMA_GET_FWD_FILE_STATUS = {
"description": "The status of a ForwardFile",
"$id" : "#forwardfile-status",
"type": "string",
"pattern": "^\[\w+\] .+ => .+$"
}
JSON_SCHEMA_GET_FWD_FILES_STATUS_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of a request about the forwarding (summarized) of user files to openADS",
"type" : "object",
"properties": {
"all_forwarded": { "type": "boolean" },
"pending" : { "type": "array", "items": { "$ref": "#/definitions/forwardfile-status" } },
"uploading": { "type": "array", "items": { "$ref": "#/definitions/forwardfile-status" } },
"success" : { "type": "array", "items": { "$ref": "#/definitions/forwardfile-status" } },
"failed" : { "type": "array", "items": { "$ref": "#/definitions/forwardfile-status" } }
},
"required": ["all_forwarded","pending","uploading","success","failed"],
"definitions": {
"forwardfile-status" : JSON_SCHEMA_GET_FWD_FILE_STATUS
}
}
JSON_SCHEMA_GET_COURRIER_OUT = {
"$schema": "http://json-schema.org/draft-07/schema#",
"title" : "Response of a 'courrier' from an openADS 'dossier'",
"type" : "object",
"properties": {
"courrier": JSON_SCHEMA_FILE_B64
},
"required": ["courrier"]
}