|
@@ -0,0 +1,81 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+# #
|
|
|
+# refpypmsi - Implémentation en python de refpmsi
|
|
|
+# @https://github.com/denisGustin/refpmsi refpmsi est un package crée par denisGustin
|
|
|
+# Ce package est sous license GPL
|
|
|
+# #
|
|
|
+
|
|
|
+import os
|
|
|
+import pandas as pd
|
|
|
+
|
|
|
+chemin_module = os.path.dirname(os.path.abspath(__file__))
|
|
|
+
|
|
|
+def refpypmsi (referentiel = '', periodepmsi = '', ignorer_periode_manquante = True):
|
|
|
+
|
|
|
+ '''
|
|
|
+ referentiel - fonction de récupération d'un référenciel
|
|
|
+
|
|
|
+ inputs :
|
|
|
+ referentiel, str : nom du référentiel à extraire, la liste des référentiels disponibles est accessible par la commande liste_refpypmsi
|
|
|
+ periodepmsi, int : année du référentiel, si l'année n'existe pas où le référentiel n'est pas daté, l'année est ignoré et l'ensemble des données sont retournés. Ce comportement peut être modifié à l'aide de l'option ignorer_periode_manquante.
|
|
|
+ ignorer_periode_manquante, boolean : si False, une erreur est renvoyé lorsque l'année sélectionnée n'existe pas, autrement, aucune l'erreur est ignoré et l'ensemble des données disponibles sont renvoyés.
|
|
|
+
|
|
|
+ output :
|
|
|
+ Pandas Dataframe : dataframe contenant le référentiel sélectionné
|
|
|
+ '''
|
|
|
+
|
|
|
+ chemin_refentiel = "/".join([
|
|
|
+ chemin_module,
|
|
|
+ 'inst/referentiels',
|
|
|
+ referentiel+".json.gz"
|
|
|
+ ])
|
|
|
+
|
|
|
+ if (os.path.exists(chemin_refentiel) == False):
|
|
|
+ # Déclenchement de l'erreur
|
|
|
+ if referentiel != 'liste_refpmsi':
|
|
|
+ # Referentiels attendus
|
|
|
+ liste_referentiels = liste_refpypmsi()
|
|
|
+
|
|
|
+ raise Exception("Référentiel invalide. Devrait être l'un des suivants : {}".format(
|
|
|
+ ", ".join(liste_referentiels)
|
|
|
+ ))
|
|
|
+ else:
|
|
|
+ raise Exception("Liste de référentiels inexistante, essayez de ré-installer le package.")
|
|
|
+
|
|
|
+
|
|
|
+ # Chargement du référentiel
|
|
|
+ donnees_referentiel = pd.read_json(chemin_refentiel)
|
|
|
+
|
|
|
+ # Filtre par année quand nécessaire
|
|
|
+ if (periodepmsi != ''):
|
|
|
+ if type(periodepmsi) != type(list()):
|
|
|
+ periodepmsi = [periodepmsi] # On s'assure que c'est une liste
|
|
|
+ periodepmsi = [int(x) for x in periodepmsi] # On s'assure que c'est du int
|
|
|
+
|
|
|
+ if (('anpmsi' not in donnees_referentiel.columns) or (sum(donnees_referentiel["anpmsi"].isin(periodepmsi)) > 0)):
|
|
|
+ donnees_referentiel = donnees_referentiel[donnees_referentiel["anpmsi"].isin(periodepmsi)] \
|
|
|
+ .reset_index(drop = True)
|
|
|
+ else:
|
|
|
+ if ignorer_periode_manquante == False:
|
|
|
+ raise Exception("Année de référentiel invalide.")
|
|
|
+
|
|
|
+ # On retourne le référentiel
|
|
|
+ return(donnees_referentiel)
|
|
|
+
|
|
|
+def liste_refpypmsi():
|
|
|
+ '''
|
|
|
+ liste_refpypmsi - Fonction qui renvoie la liste des référentiels existants
|
|
|
+
|
|
|
+ output :
|
|
|
+ Pandas Dataframe : dataframe contenant la liste des référentiels existants
|
|
|
+ '''
|
|
|
+
|
|
|
+ liste_referentiels = refpypmsi("liste_refpmsi")
|
|
|
+
|
|
|
+ return(liste_referentiels)
|
|
|
+
|
|
|
+def refpmsi(referentiel = '', periodepmsi = '', ignorer_periode_manquante = True, chemin = ''):
|
|
|
+ return refpypmsi(referentiel=referentiel, periodepmsi=periodepmsi, ignorer_periode_manquante=ignorer_periode_manquante)
|
|
|
+
|
|
|
+def liste_refpmsi():
|
|
|
+ return liste_refpypmsi()
|