Projet

Général

Profil

Development #73805

settings.CONNECTORS_SETTINGS pour définir des substitutions simples sur du contenu texte (et autres, plus tard)

Ajouté par Benjamin Dauvergne il y a environ un an. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
24 janvier 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Pour pallier aux proxys idiots et autres API gateways.

Révisions associées

Révision c218597f (diff)
Ajouté par Benjamin Dauvergne il y a environ un an

misc: add setting to define string substitutions on HTTP responses (#73805)

settings.CONNECTORS_SETTINGS = {
'cmis/test': {
'requests_substitutions': [ {
'url': 'https://service.example.com/api/',
'search': 'http://service.example.internal/software/api/',
'replace': 'https://service.example.com/api/'
}
]
}
}

CONNECTORS_SETTINGS is a new setting to contain any setting pertaining
to a specific connector, it's a dictionnary of dictionnaries indexed by
connectors identifier constructed from the appname and the connector's
slug.

requests_substitutions is the first defined key in this dictionnary,
it's a list of dictionnaries:
  • substitution is only done on the following content-types:
    text/*, application/(.*\+)?json, application/(.*\+)?xml
  • default list of content-types can be changed through the
    REQUESTS_SUBSTITUTIONS_CONTENT_TYPES setting.
  • scheme and netloc are strictly matched, path must be a prefix or empty
  • search is a python regular expression
  • url is optionnal, and restrict the substitution to URLs with the same
    prefix,
  • replace is a replacement string for reb.sub()
  • for json, structural replacement is implemented, if eventually
    escaping is used.

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Sujet changé de settings.REQUESTS_SUBSTITUTION pour définir des substitution simple sur du contenu texte à settings.REQUESTS_SUBSTITUTION pour définir des substitutions simples sur du contenu texte
#2

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Nouveau à Solution proposée

Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :

#7

Mis à jour par Nicolas Roche il y a environ un an

  • Privée changé de Non à Oui
#9

Mis à jour par Nicolas Roche il y a environ un an

  • Privée changé de Oui à Non
#14

Mis à jour par Frédéric Péters il y a environ un an

Je suis plutôt de manière globale à encourager l'exposition dans les interfaces du paramétrage, plutôt que confier ça à des settings synonymes d'interventions de CPT et d'oublis lors de migrations ou d'export/import.

Mais une fonctionnalité de substitution d'URL assez générique, quand on est face à des services qui exposent des URL internes, je trouve oui que ça serait régulièrement utile, exemple encore aujourd'hui #73736#note-6, pour Cart@DS à Grand Lyon j'avais été aussi obligé https://git.entrouvert.org/passerelle-grandlyon-cartads-cs.git/tree/grandlyon_cartads_cs/models.py#n54

Cela étant, je trouve que c'est ici trop générique, que ça devrait être par connecteur. (cf #73736#note-6 qui utilise un http://localhost:8080/, pour lequel on pourrait facilement vouloir selon le connecteur une substitution différente).

Ça me va de mettre de côté l'aspect UI, qui serait vu "plus tard", et d'avoir simplement une clé permettant de préciser un/des slugs de connecteurs dans la configuration (et qu'en l'absence ça concerne tout le monde, même).

#17

Mis à jour par Benjamin Dauvergne il y a environ un an

Pull request à jour avec :
  • configuration par connector-slug :
                settings.REQUESTS_SUBSTITUTIONS = {
                 "cmis": [
                   {
                     'url': 'https://service.example.com/api/',
                     'search': 'http://service.example.internal/software/api/',
                     'replace': 'https://service.example.com/api/'
                   }
                 ]
                }
    
  • un deuxième commit pas tellement gratuit pour que les regexps sur les content-types pour savoir si on doit logger leur body ou pas soit là même que pour les substitutions, je me suis fait avoir avec CMIS, le content-type est application/atom+xml et pas juste application/xml ça fait pareil avec SOAP où le type de contenu peut parfois être application/soap+xml (et idem avec json, avec par exemple application/geo+json). J'ai modifié aussi le nom de la fonction qui calcule le match, je ne trouvais pas le nom très clair.
#18

Mis à jour par Benjamin Dauvergne il y a environ un an

Et dernier ajustement, c'est configuré par "{instance.get_connector_slug()}.{instance.slug}" comme ça le jour où veut passer ça en modèle ce sera simple de savoir à quelle ressource accrocher le bazar.

#19

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Solution proposée à En cours

Thomas NOEL (tnoel) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :

#20

Mis à jour par Robot Gitea il y a environ un an

Thomas NOEL (tnoel) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :

#21

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de En cours à Solution proposée
#22

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Solution proposée à Solution validée

Thomas NOEL (tnoel) a approuvé une pull request sur Gitea concernant cette demande :

#23

Mis à jour par Thomas Noël il y a environ un an

  • Sujet changé de settings.REQUESTS_SUBSTITUTION pour définir des substitutions simples sur du contenu texte à settings.CONNECTORS_SETTINGS pour définir des substitutions simples sur du contenu texte (et autres, plus tard)
#24

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Solution validée à Résolu (à déployer)

Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :

#25

Mis à jour par Transition automatique il y a environ un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#26

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF