Aller au contenu

Ressources et Image de Marque

AppriseAsset définit le contexte global d’exécution d’une session Apprise.

Il ne se limite pas à l’image de marque ou au thème. Une instance d’asset influence le comportement de :

  • tous les plugins de notification ;
  • tous les threads d’envoi ;
  • le stockage persistant et le matériel de clé ;
  • les limites de sécurité globales (masquage des journaux et protection contre la récursion).

Dans la plupart des cas, un asset est créé une seule fois puis passé à Apprise(...) lors de son instanciation.

from apprise import Apprise, AppriseAsset
asset = AppriseAsset(app_id="Mon application", theme="default")
apobj = Apprise(asset=asset)

Si aucun asset n’est fourni, Apprise en crée un par défaut.

  • créé une seule fois, en général au démarrage de l’application ;
  • partagé entre tous les plugins chargés et le traitement de configuration ;
  • destiné à être considéré comme immuable pendant toute la durée de vie d’une instance Apprise.

Modifier un asset après l’avoir lié à Apprise peut produire des résultats incohérents d’un plugin à l’autre.

AppriseAsset.__init__() fournit des arguments nommés pour le stockage, les délais d’attente, les limites de messages et d’autres réglages partagés. Utilisez toujours le nom documenté du constructeur, comme timezone=, service_timeout= ou payload_max_size=. Ces arguments valident les valeurs avant de les appliquer.

Les arguments du constructeur Python et les clés YAML asset: sont des interfaces distinctes. Certains réglages sont accessibles aux applications par AppriseAsset(...), mais volontairement indisponibles dans la configuration YAML.


Ce tableau documente les vraies valeurs par défaut issues de l’implémentation, ainsi que l’endroit où chaque champ est utilisé.

ChampTypePar défautUtilisé parNotes
app_idstrAppriseEn-têtes de plugins, noms de clésUtilisé comme identifiant applicatif lisible et comme nom par défaut pour la génération de clés PGP.
app_descstrApprise NotificationsMétadonnées / présentationUtilisé par les outils et services qui affichent une description d’application.
app_urlstrhttps://github.com/caronc/appriseMétadonnées / présentationURL du fournisseur exposée dans la documentation et certaines métadonnées de plugins.
themestrdefaultRésolution d’URL/chemin d’icônesPilote la substitution {THEME} lors de la recherche d’icônes.
languagestrlangue du systèmeTextes traduitsDéfinit la langue utilisée par Apprise pour ses propres textes, comme les noms de champs renvoyés par details(). Accepte en, en-CA ou en_CA. Une région revient à sa langue de base, puis à l’anglais, lorsque aucune traduction n’est installée. YAML accepte language ou son alias lang.
default_extensionstr.pngRésolution d’URL/chemin d’icônesUtilisé lorsque extension n’est pas fourni à image_url() ou image_path().
default_image_sizeNotifyImageSizeXY_256Résolution d’URL d’icônesUtilisé quand la taille est omise.
image_url_maskstrURL GitHub rawimage_url()Produit une URL d’image thémée pour NotifyType + taille.
image_url_logostrURL GitHub rawimage_url(logo=True)Utilisé pour le logo de l’application.
image_path_maskstrlocal assets/themes/...image_path() / image_raw()Utilisé pour la résolution locale d’icônes et le chargement des octets bruts.
ChampTypeValeur par défautUtilisé parNotes
html_notify_mapdict[NotifyType,str]mappage type vers hexcolor()Mappage couleur par défaut pour les services HTML.
default_html_colorstr#888888color()Utilisé lorsqu’un mappage est absent.
ascii_notify_mapdict[NotifyType,str]mappage type vers jetonascii()Jetons ASCII par défaut pour les contextes purement texte.
default_ascii_charsstr[?]ascii()Utilisé lorsqu’un mappage est absent.
ChampTypeDéfautUtilisé parNotes
body_formatNotifyFormatNonePré-traitement messageSélectionne le format d’entrée par défaut. Si None, aucun pré-formatage n’est appliqué.
interpret_emojisboolNonePré-traitement messageContrôle la conversion des emojis. Si None, le réglage de chaque service s’applique (par exemple emojis=yes dans l’URL).
interpret_escapesboolFalsePré-traitement messageActive \n, \t, etc. avant l’envoi.
encodingstrutf-8EncodageUtilisé lors du traitement des chaînes et par certains services pendant l’envoi. Conservez la valeur par défaut sauf besoin particulier.
ChampTypeDéfautUtilisé parNotes
async_modeboolTrueOrchestration des envoisContrôle l’envoi concurrent ou séquentiel.
default_service_retryint0Tentatives par serviceNombre de tentatives par défaut pour tout service sans ?retry= dans son URL. Limité à [0, 10].
default_service_waitfloat0.5Tentatives par serviceDélai inter-tentative par défaut (secondes) pour les services sans ?wait=. Limité à [0.0, 20.0].
service_timeoutint / float60.0Délai par serviceNombre maximal de secondes qu’un service (toutes tentatives comprises) peut prendre avant qu’Apprise n’abandonne et ne signale un TIMEOUT. 0 désactive la limite. Voir Résultats de notification.
result_log_memory_sizeint0Journaux du résultatOctets conservés en mémoire avant de transférer les journaux vers un fichier temporaire. Utilisé seulement si result_log_disk_size est supérieur à 0.
result_log_disk_sizeint0Journaux du résultatEspace disque temporaire maximal pour le résultat d’une notification. 0 conserve tous les journaux en mémoire.
ChampTypeDéfautUtilisé parNotes
plugin_pathslist[str][]Chargement personnaliséDéclenche la détection de modules à l’initialisation.
ChampTypeDéfautUtilisé parNotes
storage_pathstrNoneNoneRacine de PersistentStore. Si absent, Apprise fonctionne uniquement en mémoire pour ces fonctions.
storage_modePersistentStoreModeautoComportement PersistentStoreauto, flush, memory.
storage_idlenint8Génération d’espaces nommésContrôle la longueur des répertoires de namespace générés.
storage_saltbytesb""Génération d’espaces nommésFournit un salage facultatif ; les chaînes sont encodées avec encoding.
ChampTypeDéfautUtilisé parNotes
pgp_autogenboolTrueContrôleur PGPQuand True, un auto-envoi avec pgp=encrypt peut générer la paire de clés RSA-2048 de l’expéditeur dans le stockage persistant. Les clés des destinataires et de pgp=sign ne sont jamais générées.
pem_autogenboolTrueContrôleur PEMActive la génération automatique de clés PEM si le stockage le permet et qu’aucune clé n’est fournie.

Quand pgp_autogen = True, un auto-envoi avec pgp=encrypt peut générer les deux fichiers de clés de l’expéditeur si aucune clé n’est trouvée :

  • {localpart}-pub.asc : clé publique RSA-2048 utilisée pour l’auto-envoi
  • {localpart}-prv.asc : clé privée RSA-2048 utilisée pour les réponses et les signatures ultérieures

{localpart} est dérivé de l’adresse From de l’expéditeur (tout ce qui précède le @, en minuscules).

La clé privée peut ensuite être découverte par pgp=sign dans le même stockage. Importez-la dans le client qui lit les réponses chiffrées. Les destinataires externes nécessitent toujours une clé existante ; Apprise n’en génère jamais pour eux.

Pour désactiver la génération automatique globalement :

from apprise import AppriseAsset
asset = AppriseAsset(
storage_path="/var/lib/apprise",
pgp_autogen=False,
)

Avec pgp_autogen = False, aucune paire de clés n’est créée automatiquement. Une clé doit provenir du stockage local, de WKD ou d’un chemin pgppub= explicite.

ChampTypeDéfautUtilisé parNotes
http_redirectsboolTrueTous les plugins HTTPQuand True (par défaut), les plugins suivent les redirections 3xx, conformément au comportement de la bibliothèque requests. Définir à False pour désactiver le suivi des redirections globalement sans toucher aux URLs individuelles.
secure_loggingboolTruePipeline de journalisationAjoute un coût pour masquer les secrets dans les logs ; recommandé de le laisser activé.
allow_templatesboolTrueConfiguration YAMLAutorise une configuration YAML à déclarer une section template: et à remplir les marqueurs ${NOM}. Définir à False : la section est ignorée, ${NOM} reste du texte ordinaire et rien n’est lu dans l’environnement. Voir Variables de substitution.
payload_max_sizeint0Formatage/découpage des messagesLimite facultative sur la taille combinée du titre et du corps avant formatage. 0 la désactive. S’applique à tous les modes overflow=.
payload_buffer_thresholdint10Formatage/découpage des messagesUn titre ou un corps de cette longueur ou moins peut rester entier ; voir Plafond de taille des messages.
payload_min_bufferint25Formatage/découpage des messagesCaractères réservés à l’autre côté avant de conserver le côté court en entier ; voir Plafond de taille des messages.
timezonestr / tzinfofuseau systèmeComportement temporelDéfinit le fuseau horaire utilisé par les plugins qui génèrent des horodatages. Accepte un nom IANA comme "America/Toronto" ou un objet tzinfo. YAML accepte timezone ou son alias tz.

Configure l’instance Apprise avec une image de marque personnalisée.

