Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/config #65

Open
wants to merge 11 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ static/shapefiles/*

static/dist/*
static/src/js/config/config*.js
static/src/js/config/config*.toml

procedure_install_server.sh

Expand Down
12 changes: 6 additions & 6 deletions app/modules/oeasc/declaration/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def send_mail_validation_declaration(declaration, b_create):
if b_create:
msg = Message(
"[OEASC] Votre déclaration a bien été prise en compte",
sender=config["ANIMATEUR_APPLICATION_MAIL"],
sender=config.get("ANIMATEUR_APPLICATION_MAIL"),
recipients=[email_user],
)
msg.html = render_template(
Expand All @@ -69,8 +69,8 @@ def send_mail_validation_declaration(declaration, b_create):

# test si utilisateur est l'animateur pas de mail
if email_user in [
config["ANIMATEUR_APPLICATION_MAIL"],
config["ADMIN_APPLICATION_MAIL"],
config.get("ANIMATEUR_APPLICATION_MAIL"),
config.get("ADMIN_APPLICATION_MAIL"),
]:
return

Expand All @@ -79,10 +79,10 @@ def send_mail_validation_declaration(declaration, b_create):
if b_create
else "[OEASC] [ANIMATEUR] Modification de la déclaration "
+ str(declaration["id_declaration"]),
sender=config["ANIMATEUR_APPLICATION_MAIL"],
sender=config.get("ANIMATEUR_APPLICATION_MAIL"),
recipients=[
config["ANIMATEUR_APPLICATION_MAIL"],
config["ADMIN_APPLICATION_MAIL"],
config.get("ANIMATEUR_APPLICATION_MAIL"),
config.get("ADMIN_APPLICATION_MAIL"),
],
)

Expand Down
8 changes: 3 additions & 5 deletions app/modules/oeasc/user/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,13 @@ def send_mail(recipients, subject, msg_html):
)

with MAIL.connect() as conn:

msg = Message(
"[" + application.nom_application + "] " + subject,
sender=config["ANIMATEUR_APPLICATION_MAIL"],
sender=config.get("ANIMATEUR_APPLICATION_MAIL"),
recipients=recipients,
)

msg.html = msg_html

conn.send(msg)

return {"msg": "ok"}
Expand Down Expand Up @@ -81,8 +79,8 @@ def valid_temp_user(data):
return {"msg": "Pas de role pour valid_temp_user"}

recipients = [
config["ANIMATEUR_APPLICATION_MAIL"],
config["ADMIN_APPLICATION_MAIL"],
config.get("ANIMATEUR_APPLICATION_MAIL"),
config.get("ADMIN_APPLICATION_MAIL"),
]
subject = " [ANIMATEUR] création d" " un nouvel utilisateur"

Expand Down
1 change: 1 addition & 0 deletions app/modules/oeasc/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Fonctions à utilisé danbs Jinja
ex: utils.print_date pour afficher la date au format jour-mois-année
"""
# ?? Utilisé
from dateutil import parser
from flask import current_app

Expand Down
115 changes: 0 additions & 115 deletions app/utils/command.py

This file was deleted.

16 changes: 16 additions & 0 deletions app/utils/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import os
from collections import ChainMap

from .config_schema import (
OeascGeneralSchemaConf,
OeascPySchemaConf,
)
from .utilstoml import load_and_validate_toml
from .env import DEFAULT_CONFIG_FILE


config_path = os.environ.get("GEONATURE_CONFIG_FILE", DEFAULT_CONFIG_FILE)

config_backend = load_and_validate_toml(config_path, OeascGeneralSchemaConf)
config_serveur = load_and_validate_toml(config_path, OeascPySchemaConf)
config = ChainMap({}, config_serveur, config_backend)
106 changes: 28 additions & 78 deletions app/utils/config_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,11 @@
Description des options de configuration
"""

import os

from marshmallow import Schema, fields
from marshmallow.validate import OneOf, Regexp


class CasUserSchemaConf(Schema):
URL = fields.Url(missing="https://inpn.mnhn.fr/authentication/information")
ID = fields.String(missing="mon_id")
PASSWORD = fields.String(missing="mon_pass")


class CasSchemaConf(Schema):
CAS_AUTHENTIFICATION = fields.Boolean(missing="false")
CAS_URL_LOGIN = fields.Url(missing="https://preprod-inpn.mnhn.fr/auth/login")
CAS_URL_LOGOUT = fields.Url(missing="https://preprod-inpn.mnhn.fr/auth/logout")
CAS_URL_VALIDATION = fields.String(
missing="https://preprod-inpn.mnhn.fr/auth/serviceValidate"
)
CAS_USER_WS = fields.Nested(CasUserSchemaConf, missing=dict())
USERS_CAN_SEE_ORGANISM_DATA = fields.Boolean(missing=False)


class RightsSchemaConf(Schema):
NOTHING = fields.Integer(missing=0)
MY_DATA = fields.Integer(missing=1)
MY_ORGANISM_DATA = fields.Integer(missing=2)
ALL_DATA = fields.Integer(missing=3)


class GnPySchemaConf(Schema):
class OeascPySchemaConf(Schema):
SQLALCHEMY_DATABASE_URI = fields.String(
required=True,
validate=Regexp(
Expand All @@ -48,63 +22,39 @@ class GnPySchemaConf(Schema):
COOKIE_EXPIRATION = fields.Integer(missing=7200)
COOKIE_AUTORENEW = fields.Boolean(missing=True)
TRAP_ALL_EXCEPTIONS = fields.Boolean(missing=False)
SENTRY_DSN = fields.String()

UPLOAD_FOLDER = fields.String(missing="static/medias")
BASE_DIR = fields.String(
missing=os.path.dirname(
os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
)
)


class GnFrontEndConf(Schema):
PROD_MOD = fields.Boolean(missing=True)
DISPLAY_FOOTER = fields.Boolean(missing=True)
MULTILINGUAL = fields.Boolean(missing=False)

class MailConf(Schema):
MAIL_SERVER = fields.String(required=False)
MAIL_PORT = fields.Integer(required=False)
MAIL_USE_TLS = fields.Boolean(required=False)
MAIL_USE_SSL = fields.Boolean(required=False)
MAIL_USERNAME = fields.String(required=False)
MAIL_PASSWORD = fields.String(required=False)
MAIL_DEFAULT_SENDER = fields.String(required=False)
MAIL_MAX_EMAILS = fields.Integer(required=False)
MAIL_SUPPRESS_SEND = fields.Boolean(required=False)
MAIL_ASCII_ATTACHMENTS = fields.Boolean(required=False)
# ERROR_MAIL_TO = EmailStrOrListOfEmailStrField(load_default=None)

class MailErrorConf(Schema):
MAIL_ON_ERROR = fields.Boolean(missing=False)
MAIL_HOST = fields.String(missing="")
HOST_PORT = fields.Integer(missing=465)
MAIL_FROM = fields.String(missing="")
MAIL_USERNAME = fields.String(missing="")
MAIL_PASS = fields.String(missing="")
MAIL_TO = fields.List(fields.String(), missing=list())


class GnGeneralSchemaConf(Schema):
appName = fields.String(missing="GeoNature2")
DEFAULT_LANGUAGE = fields.String(missing="fr")
class OeascGeneralSchemaConf(Schema):
appName = fields.String(missing="oeasc")
PASS_METHOD = fields.String(missing="hash", validate=OneOf(["hash", "md5"]))
DEBUG = fields.Boolean(missing=False)
URL_APPLICATION = fields.Url(required=True)
API_ENDPOINT = fields.Url(required=True)
API_TAXHUB = fields.Url(required=True)
LOCAL_SRID = fields.Integer(required=True, missing=2154)
ID_APPLICATION_GEONATURE = fields.Integer(missing=14)
XML_NAMESPACE = fields.String(missing="{http://inpn.mnhn.fr/mtd}")
MTD_API_ENDPOINT = fields.Url(missing="https://preprod-inpn.mnhn.fr/mtd")
CAS = fields.Nested(CasSchemaConf, missing=dict())
RIGHTS = fields.Nested(RightsSchemaConf, missing=dict())
FRONTEND = fields.Nested(GnFrontEndConf, missing=dict())
MAILERROR = fields.Nested(MailErrorConf, missing=dict())

URL_FRONTEND = fields.Url(required=True)
URL_USERSHUB = fields.Url(required=True)

class ManifestSchemaConf(Schema):
package_format_version = fields.String(required=True)
module_name = fields.String(required=True)
module_version = fields.String(required=True)
min_geonature_version = fields.String(required=True)
max_geonature_version = fields.String(required=True)
exclude_geonature_versions = fields.List(fields.String)
ID_APP = fields.Integer(required=True)


class ManifestSchemaProdConf(Schema):
# module_path = fields.String(required=True)
module_name = fields.String(required=True)


class GnModuleProdConf(Schema):
api_url = fields.String(required=True)
id_application = fields.Integer(required=True)
MAIL_ON_ERROR = fields.Boolean(missing=False)
ANIMATEUR_APPLICATION_MAIL = fields.String(missing="")
ADMIN_APPLICATION_PASSWORD = fields.String()
ADMIN_APPLICATION_LOGIN = fields.String()
ADMIN_APPLICATION_MAIL = fields.String()
MAIL_CONFIG = fields.Nested(MailConf, load_default=MailConf().load({}))

# Paramètre de pypnnomenclature
ENABLE_NOMENCLATURE_TAXONOMIC_FILTERS = fields.Boolean(missing=True)
Loading