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

Merged
bdauvergne merged 2 commits from wip/73805-settings-REQUESTS-SUBSTITUTION-p into main 2023-01-31 16:09:04 +01:00
Owner
settings.REQUESTS_SUBSTITUTIONS = [
 {
   'url': 'https://service.example.com/api/',
   'search': 'http://service.example.internal/software/api/',
   'replace': 'https://service.example.com/api/'
 }
]
  • substitution is only done on the following content-types:
    text/, application/ but not application/octet-stream
  • scheme and netloc are strictly matched, path must be a prefix or empty
  • search is a python regular expression
  • replace is a replacement string for reb.sub()
  • for json, structural replacement is implemented, if eventually
    escaping is used.
settings.REQUESTS_SUBSTITUTIONS = [ { 'url': 'https://service.example.com/api/', 'search': 'http://service.example.internal/software/api/', 'replace': 'https://service.example.com/api/' } ] * substitution is only done on the following content-types: text/*, application/* but not application/octet-stream * scheme and netloc are strictly matched, path must be a prefix or empty * search is a python regular expression * replace is a replacement string for reb.sub() * for json, structural replacement is implemented, if eventually escaping is used.
Owner

Fonctionne sur la ged Parsifal, en me rebasant sur https://dev.entrouvert.org/issues/73771

Fonctionne sur la ged Parsifal, en me rebasant sur https://dev.entrouvert.org/issues/73771
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from 32a49c37b5 to 6b27c575e7 2023-01-25 11:22:10 +01:00 Compare
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from 6b27c575e7 to 319b14ef68 2023-01-25 11:22:45 +01:00 Compare
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from 319b14ef68 to ef3903878a 2023-01-26 18:02:18 +01:00 Compare
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from ef3903878a to c3ba597a81 2023-01-26 18:15:09 +01:00 Compare
Ghost requested changes 2023-01-30 12:35:48 +01:00
Ghost left a comment
First-time contributor

La clé sur la configuration pourrait être sur le même format que l'URL (cmis/test au lieu de cmis.test). Et l'url pourrait être facultative : sans elle, alors le search/replace est fait sur toutes les requ

La clé sur la configuration pourrait être sur le même format que l'URL (cmis/test au lieu de cmis.test). Et l'url pourrait être facultative : sans elle, alors le search/replace est fait sur toutes les requ
@ -248,0 +248,4 @@
# Substitution to apply to textual HTTP responses
# Example for all CMIS connector with slug "test":
# {
# "cmis.test": [
First-time contributor

On pourrait mettre carrément cmis/test, ça sera "comme l'URL", plus facile à se rappeler.

Aussi, ce commentaire, le commencer par REQUESTS_SUBSTITUTIONS = pour rappeler que c'est ce settings dont on parle.

On pourrait mettre carrément cmis/test, ça sera "comme l'URL", plus facile à se rappeler. Aussi, ce commentaire, le commencer par REQUESTS_SUBSTITUTIONS = pour rappeler que c'est ce settings dont on parle.
@ -248,0 +250,4 @@
# {
# "cmis.test": [
# {
# 'url': 'https://service.example.com/api/',
First-time contributor

"url" devrait être facultative, si elle n'existe pas alors le search/replace se fait sur toutes les requests du connecteur. Ca aidera, la config n'aura pas à être modifiée si l'URL cible change.

"url" devrait être facultative, si elle n'existe pas alors le search/replace se fait sur toutes les requests du connecteur. Ca aidera, la config n'aura pas à être modifiée si l'URL cible change.
Ghost marked this conversation as resolved
@ -283,0 +297,4 @@
if not isinstance(substitution, dict):
self.logger.warning('substitution: invalid substitution, %r', substitution)
return
for key in ['url', 'search', 'replace']:
First-time contributor

vu plus haut : rendre la clé "url" facultative

vu plus haut : rendre la clé "url" facultative
Author
Owner

J'ai ajouté deux commits temporaires avec les modifications demandées.

J'ai ajouté deux commits temporaires avec les modifications demandées.
bdauvergne requested review from Ghost Team 2023-01-30 15:04:45 +01:00
Ghost requested changes 2023-01-30 15:32:27 +01:00
Ghost left a comment
First-time contributor

Désolé j'avais raté un truc sur le log (le reste me semble tout bon)

Désolé j'avais raté un truc sur le log (le reste me semble tout bon)
@ -282,1 +283,4 @@
def _substitute(self, search, replace, value):
if isinstance(value, str):
value = re.sub(search, replace, value)
First-time contributor

Je me dis que ça serait pas mal d'utiliser ici re.subn et de faire un self.logger.debug s'il y a eu au moins une substitution, un truc comme :

   value, nsub = re.subn(search, replace, value)
   if nsub:
       self.logger.debug('substitution: %d occurrences' % nsub)
Je me dis que ça serait pas mal d'utiliser ici re.subn et de faire un self.logger.debug s'il y a eu au moins une substitution, un truc comme : ``` value, nsub = re.subn(search, replace, value) if nsub: self.logger.debug('substitution: %d occurrences' % nsub) ```
@ -283,0 +332,4 @@
self.logger.debug('substitution: content_type did not match %s', content_type)
return
self.logger.debug('substitution: %s matched', substitution)
First-time contributor

ce debug (me) laisse à penser que la substitution va être faite ("matched"). Plutôt écrire plus explicitement « substitution: try %s » ?

ce debug (me) laisse à penser que la substitution va être faite ("matched"). Plutôt écrire plus explicitement « substitution: try %s » ?
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from e7334c81a3 to fb44371519 2023-01-30 21:32:39 +01:00 Compare
Author
Owner

La dernière mise à jour de la branche intègre la proposition de définir un setting plus générique CONNECTORS_SETTINGS, indexé par les chaînes f'{instance.get_connector_slug()}/{instance.slug}' dont requests_subtitutions est la première clé définie.

La dernière mise à jour de la branche intègre la proposition de définir un setting plus générique CONNECTORS_SETTINGS, indexé par les chaînes f'{instance.get_connector_slug()}/{instance.slug}' dont requests_subtitutions est la première clé définie.
Author
Owner

J'ai intégré tes remarques sur les logs.

J'ai intégré tes remarques sur les logs.
bdauvergne requested review from Ghost Team 2023-01-30 21:37:25 +01:00
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from 15b0061d00 to 121bd40ab4 2023-01-30 21:43:34 +01:00 Compare
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from ce966a822f to 7cf2ae472b 2023-01-31 01:27:50 +01:00 Compare
Ghost approved these changes 2023-01-31 15:53:44 +01:00
Ghost left a comment
First-time contributor

Il reste un "cmis.test" dans le message de commit, en dehors de ça tout est ok.

Il reste un "cmis.test" dans le message de commit, en dehors de ça tout est ok.
bdauvergne force-pushed wip/73805-settings-REQUESTS-SUBSTITUTION-p from 7cf2ae472b to 738709aa9c 2023-01-31 16:08:28 +01:00 Compare
bdauvergne merged commit cd9b550d50 into main 2023-01-31 16:09:04 +01:00
bdauvergne deleted branch wip/73805-settings-REQUESTS-SUBSTITUTION-p 2023-01-31 16:11:40 +01:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/passerelle#63
No description provided.