from apprise import AppriseAsset
asset = AppriseAsset(
app_id="StatsBot",
app_desc="Service d'agrégation de métriques",
app_url="https://example.com",
)

Apprise résout les icônes à l’aide de masques configurables.

asset = AppriseAsset(
image_path_mask="/icons/{THEME}/{TYPE}-{XY}{EXTENSION}",
image_url_mask="https://cdn.example.com/{TYPE}-{XY}{EXTENSION}",
)
JetonDescription
{THEME}Thème actif
{TYPE}info, success, warning, failure
{XY}Taille de l’image
{EXTENSION}Extension de fichier

Par défaut, Apprise suit les redirections HTTP 3xx, conformément au comportement de la bibliothèque requests sous-jacente. Si vous souhaitez empêcher la transmission des en-têtes personnalisés et des identifiants vers des destinations différentes de l’URL d’origine, vous pouvez désactiver globalement le suivi des redirections :

asset = AppriseAsset(http_redirects=False)

Les URLs individuelles peuvent toujours remplacer la valeur par défaut de l’asset via le paramètre d’URL redirect= :

# Remplacement par URL, indépendamment du réglage de l'asset
schema://token/?redirect=yes
schema://token/?redirect=no

Lorsqu’elle est activée, les secrets sont masqués dans toutes les sorties de journal.

asset = AppriseAsset(secure_logging=True)

La désactiver est fortement déconseillé en dehors d’environnements isolés.

payload_max_size définit la limite du message, c’est-à-dire le budget total de caractères (N) pour le titre et le corps avant le formatage ou le découpage. La valeur 0 désactive cette limite. Si le titre et le corps tiennent déjà dans N, Apprise les laisse inchangés.

asset = AppriseAsset(payload_max_size=100000)

Trois réglages fonctionnent ensemble lorsque le contenu dépasse N :

RéglageDéfautRôle
payload_max_size0Définit N, le budget total. 0 désactive la limite.
payload_buffer_threshold10Un titre ou un corps aussi court peut être conservé en entier.
payload_min_buffer25Espace que l’autre côté doit conserver avant de garder le côté court en entier.

Avec les valeurs par défaut, un message trop volumineux est résolu dans cet ordre :

  1. Un côté est vide : l’autre reçoit tout le budget.
  2. Un côté est court : un titre de 10 caractères ou moins reste entier si le corps peut conserver 25 caractères, ou toute sa longueur s’il est plus court. La même règle vérifie ensuite si le corps est court. Si les deux sont admissibles, le titre est vérifié en premier.
  3. Sinon : le titre et le corps se partagent N selon leurs longueurs d’origine. Lorsque N permet de représenter les deux, chacun conserve au moins un caractère.

Par exemple, un titre de 20 caractères et un corps de 18 caractères avec N=20 se répartissent environ 10/10. Une limite plus petite peut encore produire un fragment court, mais elle ne favorise pas un côté lorsque les deux peuvent être représentés.

Les utilisateurs de la bibliothèque peuvent modifier les deux réglages lors de la création de l’asset :

asset = AppriseAsset(
payload_max_size=100000,
payload_buffer_threshold=10,
payload_min_buffer=25,
)

Avec payload_min_buffer=0, aucune place n’est réservée : un côté court admissible peut donc utiliser toute la limite.

Le formatage et l’échappement peuvent ensuite ajouter quelques caractères. La limite s’applique à tous les modes overflow=, y compris upstream.

YAML prend volontairement en charge moins de réglages d’asset que le constructeur Python. Les contrôles numériques comme service_timeout, payload_max_size, payload_buffer_threshold et payload_min_buffer doivent être fournis par leurs arguments nommés dans AppriseAsset(...). Les chemins de plugins et les réglages de stockage sont également contrôlés par l’application afin qu’un fichier de configuration ne puisse ni charger du code ni rediriger le stockage persistant.

timezone est pris en charge dans YAML et peut aussi utiliser l’alias tz :

asset:
timezone: America/Toronto # ou : tz: America/Toronto

language est pris en charge dans YAML et peut aussi utiliser l’alias lang :

asset:
language: fr # ou : lang: fr
  • Routage par Tags & Tentatives — comment configurer les tags de priorité, les tentatives/attente par service, les délais maximum par service et les remplacements par appel dans les fichiers de configuration.
  • Résultats de notification — comment un service en échec ou dont le délai a expiré vous est signalé depuis notify().
Questions ou commentaires ?

Documentation

Vous avez repéré une faute de frappe ou une erreur ?

Problèmes Techniques

Vous rencontrez un problème avec le code ? Ouvrez un ticket sur GitHub :

Conçu avec amour depuis le Canada