aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas "Cakeisalie5" Touhey <thomas@touhey.fr>2018-10-03 02:06:15 +0200
committerThomas "Cakeisalie5" Touhey <thomas@touhey.fr>2018-10-03 02:06:15 +0200
commita55a5cd710d91ebff438bef3fbd4a2cd748d94e6 (patch)
treedf51239fd3663de0622d55f8fd91c2f1f6c80b57
parent28639f99735430dc9a933a6bbd1885e4b783dca9 (diff)
Added functions.
-rwxr-xr-xsgdfi/__main__.py5
-rwxr-xr-xsgdfi/_dbs/__init__.py11
-rw-r--r--sgdfi/_dbs/_funcs.py504
-rwxr-xr-xsgdfi/_dbs/_ops.py327
-rwxr-xr-xsgdfi/_repr.py436
-rwxr-xr-x[-rw-r--r--]sgdfi/_version.py0
6 files changed, 922 insertions, 361 deletions
diff --git a/sgdfi/__main__.py b/sgdfi/__main__.py
index 27fda05..1132323 100755
--- a/sgdfi/__main__.py
+++ b/sgdfi/__main__.py
@@ -61,8 +61,9 @@ def test_load():
print()
if __name__ == '__main__':
- #test_repr()
- test_session()
+ test_repr()
+ #test_repr2()
+ #test_session()
#test_save()
#test_load()
diff --git a/sgdfi/_dbs/__init__.py b/sgdfi/_dbs/__init__.py
new file mode 100755
index 0000000..fbf8e53
--- /dev/null
+++ b/sgdfi/_dbs/__init__.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+#******************************************************************************
+# Copyright (C) 2018 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the sgdfi project, which is MIT-licensed.
+#******************************************************************************
+""" Databases for SGDFi. """
+
+from ._ops import OperationType, OperationTypeData
+from ._funcs import Function, FunctionData
+
+# End of file.
diff --git a/sgdfi/_dbs/_funcs.py b/sgdfi/_dbs/_funcs.py
new file mode 100644
index 0000000..32bbd9a
--- /dev/null
+++ b/sgdfi/_dbs/_funcs.py
@@ -0,0 +1,504 @@
+#!/usr/bin/env python3
+#******************************************************************************
+# Copyright (C) 2018 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the sgdfi project, which is MIT-licensed.
+#******************************************************************************
+""" Functions reference for SGDFi. """
+
+from enum import Enum as _Enum, unique as _unique
+
+__all__ = ["Function", "FunctionData"]
+
+@_unique
+class Function(_Enum):
+ """ Unknown function. """
+ UNKNOWN = 0
+
+ LOUVETEAU = 1
+ MOUSSAILLON = 2
+ SCOUT = 3
+ MOUSSE = 4
+ PIONNIER = 5
+ MARIN = 6
+ COMPAGNON = 7
+ COMPAGNON_MARIN = 8
+ COMPAGNON_3EME_TEMPS = 9
+ ECLAIREUR = 10
+ FARFADET = 11
+ MEMBRE_ASSOCIE_L = 12
+ MEMBRE_ASSOCIE_N = 13
+ MEMBRE_ASSOCIE_T = 14
+ VENT_DU_LARGE = 15
+ RESPONSABLE_D_UNITE_LOUVETEAU_JEANNETTE = 16
+ RESPONSABLE_D_UNITE_MOUSSAILLON = 17
+ CHEF_LOUVETEAU_JEANNETTE = 18
+ CHEF_MOUSSAILLON = 19
+ RESPONSABLE_D_UNITE_SCOUT_GUIDE = 20
+ RESPONSABLE_D_UNITE_MOUSSE = 21
+ CHEF_SCOUT_GUIDE = 22
+ CHEF_MOUSSE = 23
+ RESPONSABLE_D_UNITE_PIONNIER_CARAVELLE = 24
+ RESPONSABLE_D_UNITE_FLOTILLE_CARAVELLE_MARINE = 25
+ CHEF_PIONNIER_CARAVELLE = 26
+ CHEF_FLOTILLE_CARAVELLE_MARINE = 27
+ ACCOMPAGNATEUR_COMPAGNON = 28
+ RESPONSABLE_FARFADET = 29
+ PARENT_ANIMATEUR_FARFADET = 30
+ RESPONSABLE_VENT_DU_LARGE = 31
+ RESPONSABLE_DE_GROUPE = 32
+ RESPONSABLE_DE_GROUPE_ADJOINT = 33
+ AUMONIER_DE_GROUPE = 34
+ SECRETAIRE_DE_GROUPE = 35
+ TRESORIER_DE_GROUPE = 36
+ ANIMATEUR_CLEOPHAS_L = 37
+ CHARGE_DE_MISSION__DU_GROUPE = 38
+ REFERENT_TECHNIQUE_MARIN = 39
+ REPRESENTANT_ASSOCIATIF = 40
+ OUVREUR_DE_GROUPE_L = 41
+ DIRECTEUR_DE_CAMP = 42
+ RESPONSABLE_LOCAL_DEVELOPPEMENT_ET_RESEAUX = 43
+ FF_TRESORIER_DE_GROUPE = 44
+ NOMINATION_DES_CHEFS_ET_EQUIPIERS_DE_GROUPE = 45
+ FF_RESPONSABLE_DE_GROUPE = 46
+ DELEGUE_TERRITORIAL = 47
+ DELEGUE_TERRITORIAL_ADJOINT = 48
+ AUMONIER_TERRITORIAL = 49
+ RESPONSABLE_POLE_PEDAGOGIQUE = 50
+ RESPONSABLE_POLE_DEVELOPPEMENT = 51
+ RESPONSABLE_POLE_ADMINISTRATIF_ET_FINANCIER = 52
+ FF_RESPONSABLE_POLE_ADMINISTRATIF_ET_FINANCIER = 53
+ NOMINATION_DES_EQUIPIERS_TERRITORIAUX = 54
+ FF_DELEGUE_TERRITORIAL = 55
+ ACCOMPAGNATEUR_PEDAGOGIQUE = 56
+ AUMONIER_DIOCESAIN = 57
+ ACCOMPAGNATEUR_DES_RESPONSABLES_DE_GROUPE = 58
+ ANIMATEUR_CLEOPHAS_T = 59
+ CHARGE_MISSION_DEVELOPPEMENT = 60
+ COORDINATEUR_DEVELOPPEMENT_ET_RESEAUX = 61
+ OUVREUR_DE_GROUPE_T = 62
+ RESPONSABLE_RECRUTEMENT = 63
+ RESPONSABLE_PARTENARIATS_FINANCIERS = 64
+ RESPONSABLE_COMMUNICATION = 65
+ CORRESPONDANT_HANDICAP = 66
+ RESPONSABLE_SCOUTISME_EN_QUARTIER = 67
+ CHARGE_MISSION_TERRITORIAL = 68
+ MEDIATEUR_T = 69
+ REPRESENTANT_ASSOCIATIF_L = 70
+ RESPONSABLE_BOUTIQUE_SGDF = 71
+ DIRECTEUR_DE_CAMP_TERRITORIAL = 72
+ TRESORIER_DE_BOUTIQUE = 73
+ CHARGE_DE_MISSION_RASSEMBLEMENT = 74
+ CHARGE_MISSION_ADMINISTRATIF = 75
+ GESTIONNAIRE_MATERIEL_ET_LOGISTIQUE = 76
+ TRESORIER_DE_BASE = 77
+ EQUIPIER_DE_BASE = 78
+ RESPONSABLE_DE_BASE = 79
+ SECRETAIRE_TERRITORIAL = 80
+ CHARGE_DE_MISSION_RW2016_T = 81
+ TRESORIER_TERRITORIAL = 82
+ FF_TRESORIER_TERRITORIAL = 83
+ DIRECTEUR_DE_STAGE = 84
+ DIRECTEUR_DE_CAMP_GROUPE = 85
+ VOLONTAIRE_SERVICE_CIVIQUE = 86
+ VOLONTAIRE_SERVICE_INTERNATIONAL = 87
+ DELEGUE_GENERAL = 88
+ DELEGUE_GENERAL_ADJOINT = 89
+ AUMONIER_GENERAL = 90
+ DELEGUE_NATIONAL = 91
+ RESPONSABLE_NATIONAL = 92
+ AUMONIER_NATIONAL = 93
+ EQUIPIER_NATIONAL = 94
+ RESPONSABLE_DE_LA_FORMATION_CR = 95
+ CHARGE_MISSION = 96
+ CHARGE_MISSION_PAYS = 97
+ ADMINISTRATEUR = 98
+ MEMBRE_D_HONNEUR = 99
+ MEDIATEUR_N = 100
+ REPRESENTANT_ASSOCIATIF_T = 101
+ SALARIE = 102
+ SALARIE_FORMATION = 103
+ SALARIE_SERVICE_INTERNATIONAL = 104
+ CONSULTANT_BATEAU = 105
+ ASSISTANT_DE_SAISIE = 106
+ CHARGE_DE_MISSION_RW2016_N = 107
+ CHARGE_DE_MISSION_RASSEMBLEMENT_EN = 108
+ ADMINISTRATEUR_MODULE_FORMATION = 109
+ CONSULTANT_INTEGRATION = 110
+ SALARIE_COMPTABILITE = 111
+ SALARIE_ASSURANCE = 112
+ ADMINISTRATEUR_ASSURANCE = 113
+ SALARIE_CENTRE_DE_RESSOURCES = 114
+ ADMINISTRATEUR_COMPTABILITE = 115
+ DIRECTEUR_DE_CENTRE_DE_RESSOURCES = 116
+ RESPONSABLE_ADMINISTRATIF_CR = 117
+ ANIMATION_TERRITORIALE_ET_DEVELOPPEMENT = 118
+ ADMINISTRATEUR_INTRANET = 119
+ MONITORING_APPLICATIF = 120
+
+# Each entry in `FunctionData` has the function identifier as the key, and
+# a data composed of the following components:
+# - `c`: the intranet code (e.g. "120", "110M", "9XX", …).
+# - `ii`: the intranet internal identifier (e.g. "8434", "8437", …).
+# - `nm`: the masculin name for the function.
+# - `nf` (opt.): the feminine name for the function.
+
+_FunctionData = {
+ Function.LOUVETEAU: ("110", 8434, 'LOUVETEAU', 'JEANNETTE'),
+ Function.MOUSSAILLON: ("110M", 8435, 'MOUSSAILLON'),
+ Function.SCOUT: ("120", 8440, 'SCOUT', 'GUIDE'),
+ Function.MOUSSE: ("120M", 8441, 'MOUSSE'),
+ Function.PIONNIER: ("130", 8487, 'PIONNIER', 'CARAVELLE'),
+ Function.MARIN: ("130M", 8488, 'MARIN', 'CARAVELLE MARINE'),
+ Function.COMPAGNON: ("140", 8493, 'COMPAGNON'),
+ Function.COMPAGNON_MARIN: ("140M", 8494, 'COMPAGNON MARIN'),
+ Function.COMPAGNON_3EME_TEMPS: ("141", 8495, 'COMPAGNON 3EME TEMPS'),
+ Function.ECLAIREUR: ("150", 8501, 'ECLAIREUR', 'ECLAIREUSE'),
+ Function.FARFADET: ("170", 8497, 'FARFADET'),
+ Function.MEMBRE_ASSOCIE_L: ("180L", 8439, 'MEMBRE ASSOCIE',
+ 'MEMBRE ASSOCIEE'),
+ Function.MEMBRE_ASSOCIE_N: ("180N", 8445, 'MEMBRE ASSOCIE',
+ 'MEMBRE ASSOCIEE'),
+ Function.MEMBRE_ASSOCIE_T: ("180T", 8438, 'MEMBRE ASSOCIE',
+ 'MEMBRE ASSOCIEE'),
+ Function.VENT_DU_LARGE: ("193", 8499, 'VENT DU LARGE'),
+ Function.RESPONSABLE_D_UNITE_LOUVETEAU_JEANNETTE: ("210", 8436,
+ "RESPONSABLE D'UNITE LOUVETEAU JEANNETTE"),
+ Function.RESPONSABLE_D_UNITE_MOUSSAILLON: ("210M", 8550,
+ "RESPONSABLE D'UNITE MOUSSAILLON"),
+ Function.CHEF_LOUVETEAU_JEANNETTE: ("213", 8551,
+ 'CHEF LOUVETEAU JEANNETTE', 'CHEFTAINE LOUVETEAU JEANNETTE'),
+ Function.CHEF_MOUSSAILLON: ("213M", 8552, 'CHEF MOUSSAILLON',
+ 'CHEFTAINE MOUSSAILLON'),
+ Function.RESPONSABLE_D_UNITE_SCOUT_GUIDE: ("220", 8442,
+ "RESPONSABLE D'UNITE SCOUT GUIDE"),
+ Function.RESPONSABLE_D_UNITE_MOUSSE: ("220M", 8484,
+ "RESPONSABLE D'UNITE MOUSSE"),
+ Function.CHEF_SCOUT_GUIDE: ("223", 8485, 'CHEF SCOUT GUIDE',
+ 'CHEFTAINE SCOUT GUIDE'),
+ Function.CHEF_MOUSSE: ("223M", 8486, 'CHEF MOUSSE',
+ 'CHEFTAINE MOUSSE'),
+ Function.RESPONSABLE_D_UNITE_PIONNIER_CARAVELLE: ("230", 8489,
+ "RESPONSABLE D'UNITE PIONNIER CARAVELLE"),
+ Function.RESPONSABLE_D_UNITE_FLOTILLE_CARAVELLE_MARINE: ("230M", 8490,
+ "RESPONSABLE D'UNITE FLOTILLE - CARAVELLE MARINE"),
+ Function.CHEF_PIONNIER_CARAVELLE: ("233", 8491,
+ 'CHEF PIONNIER CARAVELLE', 'CHEFTAINE PIONNIER CARAVELLE'),
+ Function.CHEF_FLOTILLE_CARAVELLE_MARINE: ("233M", 8492,
+ 'CHEF FLOTILLE - CARAVELLE MARINE',
+ 'CHEFTAINE FLOTILLE - CARAVELLE MARINE'),
+ Function.ACCOMPAGNATEUR_COMPAGNON: ("240", 8496,
+ 'ACCOMPAGNATEUR COMPAGNON', 'ACCOMPAGNATRICE COMPAGNON'),
+ Function.RESPONSABLE_FARFADET: ("270", 8498, 'RESPONSABLE FARFADET'),
+ Function.PARENT_ANIMATEUR_FARFADET: ("271", 8554,
+ 'PARENT ANIMATEUR FARFADET'),
+ Function.RESPONSABLE_VENT_DU_LARGE: ("293", 8500,
+ 'RESPONSABLE VENT DU LARGE'),
+ Function.RESPONSABLE_DE_GROUPE: ("300", 8502,
+ 'RESPONSABLE DE GROUPE'),
+ Function.RESPONSABLE_DE_GROUPE_ADJOINT: ("301", 8503,
+ 'RESPONSABLE DE GROUPE ADJOINT', 'RESPONSABLE DE GROUPE ADJOINTE'),
+ Function.AUMONIER_DE_GROUPE: ("302", 8504, 'AUMONIER DE GROUPE'),
+ Function.SECRETAIRE_DE_GROUPE: ("307", 8506, 'SECRETAIRE DE GROUPE'),
+ Function.TRESORIER_DE_GROUPE: ("309", 8508, 'TRESORIER DE GROUPE',
+ 'TRESORIERE DE GROUPE'),
+ Function.ANIMATEUR_CLEOPHAS_L: ("316", 8509, 'ANIMATEUR CLEOPHAS',
+ 'ANIMATRICE CLEOPHAS'),
+ Function.CHARGE_DE_MISSION__DU_GROUPE: ("330", 8511,
+ 'CHARGE DE MISSION DU GROUPE', 'CHARGEE DE MISSION DU GROUPE'),
+ Function.REFERENT_TECHNIQUE_MARIN: ("330M", 8512,
+ 'REFERENT TECHNIQUE MARIN', 'REFERENTE TECHNIQUE MARIN'),
+ Function.REPRESENTANT_ASSOCIATIF_L: ("332", 8513,
+ 'REPRESENTANT ASSOCIATIF'),
+ Function.OUVREUR_DE_GROUPE_L: ("333", 8516, 'OUVREUR DE GROUPE'),
+ Function.DIRECTEUR_DE_CAMP: ("351", 8517, 'DIRECTEUR DE CAMP',
+ 'DIRECTRICE DE CAMP'),
+ Function.RESPONSABLE_LOCAL_DEVELOPPEMENT_ET_RESEAUX: ("380", 8518,
+ 'RESPONSABLE LOCAL DEVELOPPEMENT ET RESEAUX'),
+ Function.FF_TRESORIER_DE_GROUPE: ("391", 8519,
+ 'FF TRESORIER DE GROUPE', 'FF TRESORIERE DE GROUPE'),
+ Function.NOMINATION_DES_CHEFS_ET_EQUIPIERS_DE_GROUPE: ("397", 8480,
+ 'NOMINATION DES CHEFS ET EQUIPIERS DE GROUPE'),
+ Function.FF_RESPONSABLE_DE_GROUPE: ("399", 8520,
+ 'FF RESPONSABLE DE GROUPE'),
+ Function.DELEGUE_TERRITORIAL: ("500", 8482, 'DELEGUE TERRITORIAL',
+ 'DELEGUEE TERRITORIALE'),
+ Function.DELEGUE_TERRITORIAL_ADJOINT: ("501", 8481,
+ 'DELEGUE TERRITORIAL ADJOINT', 'DELEGUEE TERRITORIALE ADJOINTE'),
+ Function.AUMONIER_TERRITORIAL: ("502", 8505, 'AUMONIER TERRITORIAL'),
+ Function.RESPONSABLE_POLE_PEDAGOGIQUE: ("503", 8521,
+ 'RESPONSABLE POLE PEDAGOGIQUE'),
+ Function.RESPONSABLE_POLE_DEVELOPPEMENT: ("504", 8522,
+ 'RESPONSABLE POLE DEVELOPPEMENT'),
+ Function.RESPONSABLE_POLE_ADMINISTRATIF_ET_FINANCIER: ("505", 8515,
+ 'RESPONSABLE POLE ADMINISTRATIF ET FINANCIER'),
+ Function.FF_RESPONSABLE_POLE_ADMINISTRATIF_ET_FINANCIER: ("591", 8514,
+ 'FF RESPONSABLE POLE ADMINISTRATIF ET FINANCIER'),
+ Function.NOMINATION_DES_EQUIPIERS_TERRITORIAUX: ("597", 8507,
+ 'NOMINATION DES EQUIPIERS TERRITORIAUX'),
+ Function.FF_DELEGUE_TERRITORIAL: ("598", 8483,
+ 'FF DELEGUE TERRITORIAL', 'FF DELEGUEE TERRITORIALE'),
+ Function.ACCOMPAGNATEUR_PEDAGOGIQUE: ("600", 8523,
+ 'ACCOMPAGNATEUR PEDAGOGIQUE', 'ACCOMPAGNATRICE PEDAGOGIQUE'),
+ Function.AUMONIER_DIOCESAIN: ("602", 8510, 'AUMONIER DIOCESAIN'),
+ Function.ACCOMPAGNATEUR_DES_RESPONSABLES_DE_GROUPE: ("609", 8524,
+ 'ACCOMPAGNATEUR DES RESPONSABLES DE GROUPE'),
+ Function.ANIMATEUR_CLEOPHAS_T: ("616", 8525, 'ANIMATEUR CLEOPHAS',
+ 'ANIMATRICE CLEOPHAS'),
+ Function.CHARGE_MISSION_DEVELOPPEMENT: ("620", 8526,
+ 'CHARGE MISSION DEVELOPPEMENT', 'CHARGEE MISSION DEVELOPPEMENT'),
+ Function.COORDINATEUR_DEVELOPPEMENT_ET_RESEAUX: ("621", 8527,
+ 'COORDINATEUR DEVELOPPEMENT ET RESEAUX',
+ 'COORDINATRICE DEVELOPPEMENT ET RESEAUX'),
+ Function.OUVREUR_DE_GROUPE_T: ("622", 8528, 'OUVREUR DE GROUPE'),
+ Function.RESPONSABLE_RECRUTEMENT: ("623", 8529,
+ 'RESPONSABLE RECRUTEMENT'),
+ Function.RESPONSABLE_PARTENARIATS_FINANCIERS: ("624", 8530,
+ 'RESPONSABLE PARTENARIATS FINANCIERS'),
+ Function.RESPONSABLE_COMMUNICATION: ("625", 8531,
+ 'RESPONSABLE COMMUNICATION'),
+ Function.CORRESPONDANT_HANDICAP: ("626", 8532,
+ 'CORRESPONDANT HANDICAP'),
+ Function.RESPONSABLE_SCOUTISME_EN_QUARTIER: ("627", 8533,
+ 'RESPONSABLE SCOUTISME EN QUARTIER'),
+ Function.CHARGE_MISSION_TERRITORIAL: ("630", 8534,
+ 'CHARGE MISSION TERRITORIAL', 'CHARGEE MISSION TERRITORIALE'),
+ Function.MEDIATEUR_T: ("631", 8535, 'MEDIATEUR', 'MEDIATRICE'),
+ Function.REPRESENTANT_ASSOCIATIF_T: ("632", 8536,
+ 'REPRESENTANT ASSOCIATIF', 'REPRESENTANTE ASSOCIATIF'),
+ Function.RESPONSABLE_BOUTIQUE_SGDF: ("650", 8537,
+ 'RESPONSABLE BOUTIQUE SGDF'),
+ Function.DIRECTEUR_DE_CAMP_TERRITORIAL: ("651", 8538,
+ 'DIRECTEUR DE CAMP TERRITORIAL', 'DIRECTRICE DE CAMP TERRITORIAL'),
+ Function.TRESORIER_DE_BOUTIQUE: ("652", 8539, 'TRESORIER DE BOUTIQUE',
+ 'TRESORIERE DE BOUTIQUE'),
+ Function.CHARGE_DE_MISSION_RASSEMBLEMENT: ("659", 8540,
+ 'CHARGE DE MISSION RASSEMBLEMENT'),
+ Function.CHARGE_MISSION_ADMINISTRATIF: ("660", 8541,
+ 'CHARGE MISSION ADMINISTRATIF', 'CHARGEE MISSION ADMINISTRATIF'),
+ Function.GESTIONNAIRE_MATERIEL_ET_LOGISTIQUE: ("661", 8542,
+ 'GESTIONNAIRE MATERIEL ET LOGISTIQUE'),
+ Function.TRESORIER_DE_BASE: ("663", 8543, 'TRESORIER DE BASE',
+ 'TRESORIERE DE BASE'),
+ Function.EQUIPIER_DE_BASE: ("664", 8544, 'EQUIPIER DE BASE',
+ 'EQUIPIERE DE BASE'),
+ Function.RESPONSABLE_DE_BASE: ("665", 8545, 'RESPONSABLE DE BASE'),
+ Function.SECRETAIRE_TERRITORIAL: ("670", 8546,
+ 'SECRETAIRE TERRITORIAL', 'SECRETAIRE TERRITORIALE'),
+ Function.CHARGE_DE_MISSION_RW2016_T: ("685", 8547,
+ 'CHARGE DE MISSION RW2016 T', 'CHARGEE DE MISSION RW2016 T'),
+ Function.TRESORIER_TERRITORIAL: ("690", 8548, 'TRESORIER TERRITORIAL',
+ 'TRESORIERE TERRITORIALE'),
+ Function.FF_TRESORIER_TERRITORIAL: ("691", 8549,
+ 'FF TRESORIER TERRITORIAL', 'FF TRESORIERE TERRITORIAL'),
+ Function.DIRECTEUR_DE_STAGE: ("850", 8446, 'DIRECTEUR DE STAGE',
+ 'DIRECTRICE DE STAGE'),
+ Function.DIRECTEUR_DE_CAMP_GROUPE: ("851", 8447,
+ 'DIRECTEUR DE CAMP GROUPE', 'DIRECTRICE DE CAMP GROUPE'),
+ Function.VOLONTAIRE_SERVICE_CIVIQUE: ("860", 8451,
+ 'VOLONTAIRE SERVICE CIVIQUE'),
+ Function.VOLONTAIRE_SERVICE_INTERNATIONAL: ("861", 8452,
+ 'VOLONTAIRE SERVICE INTERNATIONAL'),
+ Function.DELEGUE_GENERAL: ("900", 8449, 'DELEGUE GENERAL',
+ 'DELEGUEE GENERALE'),
+ Function.DELEGUE_GENERAL_ADJOINT: ("901", 8450,
+ 'DELEGUE GENERAL ADJOINT', 'DELEGUEE GENERALE ADJOINTE'),
+ Function.AUMONIER_GENERAL: ("902", 8453, 'AUMONIER GENERAL'),
+ Function.DELEGUE_NATIONAL: ("903", 8454, 'DELEGUE NATIONAL',
+ 'DELEGUEE NATIONALE'),
+ Function.RESPONSABLE_NATIONAL: ("910", 8448, 'RESPONSABLE NATIONAL',
+ 'RESPONSABLE NATIONALE'),
+ Function.AUMONIER_NATIONAL: ("911", 8455, 'AUMONIER NATIONAL'),
+ Function.EQUIPIER_NATIONAL: ("912", 8456, 'EQUIPIER NATIONAL',
+ 'EQUIPIERE NATIONALE'),
+ Function.RESPONSABLE_DE_LA_FORMATION_CR: ("913", 8457,
+ 'RESPONSABLE DE LA FORMATION CR'),
+ Function.CHARGE_MISSION: ("914", 8458, 'CHARGE MISSION',
+ 'CHARGEE MISSION'),
+ Function.CHARGE_MISSION_PAYS: ("915", 8459, 'CHARGE MISSION PAYS',
+ 'CHARGEE MISSION PAYS'),
+ Function.ADMINISTRATEUR: ("920", 8460, 'ADMINISTRATEUR',
+ 'ADMINISTRATRICE'),
+ Function.MEMBRE_D_HONNEUR: ("921", 8461, 'MEMBRE D HONNEUR'),
+ Function.MEDIATEUR_N: ("931", 8462, 'MEDIATEUR', 'MEDIATRICE'),
+ Function.REPRESENTANT_ASSOCIATIF: ("932", 8463,
+ 'REPRESENTANT ASSOCIATIF', 'REPRESENTANTE ASSOCIATIF'),
+ Function.SALARIE: ("980", 8464, 'SALARIE', 'SALARIEE'),
+ Function.SALARIE_FORMATION: ("981", 8465, 'SALARIE FORMATION',
+ 'SALARIEE FORMATION'),
+ Function.SALARIE_SERVICE_INTERNATIONAL: ("982", 8466,
+ 'SALARIE SERVICE INTERNATIONAL', 'SALARIEE SERVICE INTERNATIONAL'),
+ Function.CONSULTANT_BATEAU: ("983", 8467, 'CONSULTANT BATEAU',
+ 'CONSULTANTE BATEAU'),
+ Function.ASSISTANT_DE_SAISIE: ("984", 8468, 'ASSISTANT DE SAISIE',
+ 'ASSISTANTE DE SAISIE'),
+ Function.CHARGE_DE_MISSION_RW2016_N: ("985", 8469,
+ 'CHARGE DE MISSION RW2016 N', 'CHARGEE DE MISSION RW2016 N'),
+ Function.CHARGE_DE_MISSION_RASSEMBLEMENT_EN: ("987", 8470,
+ 'CHARGE DE MISSION RASSEMBLEMENT EN',
+ 'CHARGEE DE MISSION RASSEMBLEMENT EN'),
+ Function.ADMINISTRATEUR_MODULE_FORMATION: ("989", 8471,
+ 'ADMINISTRATEUR MODULE FORMATION', 'ADMINISTRATRICE MODULE FORMATION'),
+ Function.CONSULTANT_INTEGRATION: ("990", 8472,
+ 'Consultant Intégration', 'Consultante Intégration'),
+ Function.SALARIE_COMPTABILITE: ("991", 8473, 'SALARIE COMPTABILITE',
+ 'SALARIEE COMPTABILITE'),
+ Function.SALARIE_ASSURANCE: ("992", 8474, 'SALARIE ASSURANCE',
+ 'SALARIEE ASSURANCE'),
+ Function.ADMINISTRATEUR_ASSURANCE: ("993", 8475,
+ 'ADMINISTRATEUR ASSURANCE', 'ADMINISTRATRICE ASSURANCE'),
+ Function.SALARIE_CENTRE_DE_RESSOURCES: ("994", 8476,
+ 'SALARIE CENTRE DE RESSOURCES', 'SALARIEE CENTRE DE RESSOURCES'),
+ Function.ADMINISTRATEUR_COMPTABILITE: ("995", 8477,
+ 'ADMINISTRATEUR COMPTABILITE', 'ADMINISTRATRICE COMPTABILITE'),
+ Function.DIRECTEUR_DE_CENTRE_DE_RESSOURCES: ("996", 8478,
+ 'DIRECTEUR DE CENTRE DE RESSOURCES',
+ 'DIRECTRICE DE CENTRE DE RESSOURCES'),
+ Function.RESPONSABLE_ADMINISTRATIF_CR: ("997", 8444,
+ 'RESPONSABLE ADMINISTRATIF CR', 'RESPONSABLE ADMINISTRATIVE CR'),
+ Function.ANIMATION_TERRITORIALE_ET_DEVELOPPEMENT: ("998", 8443,
+ 'ANIMATION TERRITORIALE ET DEVELOPPEMENT'),
+ Function.ADMINISTRATEUR_INTRANET: ("999", 8437,
+ 'ADMINISTRATEUR INTRANET', 'ADMINISTRATRICE INTRANET'),
+ Function.MONITORING_APPLICATIF: ("9XX", 8479,
+ 'Monitoring applicatif'),
+}
+
+def _isint(value):
+ try:
+ int(value)
+ except:
+ return False
+ return True
+
+# Leads are:
+# - the masculine noun (e.g. "LOUVETEAU").
+# - the feminine noun (e.g. "JEANETTE").
+# - the integer internal identifier (e.g. 8434).
+# - a string version of the last.
+# - the code, e.g. "110".
+# - integer versions of the last ones.
+# - the full masculine string (e.g. "110 (LOUVETEAU)").
+# - the full feminine string (e.g. "110 (JEANETTE)").
+# - the full string (e.g. "110 (LOUVETEAU / JEANETTE)").
+
+_FunctionLeads = {}
+_FunctionLeads.update({nouns[0].strip().casefold(): i for i, (c, ii, *nouns) \
+ in _FunctionData.items()})
+_FunctionLeads.update({nouns[1].strip().casefold(): i for i, (c, ii, *nouns) \
+ in _FunctionData.items() if len(nouns) > 1})
+_FunctionLeads.update({ii: i for i, (c, ii, *nouns) in _FunctionData.items()})
+_FunctionLeads.update({str(ii): i for i, (c, ii, *nouns) \
+ in _FunctionData.items()})
+_FunctionLeads.update({c.casefold(): i for i, (c, ii, *nouns) \
+ in _FunctionData.items()})
+_FunctionLeads.update({int(c): i for i, (c, ii, *nouns) \
+ in _FunctionData.items() if _isint(c)})
+_FunctionLeads.update({f"{c} ({nouns[0]})".strip().casefold(): i \
+ for i, (c, ii, *nouns) in _FunctionData.items()})
+_FunctionLeads.update({f"{c} ({nouns[1]})".strip().casefold(): i \
+ for i, (c, ii, *nouns) in _FunctionData.items() if len(nouns) > 1})
+_FunctionLeads.update({f"{c} ({nouns[0]} / {nouns[1]})".strip().casefold(): i \
+ for i, (c, ii, *nouns) in _FunctionData.items() if len(nouns) > 1})
+
+def _isid(value):
+ try:
+ Function(value)
+ except:
+ return False
+ return True
+
+class FunctionData:
+ """ Function data (code, id, name, other). """
+
+ def __init__(self, value):
+ self.__id = None
+ self.__iid = None
+ self.__code = None
+ self.__nm = None
+ self.__nf = None
+ data = None
+
+ if isinstance(value, FunctionData):
+ self.__id = value.id
+ self.__iid = value.iid
+ self.__code = value.code
+ self.__nm = value.nm
+ self.__nf = value.nf
+
+ if self.__nm == self.__nf:
+ self.__nf = None
+ elif _isid(value):
+ value = Function(value)
+ self.__id = _FunctionCodes.get(value, UNKNOWN)
+ self.__code = value
+
+ data = _FunctionData.get(self.__id, None)
+ else:
+ # We suppose it's an intranet code such as "110", a private
+ # function code such as 8434, or a function name.
+
+ if type(value) == str:
+ value = value.strip().casefold()
+
+ try:
+ self.__id = _FunctionLeads[value]
+ except KeyError:
+ raise ValueError("Expected a valid function identifier.") \
+ from None
+
+ data = _FunctionData.get(self.__id, None)
+
+ if data is not None:
+ self.__code = data[0]
+ self.__iid = data[1]
+ self.__nm = data[2]
+ if len(data) > 2:
+ self.__nf = data[3]
+
+ def __repr__(self):
+ p = [f"id = {repr(self.__id)}"]
+ if self.__code is not None:
+ p.append(f"code = {repr(self.__code)}")
+ if self.__iid is not None:
+ p.append(f"iid = {repr(self.__iid)}")
+ if self.__nm is not None:
+ p.append(f"nm = {repr(self.__nm)}")
+ if self.__nf is not None:
+ p.append(f"nf = {repr(self.__nf)}")
+
+ return f"{self.__class__.__name__}({', '.join(p)})"
+
+ @property
+ def id(self):
+ """ The function identifier, as one of the functions defined in the
+ Function enumeration. """
+
+ return self.__id
+
+ @property
+ def iid(self):
+ """ The internal identifier within the intranet. """
+
+ return self.__iid
+
+ @property
+ def code(self):
+ """ The code within the intranet. """
+
+ return self.__code
+
+ @property
+ def nm(self):
+ """ The masculine noun for the function. """
+
+ return self.__nm
+
+ @property
+ def nf(self):
+ """ The feminine noun for the function. """
+
+ if self.__nf is None:
+ return self.__nm
+ return self.__nf
+
+# End of file.
diff --git a/sgdfi/_dbs/_ops.py b/sgdfi/_dbs/_ops.py
new file mode 100755
index 0000000..fdf8d0a
--- /dev/null
+++ b/sgdfi/_dbs/_ops.py
@@ -0,0 +1,327 @@
+#!/usr/bin/env python3
+#******************************************************************************
+# Copyright (C) 2018 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the sgdfi project, which is MIT-licensed.
+#******************************************************************************
+""" Operations reference for SGDFi. """
+
+from enum import Enum as _Enum, unique as _unique
+
+__all__ = ["OperationType", "OperationTypeData"]
+
+@_unique
+class OperationType(_Enum):
+ """ The default type (unknown). """
+ UNKNOWN = 0
+
+ """ Animation / Création d'une date. """
+ ANIM_DATE_NEW = 1
+
+ """ Animation / Modification d'une date. """
+ ANIM_DATE_EDIT = 2
+
+ """ Animation / Suppression d'une date. """
+ ANIM_DATE_DEL = 47
+
+ """ Bulletin d'adhésion / Impression locale d'un bulletin d'adhésion. """
+ BUL_PRINT = 3
+
+ """ Camp / Ajout d'un animateur à un camp. """
+ CAMP_ANIM_ADD = 4
+
+ """ Camp / Ajout d'un directeur à un camp. """
+ CAMP_DIR_ADD = 5
+
+ """ Camp / Ajout d'une étape d'itinéraire à un camp. """
+ CAMP_ITIN_ADD = 6
+
+ """ Camp / Commentaire pour le responsable d'accueil. """
+ CAMP_COMMENT = 7
+
+ """ Camp / Création d'un camp. """
+ CAMP_NEW = 8
+
+ """ Camp / Sauvegarde de fichier. """
+ CAMP_FILE_SAVE = 9
+
+ """ Camp / Suivi Jeunesse et Sports. """
+ CAMP_JS = 10
+
+ """ Camp / Suppression d'une étape d'itinéraire d'un camp. """
+ CAMP_ITIN_DEL = 11
+
+ """ Camp / Modification d'un animateur d'un camp. """
+ CAMP_ANIM_EDIT = 12
+
+ """ Camp / Modification d'un camp. """
+ CAMP_EDIT = 13
+
+ """ Camp / Modification d'une étape d'itinéraire d'un camp. """
+ CAMP_ITIN_EDIT = 14
+
+ """ Camp / Validation d'une étape d'un camp. """
+ CAMP_STEP_VAL = 15
+
+ """ Déclaration J&S / Affectation TAM d'un intervenant. """
+ JS_TAM_ASSIGN = 16
+
+ """ Déclaration J&S / Déclaration TAM d'un intervenant. """
+ JS_TAM_DECL = 17
+
+ """ Formation / Création d'une action de formation. """
+ TRAIN_NEW = 19
+
+ """ Formation / Envoi de notification. """
+ TRAIN_NOTIFY = 20
+
+ """ Formation / Modification d'une action de formation. """
+ TRAIN_EDIT = 21
+
+ """ Individu / Abonnement. """
+ IN_SUB = 48
+
+ """ Individu / Adhésion. """
+ IN_MEMBERSHIP = 22
+
+ """ Individu / Création. """
+ IN_NEW = 23
+
+ """ Individu / Demande de nomination. """
+ IN_NOMIN_REQUEST = 24
+
+ """ Individu / Edition de la carte d'adhérent. """
+ IN_CARD_EDIT = 25
+
+ """ Individu / Edition d'un reçu fiscal. """
+ IN_RECEIPT_EDIT = 26
+
+ """ Individu / Inscription. """
+ IN_REG = 27
+
+ """ Individu / Règlement de famille. """
+ IN_PAYMENT = 28
+
+ """ Individu / Validation demande de nomination. """
+ IN_NOMIN_REQUEST_VAL = 29
+
+ """ Individu / Validation nomination. """
+ IN_NOMIN_VAL = 30
+
+ """ Inscription / Annulation d'une demande d'inscription. """
+ REG_REQUEST_CAN = 31
+
+ """ Inscription / Création d'une demande d'inscription. """
+ REG_REQUEST_NEW = 32
+
+ """ Inscription / Validation d'une demande d'inscription. """
+ REG_REQUEST_VAL = 33
+
+ """ Inscription rassemblement / Création Demande. """
+ RALREG_REQUEST_NEW = 34
+
+ """ Inscription rassemblement / Validation Intermédiaire Demande. """
+ RALREG_REQUEST_MID_VAL = 35
+
+ """ Lieu d'activité / Création d'un lieu d'activité. """
+ PL_NEW = 36
+
+ """ Lieu d'activité / Modification d'un lieu d'activité. """
+ PL_EDIT = 37
+
+ """ Patrimoine / Assurance. """
+ PAT_INSURE = 38
+
+ """ Patrimoine / Demande d'assurance. """
+ PAT_INSURE_REQUEST = 39
+
+ """ Patrimoine / Modification. """
+ PAT_EDIT = 40
+
+ """ Projet pédagogique / Import d'un fichier matrice. """
+ PEDA_XLS_IMPORT = 41
+
+ """ Projet pédagogique / Suppression d'un fichier matrice. """
+ PEDA_XLS_DEL = 42
+
+ """ Structure / Création. """
+ ST_NEW = 43
+
+ """ Structure / Définition date début d'activité. """
+ ST_START = 44
+
+ """ Structure / Modification spécialités. """
+ ST_SPEC = 45
+
+ """ Structure / Recopie nouvelle saison. """
+ ST_COPY = 46
+
+ # TODO: other types (last index: 49).
+
+_OperationTypeIds = {
+ "Animation / Création d'une date": \
+ OperationType.ANIM_DATE_NEW,
+ "Animation / Modification d'une date": \
+ OperationType.ANIM_DATE_EDIT,
+ "Animation / Suppression d'une date": \
+ OperationType.ANIM_DATE_DEL,
+ "Bulletin d'adhésion / Impression locale d'un bulletin d'adhésion": \
+ OperationType.BUL_PRINT,
+ "Camp / Ajout d'un animateur à un camp": \
+ OperationType.CAMP_ANIM_ADD,
+ "Camp / Ajout d'un directeur à un camp": \
+ OperationType.CAMP_DIR_ADD,
+ "Camp / Ajout d'une étape d'itinéraire à un camp": \
+ OperationType.CAMP_ITIN_ADD,
+ "Camp / Commentaire pour le responsable d'accueil": \
+ OperationType.CAMP_COMMENT,
+ "Camp / Création d'un camp": \
+ OperationType.CAMP_NEW,
+ "Camp / Sauvegarde de fichier": \
+ OperationType.CAMP_FILE_SAVE,
+ "Camp / Suivi Jeunesse et Sports": \
+ OperationType.CAMP_JS,
+ "Camp / Suppression d'une étape d'itinéraire d'un camp": \
+ OperationType.CAMP_ITIN_DEL,
+ "Camp / Modification d'un animateur d'un camp": \
+ OperationType.CAMP_ANIM_EDIT,
+ "Camp / Modification d'un camp": \
+ OperationType.CAMP_EDIT,
+ "Camp / Modification d'une étape d'itinéraire d'un camp": \
+ OperationType.CAMP_ITIN_EDIT,
+ "Camp / Validation d'une étape d'un camp": \
+ OperationType.CAMP_STEP_VAL,
+ "Déclaration J&S / Affectation TAM d'un intervenant": \
+ OperationType.JS_TAM_ASSIGN,
+ "Déclaration J&S / Déclaration TAM d'un intervenant": \
+ OperationType.JS_TAM_DECL,
+ "Formation / Création d'une action de formation": \
+ OperationType.TRAIN_NEW,
+ "Formation / Envoi de notification": \
+ OperationType.TRAIN_NOTIFY,
+ "Formation / Modification d'une action de formation": \
+ OperationType.TRAIN_EDIT,
+ "Individu / Abonnement": \
+ OperationType.IN_SUB,
+ "Individu / Adhésion": \
+ OperationType.IN_MEMBERSHIP,
+ "Individu / Création": \
+ OperationType.IN_NEW,
+ "Individu / Demande de nomination": \
+ OperationType.IN_NOMIN_REQUEST,
+ "Individu / Edition de la carte d'adhérent": \
+ OperationType.IN_CARD_EDIT,
+ "Individu / Edition d'un reçu fiscal": \
+ OperationType.IN_RECEIPT_EDIT,
+ "Individu / Inscription": \
+ OperationType.IN_REG,
+ "Individu / Règlement de famille": \
+ OperationType.IN_PAYMENT,
+ "Individu / Validation demande de nomination": \
+ OperationType.IN_NOMIN_REQUEST_VAL,
+ "Individu / Validation nomination": \
+ OperationType.IN_NOMIN_VAL,
+ "Inscription / Annulation d'une demande d'inscription": \
+ OperationType.REG_REQUEST_CAN,
+ "Inscription / Création d'une demande d'inscription": \
+ OperationType.REG_REQUEST_NEW,
+ "Inscription / Validation d'une demande d'inscription": \
+ OperationType.REG_REQUEST_VAL,
+ "Inscription rassemblement / Création Demande": \
+ OperationType.RALREG_REQUEST_NEW,
+ "Inscription rassemblement / Validation Intermédiaire Demande": \
+ OperationType.RALREG_REQUEST_MID_VAL,
+ "Lieu d'activité / Création d'un lieu d'activité": \
+ OperationType.PL_NEW,
+ "Lieu d'activité / Modification d'un lieu d'activité": \
+ OperationType.PL_EDIT,
+ "Patrimoine / Assurance": \
+ OperationType.PAT_INSURE,
+ "Patrimoine / Demande d'assurance": \
+ OperationType.PAT_INSURE_REQUEST,
+ "Patrimoine / Modification": \
+ OperationType.PAT_EDIT,
+ "Projet pédagogique / Import d'un fichier matrice": \
+ OperationType.PEDA_XLS_IMPORT,
+ "Projet pédagogique / Suppression d'un fichier matrice": \
+ OperationType.PEDA_XLS_DEL,
+ "Structure / Création": \
+ OperationType.ST_NEW,
+ "Structure / Définition date début d'activité": \
+ OperationType.ST_START,
+ "Structure / Modification spécialités": \
+ OperationType.ST_SPEC,
+ "Structure / Recopie nouvelle saison": \
+ OperationType.ST_COPY,
+}
+
+_OperationTypeIds = {a.strip().casefold(): b \
+ for a, b in _OperationTypeIds.items()}
+_OperationTypeNames = {b: a for a, b in _OperationTypeIds.items()}
+
+class OperationTypeData:
+ """ Operation type data (name and id). """
+
+ def __init__(self, value):
+ def isid(id):
+ try:
+ OperationType(value)
+ except ValueError:
+ return False
+ return True
+
+ if isinstance(value, OperationTypeData):
+ self.__id = value.id
+ self.__name = name
+ elif isid(value):
+ value = OperationType(value)
+ self.__name = _OperationTypeNames.get(value, None)
+ self.__id = value
+ elif type(value) != str:
+ raise ValueError("Expected either a string, an OperationType " \
+ "or None.")
+ else:
+ self.__id = _OperationTypeIds.get(value.strip().casefold(),
+ OperationType.UNKNOWN)
+ self.__name = value
+
+ self.__ncmp = self.__name.strip().casefold() \
+ if self.__name is not None else None
+
+ def __repr__(self):
+ p = [f"id = {repr(self.__id)}"]
+ if self.__name is not None:
+ p.append(f"name = {repr(self.__name)}")
+
+ return f"{self.__class__.__name__}({', '.join(p)})"
+
+ def __eq__(self, value):
+ if isinstance(value, _OperationTypeData):
+ if value.name is None:
+ return self.__id == value.id
+ else:
+ return self.__ncmp == value.name.strip().casefold()
+ elif type(value) == str:
+ return self.__ncmp == value.strip().casefold()
+ else:
+ return self.__id == value
+
+ def __str__(self):
+ if self.__name is not None:
+ return self.__name
+ else:
+ return "Inconnu"
+
+ @property
+ def id(self):
+ """ The type identifier, as one of the operation types defined in the
+ OperationType enumeration. """
+
+ return self.__id
+
+ @property
+ def name(self):
+ """ The type name as defined in the operations journal. """
+
+ return self.__name
+
+# End of file.
diff --git a/sgdfi/_repr.py b/sgdfi/_repr.py
index c1c0ac7..d2f47da 100755
--- a/sgdfi/_repr.py
+++ b/sgdfi/_repr.py
@@ -12,361 +12,34 @@ from ._util import IID, Enum as _Enum, \
IIDProperty as _IIDProperty, DateProperty as _DateProperty, \
BoolProperty as _BoolProperty, EnumProperty as _EnumProperty, \
ArrayProperty as _ArrayProperty, TextProperty as _TextProperty
+from ._dbs import OperationType, OperationTypeData as _OperationTypeData, \
+ Function, FunctionData as _FunctionData
__all__ = ["IID", "Structure", "Adherent", "RallyRegistration", "Camp",
- "Place", "Operation", "OperationType"]
-
-class Structure(_Base):
- """ A structure (unit, group, territory, …). """
-
- iid = _IIDProperty()
- name = _TextProperty()
-
-class Adherent(_Base):
- """ A person who is part of the organization. """
-
- iid = _IIDProperty()
- name = _TextProperty()
-
-class RallyRegistration(_Base):
- """ A registration to an event common to several structures. """
-
- iid = _IIDProperty()
- name = _TextProperty()
-
-class Camp(_Base):
- """ A scout camp. """
-
- iid = _IIDProperty()
- name = _TextProperty()
-
-class Place(_Base):
- """ A place. """
-
- iid = _IIDProperty()
- name = _TextProperty()
- description = _TextProperty()
- address = _TextProperty(doc = "Lines for the address of the place.")
- postal_code = _TextProperty()
- town = _TextProperty(doc = "Name of the town to which the " \
- "place is related.")
- country = _TextProperty()
- department = _TextProperty(doc = "Name of the related " \
- "administrative department.")
- out_of_france = _BoolProperty()
- continent = _TextProperty(doc = "Name of the continent the place is in.")
- phone = _TextProperty()
- fax = _TextProperty()
- email = _TextProperty()
- js = _TextProperty(doc = "J&S number for the place.")
- hardwall = _BoolProperty(doc = "Does the place has permanent " \
- "installations? (hébergement en dur)")
- localnumber = _TextProperty()
- owner = _TextProperty()
- owner_address = _TextProperty()
- ign_num = _TextProperty(doc = "Related IGN map number.")
- car_access = _BoolProperty()
- closest_train_station = _TextProperty()
- closest_train_station_distance = _TextProperty()
- closest_bus_stop = _TextProperty()
- closest_bus_stop_distance = _TextProperty()
+ "Place", "Operation", "OperationType", "Function"]
# ---
-# Operations (called events on the intranet).
+# Specific properties.
# ---
-class OperationType(_Enum):
- """ The default type (unknown). """
- UNKNOWN = 0
-
- """ Animation / Création d'une date. """
- ANIM_DATE_NEW = 1
-
- """ Animation / Modification d'une date. """
- ANIM_DATE_EDIT = 2
-
- """ Animation / Suppression d'une date. """
- ANIM_DATE_DEL = 47
-
- """ Bulletin d'adhésion / Impression locale d'un bulletin d'adhésion. """
- BUL_PRINT = 3
-
- """ Camp / Ajout d'un animateur à un camp. """
- CAMP_ANIM_ADD = 4
-
- """ Camp / Ajout d'un directeur à un camp. """
- CAMP_DIR_ADD = 5
-
- """ Camp / Ajout d'une étape d'itinéraire à un camp. """
- CAMP_ITIN_ADD = 6
-
- """ Camp / Commentaire pour le responsable d'accueil. """
- CAMP_COMMENT = 7
-
- """ Camp / Création d'un camp. """
- CAMP_NEW = 8
-
- """ Camp / Sauvegarde de fichier. """
- CAMP_FILE_SAVE = 9
-
- """ Camp / Suivi Jeunesse et Sports. """
- CAMP_JS = 10
-
- """ Camp / Suppression d'une étape d'itinéraire d'un camp. """
- CAMP_ITIN_DEL = 11
-
- """ Camp / Modification d'un animateur d'un camp. """
- CAMP_ANIM_EDIT = 12
-
- """ Camp / Modification d'un camp. """
- CAMP_EDIT = 13
-
- """ Camp / Modification d'une étape d'itinéraire d'un camp. """
- CAMP_ITIN_EDIT = 14
-
- """ Camp / Validation d'une étape d'un camp. """
- CAMP_STEP_VAL = 15
-
- """ Déclaration J&S / Affectation TAM d'un intervenant. """
- JS_TAM_ASSIGN = 16
-
- """ Déclaration J&S / Déclaration TAM d'un intervenant. """
- JS_TAM_DECL = 17
-
- """ Formation / Création d'une action de formation. """
- TRAIN_NEW = 19
-
- """ Formation / Envoi de notification. """
- TRAIN_NOTIFY = 20
-
- """ Formation / Modification d'une action de formation. """
- TRAIN_EDIT = 21
-
- """ Individu / Abonnement. """
- IN_SUB = 48
-
- """ Individu / Adhésion. """
- IN_MEMBERSHIP = 22
+class _FunctionProperty(_Property):
+ """ Function. """
- """ Individu / Création. """
- IN_NEW = 23
-
- """ Individu / Demande de nomination. """
- IN_NOMIN_REQUEST = 24
-
- """ Individu / Edition de la carte d'adhérent. """
- IN_CARD_EDIT = 25
-
- """ Individu / Edition d'un reçu fiscal. """
- IN_RECEIPT_EDIT = 26
-
- """ Individu / Inscription. """
- IN_REG = 27
-
- """ Individu / Règlement de famille. """
- IN_PAYMENT = 28
+ def init(self):
+ self.__data = None
- """ Individu / Validation demande de nomination. """
- IN_NOMIN_REQUEST_VAL = 29
+ def get(self):
+ return self.__data
- """ Individu / Validation nomination. """
- IN_NOMIN_VAL = 30
+ def set(self, value):
+ if value is None:
+ self.__data = None
+ return
- """ Inscription / Annulation d'une demande d'inscription. """
- REG_REQUEST_CAN = 31
+ self.__data = _FunctionData(value)
- """ Inscription / Création d'une demande d'inscription. """
- REG_REQUEST_NEW = 32
-
- """ Inscription / Validation d'une demande d'inscription. """
- REG_REQUEST_VAL = 33
-
- """ Inscription rassemblement / Création Demande. """
- RALREG_REQUEST_NEW = 34
-
- """ Inscription rassemblement / Validation Intermédiaire Demande. """
- RALREG_REQUEST_MID_VAL = 35
-
- """ Lieu d'activité / Création d'un lieu d'activité. """
- PL_NEW = 36
-
- """ Lieu d'activité / Modification d'un lieu d'activité. """
- PL_EDIT = 37
-
- """ Patrimoine / Assurance. """
- PAT_INSURE = 38
-
- """ Patrimoine / Demande d'assurance. """
- PAT_INSURE_REQUEST = 39
-
- """ Patrimoine / Modification. """
- PAT_EDIT = 40
-
- """ Projet pédagogique / Import d'un fichier matrice. """
- PEDA_XLS_IMPORT = 41
-
- """ Projet pédagogique / Suppression d'un fichier matrice. """
- PEDA_XLS_DEL = 42
-
- """ Structure / Création. """
- ST_NEW = 43
-
- """ Structure / Définition date début d'activité. """
- ST_START = 44
-
- """ Structure / Modification spécialités. """
- ST_SPEC = 45
-
- """ Structure / Recopie nouvelle saison. """
- ST_COPY = 46
-
- # TODO: other types (last index: 49).
-
-_OperationTypeCodes = {
- "Animation / Création d'une date": \
- OperationType.ANIM_DATE_NEW,
- "Animation / Modification d'une date": \
- OperationType.ANIM_DATE_EDIT,
- "Animation / Suppression d'une date": \
- OperationType.ANIM_DATE_DEL,
- "Bulletin d'adhésion / Impression locale d'un bulletin d'adhésion": \
- OperationType.BUL_PRINT,
- "Camp / Ajout d'un animateur à un camp": \
- OperationType.CAMP_ANIM_ADD,
- "Camp / Ajout d'un directeur à un camp": \
- OperationType.CAMP_DIR_ADD,
- "Camp / Ajout d'une étape d'itinéraire à un camp": \
- OperationType.CAMP_ITIN_ADD,
- "Camp / Commentaire pour le responsable d'accueil": \
- OperationType.CAMP_COMMENT,
- "Camp / Création d'un camp": \
- OperationType.CAMP_NEW,
- "Camp / Sauvegarde de fichier": \
- OperationType.CAMP_FILE_SAVE,
- "Camp / Suivi Jeunesse et Sports": \
- OperationType.CAMP_JS,
- "Camp / Suppression d'une étape d'itinéraire d'un camp": \
- OperationType.CAMP_ITIN_DEL,
- "Camp / Modification d'un animateur d'un camp": \
- OperationType.CAMP_ANIM_EDIT,
- "Camp / Modification d'un camp": \
- OperationType.CAMP_EDIT,
- "Camp / Modification d'une étape d'itinéraire d'un camp": \
- OperationType.CAMP_ITIN_EDIT,
- "Camp / Validation d'une étape d'un camp": \
- OperationType.CAMP_STEP_VAL,
- "Déclaration J&S / Affectation TAM d'un intervenant": \
- OperationType.JS_TAM_ASSIGN,
- "Déclaration J&S / Déclaration TAM d'un intervenant": \
- OperationType.JS_TAM_DECL,
- "Formation / Création d'une action de formation": \
- OperationType.TRAIN_NEW,
- "Formation / Envoi de notification": \
- OperationType.TRAIN_NOTIFY,
- "Formation / Modification d'une action de formation": \
- OperationType.TRAIN_EDIT,
- "Individu / Abonnement": \
- OperationType.IN_SUB,
- "Individu / Adhésion": \
- OperationType.IN_MEMBERSHIP,
- "Individu / Création": \
- OperationType.IN_NEW,
- "Individu / Demande de nomination": \
- OperationType.IN_NOMIN_REQUEST,
- "Individu / Edition de la carte d'adhérent": \
- OperationType.IN_CARD_EDIT,
- "Individu / Edition d'un reçu fiscal": \
- OperationType.IN_RECEIPT_EDIT,
- "Individu / Inscription": \
- OperationType.IN_REG,
- "Individu / Règlement de famille": \
- OperationType.IN_PAYMENT,
- "Individu / Validation demande de nomination": \
- OperationType.IN_NOMIN_REQUEST_VAL,
- "Individu / Validation nomination": \
- OperationType.IN_NOMIN_VAL,
- "Inscription / Annulation d'une demande d'inscription": \
- OperationType.REG_REQUEST_CAN,
- "Inscription / Création d'une demande d'inscription": \
- OperationType.REG_REQUEST_NEW,
- "Inscription / Validation d'une demande d'inscription": \
- OperationType.REG_REQUEST_VAL,
- "Inscription rassemblement / Création Demande": \
- OperationType.RALREG_REQUEST_NEW,
- "Inscription rassemblement / Validation Intermédiaire Demande": \
- OperationType.RALREG_REQUEST_MID_VAL,
- "Lieu d'activité / Création d'un lieu d'activité": \
- OperationType.PL_NEW,
- "Lieu d'activité / Modification d'un lieu d'activité": \
- OperationType.PL_EDIT,
- "Patrimoine / Assurance": \
- OperationType.PAT_INSURE,
- "Patrimoine / Demande d'assurance": \
- OperationType.PAT_INSURE_REQUEST,
- "Patrimoine / Modification": \
- OperationType.PAT_EDIT,
- "Projet pédagogique / Import d'un fichier matrice": \
- OperationType.PEDA_XLS_IMPORT,
- "Projet pédagogique / Suppression d'un fichier matrice": \
- OperationType.PEDA_XLS_DEL,
- "Structure / Création": \
- OperationType.ST_NEW,
- "Structure / Définition date début d'activité": \
- OperationType.ST_START,
- "Structure / Modification spécialités": \
- OperationType.ST_SPEC,
- "Structure / Recopie nouvelle saison": \
- OperationType.ST_COPY,
-}
-
-_OperationTypeCodes = {a.strip().casefold(): b \
- for a, b in _OperationTypeCodes.items()}
-_OperationTypeNames = {b: a for a, b in _OperationTypeCodes.items()}
-
-class _OperationTypeData:
- """ Operation type data (name and id). """
-
- def __init__(self, code, name):
- self.__code = code
- self.__name = name
- self.__ncmp = name.strip().casefold() if name is not None else None
-
- def __repr__(self):
- p = [f"code = {repr(self.__code)}"]
- if self.__name is not None:
- p.append(f"name = {repr(self.__name)}")
-
- return f"{self.__class__.__name__}({', '.join(p)})"
-
- def __eq__(self, value):
- if isinstance(value, _OperationTypeData):
- if value.name is None:
- return self.__code == value.code
- else:
- return self.__ncmp == value.name.strip().casefold()
- elif type(value) == str:
- return self.__ncmp == value.strip().casefold()
- else:
- return self.__code == value
-
- def __str__(self):
- if self.__name is not None:
- return self.__name
- else:
- return "Inconnu"
-
- @property
- def code(self):
- """ The type code, as one of the operation types defined in the
- OperationType enumeration. """
-
- return self.__code
-
- @property
- def name(self):
- """ The type name as defined in the operations journal. """
-
- return self.__name
+ def delete(self):
+ self.__data = None
class _OperationTypeProperty(_Property):
""" Operation type. """
@@ -382,21 +55,7 @@ class _OperationTypeProperty(_Property):
self.__data = None
return
- try:
- value = OperationType(value)
- self.__data = _OperationTypeData(value,
- _OperationTypeNames.get(value, None))
- return
- except ValueError:
- pass
-
- if type(value) != str:
- raise ValueError("Expected either a string, an OperationType " \
- "or None.")
-
- can = value.strip().casefold()
- self.__data = _OperationTypeData(_OperationTypeCodes.get(can,
- OperationType.UNKNOWN), value)
+ self.__data = _OperationTypeData(value)
def delete(self):
self.__data = None
@@ -455,6 +114,65 @@ class _OperationFieldsProperty(_Property):
def delete(self):
self.__value = None
+# ---
+# Objects.
+# ---
+
+class Structure(_Base):
+ """ A structure (unit, group, territory, …). """
+
+ iid = _IIDProperty()
+ name = _TextProperty()
+
+class Adherent(_Base):
+ """ A person who is part of the organization. """
+
+ iid = _IIDProperty()
+ name = _TextProperty()
+
+class RallyRegistration(_Base):
+ """ A registration to an event common to several structures. """
+
+ iid = _IIDProperty()
+ name = _TextProperty()
+
+class Camp(_Base):
+ """ A scout camp. """
+
+ iid = _IIDProperty()
+ name = _TextProperty()
+
+class Place(_Base):
+ """ A place. """
+
+ iid = _IIDProperty()
+ name = _TextProperty()
+ description = _TextProperty()
+ address = _TextProperty(doc = "Lines for the address of the place.")
+ postal_code = _TextProperty()
+ town = _TextProperty(doc = "Name of the town to which the " \
+ "place is related.")
+ country = _TextProperty()
+ department = _TextProperty(doc = "Name of the related " \
+ "administrative department.")
+ out_of_france = _BoolProperty()
+ continent = _TextProperty(doc = "Name of the continent the place is in.")
+ phone = _TextProperty()
+ fax = _TextProperty()
+ email = _TextProperty()
+ js = _TextProperty(doc = "J&S number for the place.")
+ hardwall = _BoolProperty(doc = "Does the place has permanent " \
+ "installations? (hébergement en dur)")
+ localnumber = _TextProperty()
+ owner = _TextProperty()
+ owner_address = _TextProperty()
+ ign_num = _TextProperty(doc = "Related IGN map number.")
+ car_access = _BoolProperty()
+ closest_train_station = _TextProperty()
+ closest_train_station_distance = _TextProperty()
+ closest_bus_stop = _TextProperty()
+ closest_bus_stop_distance = _TextProperty()
+
class Operation(_Base):
""" An event on the website.. """
diff --git a/sgdfi/_version.py b/sgdfi/_version.py
index c56d555..c56d555 100644..100755
--- a/sgdfi/_version.py
+++ b/sgdfi/_version.py